matlab音乐键盘模拟,Matlab课程设计报告--MATLAB GUI的音乐键盘仿真

41528d3028836879cd698677c3999917.gifMatlab课程设计报告--MATLAB GUI的音乐键盘仿真

《 MATLAB 实践 》 课程设计 目 录 1.设计目的…………………………………………………3 2.题目分析…………………………………………………3 3.总体设计…………………………………………………4 4.具体设计…………………………………………………4 5.结果分析…………………………………………………15 6.心得体会…………………………………………………15 1、 设计目的: 运用MATLAB实现MATLAB的GUI程序设计。 2、题目分析: 课程设计题目: MATLAB GUI的音乐键盘仿真 课程设计的基本要求: 1)熟悉和掌握MATLAB 程序设计方法。 2)掌握MATLAB GUI 程序设计。 3)学习音乐合成基本知识。 设计分析: 这次使用的设计软件是MATLAB的GUI模块,要设计一个音乐键盘要知道一个最简单的键盘本身要有36个发音键,既21个音阶和15个辅音阶。于是就要在界面上画出36个pushbutton键,再根据其他要求的功能设计出其他相应的模块。 模拟键盘发音是使用音频函数soundsc将不同频率的函数以声音的模式表现出来,而每个音阶相差频率f=440*2^2/12;音阶与相应的辅音阶相差频率f=440*2^1/12。有了音乐合成的这些基本知识后便可根据自己需要设计界面根据功能编写相应的回调函数。 课程设计的内容: 学习MATLAB GUI程序设计,设计和实现一个音乐键盘仿真系统。要求:按照软件工程方法,根据需求进行程序的功能分析和界面设计,给出设计详细说明。然后按照自己拟定的功能要求进行程序设计和调试。 1)设计音乐键盘GUI界面,实现单音键盘的发声。 2)实现键盘的双音多频,即每个键盘对应低音频组的一个频率和高音频组的一个频率,实现按键的发出双音。 3)能改变音乐包络形式,实现音型的改变。 4)能够演奏一段音乐。 5)改变键盘的音色,给基音加上泛音序列,模拟不同的乐器演奏。 6)选作:根据节奏节拍,根据简谱自动演奏一段音乐。 3、总体设计 其中琴键区域实现按键发声,可用鼠标点击,也可以用键盘实现;显示屏区域实现声音波形的实时显示;控制区域实现对整个系统的控制,包括音乐播放、暂停、停止,视屏播放,乐器切换,节拍切换和谐波切换。 4、具体设计 外板设计图如下: 4.1 琴键区域设计 (1) 界面设计 (2) 单个按键函数设计 该琴键设计为C调,1对应频率为261.63Hz,相邻两键为一个半音,频率比为:2^1/12,因此后面频率类推,如2对应293.67Hz。 单个按键函数如下: function pushbutton1_Callback(hObject, eventdata, handles) f=261.63; if get(handles.radiobutton3, Value )==1; N=8000; end; if get(handles.radiobutton4, Value )==1; N=2000; end; if get(handles.radiobutton5, Value )==1; N=25000; end; if get(handles.radiobutton9, Value )==1; T=1; end; if get(handles.radiobutton10, Value )==1; T=0.5; end; if get(handles.radiobutton11, Value )==1; T=0.25; end; n=0:1/N:T; x=exp(-2*n); if get(handles.radiobutton14, Value )==1; ft=x.*sin(f*2*pi*n); end if get(handles.radiobutton13, Value )==1; ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n); end if get(handles.radiobutton12, Value )==1; ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n)+0.3*sin(f*3*2*pi*n); end voice=get(handles.voice, Value ) sound(ft*voice,8000); plot(n,ft); axis tight; (3) 实现结果: 可以根据按下不同的键,发出不同音调的声音,且没有失真。 4.2显示屏区域设计 (1)界面设计 (2)函数设计 改模块主要功能是用来实现声音波形实时显示,因此只需要要在每个按键函数里面添加波形显示函数即可: plot(n,ft); axis tight; (3)功能实现 钢琴,1/2节拍,单音波形 敲击,1/8节拍,2次谐波波形 4.3 节拍切换设计 (1)界面设计 (2)函数设计 if get(handles.radiobutton3, Value )==1; N=8000; end; if get(handles.radiobutton4, Value )==1; N=2000; end; if get(handles.radiobutton5, Value )==1; N=25000; end; if get(handles.radiobutton9, Value )==1; T=1; end; if get(handles.radiobutton10, Value )==1; T=0.5; end; if get(handles.radiobutton11, Value )==1; T=0.25; end; n=0:1/N:T; (3)功能实现 ‘duo’音,1/2节拍: ‘duo’音,1/4节拍: ‘duo’音,1/8节拍: 4.4 谐波切换设计 (1)界面设计 (2)函数设计 if get(handles.radiobutton14, Value )==1; ft=x.*sin(f*2*pi*n); end if get(handles.radiobutton13, Value )==1; ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*pi*n); end if get(handles.radiobutton12, Value )==1; ft=x.*sin(f*2*pi*n)+0.2*sin(f*2*2*p

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值