基于MATLAB软件的音乐合成毕业论文(6)

2019-08-26 18:36

河北经贸大学毕业论文

end

west(n:n+time(a)-1)=ss.*P(1:time(a)); %给第a个乐音加上包络 n=n+time(a); end

t1=linspace(0,length(west)/fs,length(west));

set(handles.axes1,'HandleVisibility','ON');%开始使用坐标,便于操作 axes(handles.axes1);%操作在坐标1 plot(t1,west');axis([-0.2 4.2 -1.7 1.7]); xlabel('t/s');ylabel('幅度');

5.4 音乐《小星星》字幕动态显示模块的设计与实现

运用前面的简单音乐合成的相关原理及方法来合成音乐《小星星》并且实现小星星歌词字幕的动态显示。《小星星》的音乐简谱如图5-12所示。

图5-12 《小星星》音乐简谱

用钢琴的标准音A4=440Hz,根据国际上规定的十二平均律,相邻的半音之间频率之比是1.059463,而且由图可知乐谱的基调是1=C,即该段音乐的基准频率设置为Pt=44100Hz。在编写程序的过程中运用十二平均律的计算方法 即:scale12=A4/2^(9/12)*2.^((0:11)/12)。由上图5-12的音乐简谱可知,此音乐为七音符,程序中设置为map=[1 3 5 6 8 10 12]。

21

河北经贸大学毕业论文

其中的乐谱写为:score=[1 1 5 5 6 6 5,4 4 3 3 2 2 1,5 5 4 4 3 3 2,5 5 4 4 3 3 2,1 1 5 5 6 6 5,4 4 3 3 2 2 1]。音乐的每个唱名持续的时间设置为rhythm=repmat([1 1 1 1 1 1 2],1,6)。

针对于音乐《小星星》的歌词在GUI界面实现边播放边显示,用到的是GUI中的edit1文本框,应用语句set(handles.edit1,‘string’,变量名)来达到显示的目的,其中歌词的文字用矩阵lyric=[‘一闪一闪亮晶晶’‘满天都是小星星’‘挂在天上放光明’‘它是我们的小眼睛’‘一闪一闪亮晶晶’‘满天都是小星星’]来完成编辑。

其中该段音乐合成及频谱显示的程序如下。

y = [];

for i=1:length(score) %length(score) 为score的长度为7*6=42 y =[y sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i))))];%音乐合成 end

t = linspace(0,length(y)/pt,length(y));%时域波形在界面坐标显示 set(handles.axes1,'HandleVisibility','ON');%开始启动坐标,便于操作 axes(handles.axes1);%开始图像的使用,基本操作在坐标1 plot(t(1:pt/10),y(1:pt/10)); axis([-0.01 0.11 -1.2 1.2]); xlabel('t/s');ylabel('幅度');

NFFT = 2^nextpow2(length(y));%傅里叶频谱分析 Y = fft(y,NFFT)*2/length(y); g = pt/2*linspace(0,1,NFFT/2+1);

set(handles.axes2,'HandleVisibility','ON');%开始启动坐标,便于操作 axes(handles.axes2);%开始使用图像,操作在坐标2 plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1 550 -0.1 max(2*abs(Y(1:NFFT/2+1)))+0.2]); xlabel('f/Hz');ylabel('幅度'); str = []; for i=1:length(score)

if mod(i,7)==0 s=sprintf('',[lyric(i)]); str=strcat(str,s); str=[str,10];

set(handles.edit1,'String',str); pause(0);

wavplay(sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i)))),pt); else

22

河北经贸大学毕业论文

wavplay(sin((1:rhythm(i)*p0)/pt*2*pi*scale12(map(score(i)))),pt);

s = sprintf('',lyric(i)); str=strcat(str,s); set(handles.edit1,'String',str) pause(0); End

图5-13为音乐《小星星》在GUI界面的字幕显示。

图5-13 《小星星》的字幕显示

图5-13中的字幕显示在GUI界面中实现的是边播放边显示。 图5-14是音乐小星星的时域与频域仿真实现图。

图5-14 《小星星》时域与频域图形

23

河北经贸大学毕业论文

6 系统的调试与运行

本设计利用MATLAB软件,通过MATLAB GUI构建一个具有图形用户界面的音乐合成系统,界面友好、操作方便。该系统成功地实现了音乐的简单合成、音乐的降噪处理、音乐的加谐波处理、音乐的升降度处理、音乐的时域和频域波形显示分析及基于傅里叶级数分析合成的音乐的操作。但这些操作并不是轻松实现的,在编程与设计过程中,各个模块也是经过验证与调试才达到如今的效果。

6.1 音乐的播放、暂停的调试与运行

在设计音乐的播放与暂停这个功能时,一开始是用MATLAB中的sound函数,将向量转换成声音,进行音乐的播放,但是它的不足之处是在播放的过程中不能中途暂停,也就是暂停的功能不能体现出来,因此,将sound函数的语句sound(west,8000)替换,分别有播放、暂停、继续播放,实现了音乐的暂停与播放功能。编写程序如下。

function button8_Callback(hObject, eventdata, handles)%音乐的播放 global flag global west fs p; if flag==1

p=audio player(west,fs); %将向量转换成声音 play(p); %播放音乐 end

function button9_Callback(hObject, eventdata, handles)%音乐的暂停 global p flag; if flag==1

pause(p);%音乐的暂停 end

function button12_Callback(hObject, eventdata, handles)%音乐的继续播放 global p; if flag ==1

reae(p);%音乐的继续播放 end

24

河北经贸大学毕业论文

6.2 傅里叶变换分析音乐的调试与运行

在用傅里叶分析合成的音乐的模块中,一开始计划使用MATLAB中的wavread函数来读取.wav文件,实现相应功能,但是总不成功,后来通过查阅资料和MATLAB help的帮助才意识到那个光盘中并不存在现成的fmt.wav 文件,所以用另一种方法实现音乐傅里叶频谱显示,通过学习了MATLAB中快速傅里叶变换函数FFT的用法,利用FFT函数实现了该功能,编写程序如下。

NFFT = 2^nextpow2(length(west)); Y = fft(west,NFFT)*2/length(west); g = fs/2*linspace(0,1,NFFT/2+1);

set(handles.axes2,'HandleVisibility','ON');%打开坐标,方便操作 axes(handles.axes2);%使用图像,操作在坐标2 plot(g,2*abs(Y(1:NFFT/2+1)));axis([-0.1 max(f1)+50 -0.1 max(2*abs(Y(1:NFFT/2+1)))+0.2]); xlabel('f/Hz');ylabel('幅度');

在该系统各个模块设计的过程中,都会也遇到或大或小的问题,比如,在合

成音乐的过程中,4节拍对应的频率与持续时间的计算问题;在GUI界面设计过程中参数的设置问题等,这些问题都通过查阅资料,进一步的调试与运行,成功地实现了要达到的功能。成功地实现了音乐的播放以及经过各种处理之后的音乐播放。

25


基于MATLAB软件的音乐合成毕业论文(6).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:常见食物热量及蛋白质含量表

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: