来源:CSDN
发布时间:Nov 15, 2020, 3:25:52 PM
原地址:https://blog.csdn.net/weixin_47255475/article/details/109706357
sound函数
上课老师提到了sound函数,一个非常简单的函数,sound - 将信号数据矩阵转换为声音。以下为其用法:
sound(y) //以默认采样率 8192 赫兹向扬声器发送音频信号 y。
sound(y,Fs) //以采样率 Fs 向扬声器发送音频信号 y。
sound(y,Fs,nBits) //对音频信号 y 使用 nBits 的采样位数。
生成波形的函数
在这里用第一种用法即可。
首先编写一个生成波形的函数gen_wave。
// An highlighted block
function y=gen_wave(tone,rythm)
Fs=8192;
%freqs=[523,578,659,698,783,880,988,1047,1174,1318,1397,1567,1760,1976,2094,2219,2350,1];%c
%freqs=[392,440,494,523,578,659,740,783,880,988,1046,1175,1318,1480,1568,1865,1976,1];%g
%freqs=[349,392,440,466,523,578,659,698,783,880,932,1047,1174,1318,1397,1567,1750,1];%f
freqs=[440,494,554,578,659,740,831,880,988,1109,1174,1318,1480,1661,1760,1976,2218,1];%a
x=linspace(0,2*pi*rythm,floor(Fs*rythm));
if tone<=17
y=exp(-x/rythm/2).*(sin(freqs(tone)*x)+0.25*sin(2*freqs(tone)*x)+0.0625*...
sin(4*freqs(tone)*x)+0.015625*sin(8*freqs(tone)*x));%几个乱写的谐波,听起来好听一点
else
y=0*exp(-x/rythm).*sin(freqs(tone)*x);
end
//那几个数组分别是各个调对应的频率
喀秋莎
对照简谱编写脚本并且运行
y1=gen_wave(8,0.75);
y2=gen_wave(6,0.25);
y3=gen_wave(7,0.75);
y4=gen_wave(5,0.25);
y5=gen_wave(7,0.25);
y6=gen_wave(7,0.25);
y7=gen_wave(6,0.25);
y8=gen_wave(5,0.25);
y9=gen_wave(4,0.5);
y10=gen_wave(6,0.5);
y11=gen_wave(4,0.5);
y12=gen_wave(9,0.25);
y13=gen_wave(8,0.75);
y14=gen_wave(6,0.25);
y15=gen_wave(5,0.25);
y16=gen_wave(4,0.25);
y17=gen_wave(3,0.25);
y18=gen_wave(8,0.25);
y19=gen_wave(6,1);
part0=[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19];
y1=gen_wave(6,0.75);
y2=gen_wave(7,0.25);
y3=gen_wave(8,0.75);
y4=gen_wave(6,0.25);
y5=gen_wave(8,0.5);
y6=gen_wave(7,0.25);
y7=gen_wave(6,0.25);
y8=gen_wave(7,0.5);
y9=gen_wave(3,0.5);
y10=gen_wave(7,0.75);
y11=gen_wave(8,0.25);
y12=gen_wave(9,0.75);
y13=gen_wave(7,0.25);
y14=gen_wave(9,0.25);
y15=gen_wave(9,0.25);
y16=gen_wave(8,0.25);
y17=gen_wave(7,0.25);
y18=gen_wave(6,1);
part1=[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18];
y1=gen_wave(10,0.5);
y2=gen_wave(13,0.5);
y3=gen_wave(12,0.5);
y4=gen_wave(13,0.25);
y5=gen_wave(12,0.25);
y6=gen_wave(11,0.5);
y7=gen_wave(10,0.25);
y8=gen_wave(9,0.25);
y9=gen_wave(10,0.5);
y10=gen_wave(6,0.75);
y11=gen_wave(11,0.5);
y12=gen_wave(9,0.25);
y13=gen_wave(10,0.75);
y14=gen_wave(8,0.25);
y15=gen_wave(7,0.25);
y16=gen_wave(3,0.25);
y17=gen_wave(8,0.25);
y18=gen_wave(7,0.25);
y19=gen_wave(6,1);
part2=[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16,y17,y18,y19];
KQS=[part0,part1,part2,part2];
sound(KQS)
audiowrite('Катюша.wav',KQS,8192)
clear KQS
点击运行就大功告成啦(不过听不出来像什么)。
歌唱动荡的青春
最后再把歌唱动荡的青春代码分享给大家,还是用同样的函数。
%歌唱动荡的青春
%作曲:阿·巴赫慕托娃
%MATLAB程序:祖国在我心中
%% part1
y1=gen_wave(3,0.5);
y2=gen_wave(6,0.5);
y3=gen_wave(6,0.25);
y4=gen_wave(7,0.25);
y5=gen_wave(8,0.5);
y6=gen_wave(6,0.5);
y7=gen_wave(11,0.5);
y8=gen_wave(10,1);
y9=gen_wave(8,0.5);
y10=gen_wave(9,0.5);
y11=gen_wave(9,0.5);
y12=gen_wave(10,0.5);
y13=gen_wave(9,0.25);
y14=gen_wave(8,0.25);
y15=gen_wave(7,0.5);
y16=gen_wave(6,1);
part1=[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15,y16];
%% part2
y1=gen_wave(3,0.5);
y2=gen_wave(6,0.5);
y3=gen_wave(6,0.25);
y4=gen_wave(7,0.25);
y5=gen_wave(8,0.5);
y6=gen_wave(6,0.5);
y7=gen_wave(13,0.5);
y8=gen_wave(12,1);
y9=gen_wave(10,0.5);
y10=gen_wave(11,0.5);
y11=gen_wave(11,0.25);
y12=gen_wave(10,0.25);
y13=gen_wave(11,0.5);
y14=gen_wave(12,0.5);
y15=gen_wave(10,1.5);
part2=[y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11,y12,y13,y14,y15];
%% part3
y16=gen_wave(10,0.5);
y17=gen_wave(13,1);
y18=gen_wave(15,1);
y19=gen_wave(14,0.5);
y20=gen_wave(13,1);
y21=gen_wave(12,0.25);
y22=gen_wave(13,0.25);
y23=gen_wave(14,0.75);
y24=gen_wave(13,0.25);
y25=gen_wave(12,0.5);
y26=gen_wave(13,0.5);
y27=gen_wave(10,1.5);
y28=gen_wave(8,0.5);
y29=gen_wave(13,1);
y30=gen_wave(12,0.75);
y31=gen_wave(11,0.25);
y32=gen_wave(10,0.5);
y33=gen_wave(9,1);
y34=gen_wave(11,0.5);
y35=gen_wave(10,0.5);
y36=gen_wave(9,0.25);
y37=gen_wave(10,0.25);
y38=gen_wave(11,0.5);
y39=gen_wave(10,0.5);
y40=gen_wave(13,2);
part3=[y16,y17,y18,y19,y20,y21,y22,y23,y24,y25,y26,y27,y28,y29,y30,...
y31,y32,y33,y34,y35,y36,y37,y38,y39,y40];
%% part4
SOTY=[part1,part2,part3];
sound(SOTY)
audiowrite('歌唱动荡的青春.wav',SOTY,8192)
clear SOTY