MATLAB入门学习笔记12
- linspace函数是Matlab中的均分计算指令,x=linspace(0,2*pi,100)表示x范围为0-2π,中间均分为100个点
音乐小知识
- 点在声音中称为采样率,采样率表示在1秒钟取了多少个点
- MATLAB中默认的采样率为8192,可Fs=8192
- 音乐中有个标准音高,A=440Hz
- 经实践,改变Fs值的大小,声音没变化,说明声音大小与Fs无关,而与Hz有关,Hz越大,音越尖细
-
十二平均律图如下:
do 、re、mi、fa、 sol、la(880)、 si(988)对应的频率如最后一列所示,则可根据频率创造出对应的音
谱曲过程
发出声音
采样率太小听不到声音(如下为嘟~的一声)
发出音阶
如下发出do 、re、mi、fa、 sol、la、 si:
Fs=8192;
x=linspace(0,2*pi,Fs);
freqs=[523,587,659,698,783,880,988] 将频率设置成序列
y1=sin(freqs(1)*x); 取序列的第一个值
y2=sin(freqs(2)*x);
y3=sin(freqs(3)*x);
y4=sin(freqs(4)*x);
y5=sin(freqs(5)*x);
y6=sin(freqs(6)*x);
y7=sin(freqs(7)*x);
y=[y1,y2,y3,y4,y5,y6,y7]; 新·声音序列
sound(y,Fs) 位置1是声音序列,位置2是采样率Fs
发出曲调
则按曲调的音阶排列声音序列即可(如下为一闪一闪亮晶晶的曲调):
Fs=8192;
x=linspace(0,2*pi,Fs);
freqs=[523,587,659,698,783,880,988]
y1=sin(freqs(1)*x);
y2=sin(freqs(1)*x);
y3=sin(freqs(5)*x);
y4=sin(freqs(5)*x);
y5=sin(freqs(6)*x);
y6=sin(freqs(6)*x);
y7=sin(freqs(5)*x); 末尾两个5,是因为尾音长
y8=sin(freqs(5)*x);
y=[y1,y2,y3,y4,y5,y6,y7y8];
sound(y,Fs)
发出有起伏的曲调
但如此出来的是平调,没有起伏,即声音刚进入时强烈,后来渐弱。则乘以一个递减的函数((0,1)和(2π,0)两点连线的那条直线),修改如下:
长曲
如果一首完整的歌,音调,节拍都不同,如此拼凑比较麻烦,则做如下修改(floor函数是为了取整):
????