基于matlab的数字电子琴的完全指导手册

发布时间 : 星期三 文章基于matlab的数字电子琴的完全指导手册更新完毕开始阅读

y=amp*sawtooth(2*pi*x*frequency+phase); case 5 %白噪声

y=amp*(2*rand(size(x))-1); otherwise

errordlg('Illegal wave type','Chooseerrer'); end

plot(x,y); %显示波形 axis([0,0.01,-200,200]);

wavplay(y,Fs,'async'); %播放声音,使用async(异步)模式可以实现发声的混迭

4.2.3. 添加回调函数

MATLAB对于输入框与按钮的响应都是通过自动调用相应的回调函数实现的。 对于波形选择下拉框,在回调函数中添加 handles.soundtype=get(hObject,'Value'); guidata(hObject,handles); 以获得并存储所选波形。

对于频率输入,在回调函数中添加

handles.frequency=str2double(get(hObject,'String')) guidata(hObject,handles);

对于幅值与相位的输入可类似频率将结果存于handles.amp与handles.phase中。

对于播放按钮,在回调函数中添加

playsound(handles.soundtype,handles.frequency,handles.amp,handles.phase); 对于音键,以A为例,在回调函数中添加

playsound(handles.soundtype,131,handles.amp,handles.phase); 其中131为A键对应的频率。

默认值按钮的作用相当于初始化,在其回调函数中添加 set(handles.popupmenu1,'value',1); set(handles.edit1,'String','400'); set(handles.edit4,'String','180'); set(handles.edit5,'String','0'); handles.soundtype=1; handles.frequency=400; handles.amp=180; handles.phase=0;

guidata(hObject,handles);

最后,为主窗口添加一个KeyPressFcn回调函数,如下 switch get(hObject,'CurrentKey')

case '1' % pushbutton1_Callback是A按钮的回调函数 pushbutton1_Callback(hObject, eventdata, handles);

case '2' % pushbutton2_Callback是B按钮的回调函数 pushbutton2_Callback(hObject, eventdata, handles); ??

end

用于响应键盘输入,从而可以使用键盘弹琴。

4.3. MATLAB与VC实现的对比

Matlab是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,为众多学科领域提供了一种简洁、高效的编程工具。Visual C++是Windows平台下主要的应用程序开发环境之一,它能方便实现软件开发,开发的系统具有界面友好、执行速度快、易维护和升级等优点。下面将给出两者在实现数字电子琴的不同点。

(1) 开发速度。MATLAB的开发速度远比VC的快;

(2) 运行速度。VC做的电子琴的运行速度远比MATLAB做的快; (3) 界面。尽管都能做出图形界面,但VC做的界面更加友好;

(4) 功能。VC做的电子琴能在键按下时发声,松开时停止发声,但MATLAB

只能在按键时发声1s,不能控制发声时间;

(5) VC开发的电子琴可以在所有windows环境下运行,而MATLAB开的发电

子琴的运行依赖于MATLAB软件。

从对两者的对比可以看出,两种语言各有各的优点,因此实现VC与Matlab混合编程,使两者结合起来,协同工作,必将提高软件开发效率,使所开发的软件具有更高的性能,更大的应用范围,也可以为科学研究和工程技术提供更强的技术支持。

参考文献

联系合同范文客服:xxxxx#qq.com(#替换为@)