基于MATLAB 的数字电子琴设计日期:2011-3-25姓名:王之海、郑俊超、张楠、杜坤组号:第一组1.目标与范围随着计算机软硬件技术的发展,越来越多现实物品的功能能够由计算机实现。
也就是我们经常所说的将硬件设备软件化,这样做的好处很多,比如说将成本降低,易于实现,修改容易并且可以进行仿真。
现在比较成熟的这类软件有很多,比如说LABVIEW/基于这样的考虑我们进行了数字电子琴的模拟仿真实验。
这样一个实验的进行会为以后的学习工作中奠定一定的基础/2.信号处理原理数字信号发生器的功能就是将数字信号通过D/A转换变成所需要的模拟信号。
由于声卡本身具有D/A转换的功能,从而可以利用声卡在计算机了模拟信号发生器声卡的D/A转换机理是定时将声卡缓冲区中的内容转换成模拟信号并输出,所以软件所做的即是向声卡缓冲区中写数据。
以正弦信号为例,其模拟信号计算工时如下为实现数字信号的发生,在程序中先根据公式计算出需要存放到缓冲区的数据,以数组的形式存放,然后将数据存放入声卡的缓冲区。
对于方波,y=sig n(s in (2*pi*f*t+p))对于其它波形,可以用类似方法实现。
软件的流程图如图所示数字电子琴的流程图3.系统的功能分析软件的功能由数字信号发生器和数字电子琴两部分组成。
(1)数字信号发生器的功能能够产生正弦波、方波、三角波等常见的波形的数字信号,并且提供了图形界面用于选择波形、频率、幅值与相位。
能够根据用户指定的波形和参数产生相应的数字信号,然后将数字信号写入声卡的缓冲区,最后由声卡播放出相应的声音。
(2)数字电子琴的功能1)数字电子琴的功能是基于数字信号发生器的,通过条用数字信号发生器产生一系列指定的频率的声音,从而达到虚拟的电子琴的功能,界面中包含do/rai/mi…共16个琴键,鼠标按下时即时发声秒;并可通过键盘敲击按键进行琴音播放。
2)可播放wav 格式文件;3)进行图形绘制;4)进行背景色的更换;5)添加(去除)网格、边框功能;6)退出程序。
4.系统的界面设计根据软件的功能需求,可设计如图所示的操作界面主要包括三个部分:第一为波形控制区,可进行波形等各种参数设置;第二是按键控制区,用于对各种按键进行操作;第三是绘图命令区, 用于手动输入命令进行绘图,可以编制多种复杂命令追溯原音频率。
第 四是琴键区,包括从do 到#do 共16个音键;第五为背景颜色调整区, 为下拉菜单,可对背景颜色进行选择。
5. 系统的模块设计模块化就是把程序划分成独立命名且可独立访问的模块, 每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的 功能满足用户需求。
根据人类解决一般问题的经验,如果一个问题由两 个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程 度之件右第一■!细机械设计专业 匸之海张楠郑俊超社坤B1去曲&«r.5t 件韶丹显云区 址朗侪»控制区 站带世J* 第认」将咬 电子琴的GUI 界面和,也就是说把复杂的问题分解成许多容易解决的小问题,原来的问题也就容易解决了。
这就是模块化的根据。
对GUI的模块进行如图所示的模块划分:数字电子琴的模块划分键盘模块设计后台程序设计对每个对象进行回调函数的设计,首先介绍do~#do 按钮的设计,先进行回调函数设计,满足在按下相应按钮时输入对应的频率。
16键盘模块的设计是在GUI的界面上,把键设计出来后,激活后自动生成的,只需要按照D/A要求进行代码的转换。
例如对do键的程序设置为:function do_Callback(hObject, eventdata, handles) 根据回到函数找到do 键的主函数位置,然后由difsound 函数来进行编写,其格式为:difsound,264,,;其它键程序程序的编写都是基于这一原理进行编写的。
在这里不在一一介绍。
控制模块设计控制模块的设计为在大模块的基础上进行波形、频率、幅值、相位以及默认值、开始按钮的添加,其原理与键的原理是一样的,也是通过callback 函数来进行函数的编写。
例如对波形的编写,可由callback 来找到程序的位置,其程序为:function option_Callback(hObject, eventdata, handles)然后由get 函数进行函数参数的调取为:=get(hObject,'Value');guidata(hObject,handles); 同样也是用这样的方法对频率、幅值、相位进行编写。
而对默认值的编写则是比较麻烦的,通过set 函数来对默认值进行设置。
其程序为:set,'Value',1);set,'String',10);set,'String',20); set,'String',0);=1;=10;=0;=20;guidata(hObject,handles);波形选择功能本程序是通过difsound 函数来驱动声卡进行发音的,然后再通过switch…case…end语句来调取不同的波形,从而发出不同的声音。
其程序为:function difsound(option,A,phase,f)Fs=44100;t=0:1/Fs:;switch optioncase 1 y=A*sin(2*pi*f*t+phase);case 2 y=A*sign(sin(2*pi*f*t+phase));case 3 y=A*sawtooth(2*pi*f*t+phase,;case 4 y=A*sawtooth(2*pi*f*t+phase);case 5y=A*(2*rand(size(t))-1);otherwiseerrordlg('please choose another one or set to the defalt first');endplot(t,y);axis tight;wavplay(y,Fs);键盘关联功能的实现除了界面键盘区可以用鼠标点击操作来实现按键功能,了用电脑键盘按键来实现触发动作。
我们还设计使用的对应按键从Z至L程序如下:function figure1_KeyPressFcn(hObject, eventdata, handles) switch get(hObject,'CurrentKey')case 'z'do_Callback(hObject,eventdata,handles);case 's'udo_Callback(hObject,eventdata,handles);case 'x'rai_Callback(hObject,eventdata,handles);case 'd'urai_Callback(hObject,eventdata,handles);case 'c'mi_Callback(hObject,eventdata,handles);case 'f'umi_Callback(hObject,eventdata,handles);case 'v'fa_Callback(hObject,eventdata,handles);case 'g'ufa_Callback(hObject,eventdata,handles);case 'b'so_Callback(hObject,eventdata,handles);case 'h'uso_Callback(hObject,eventdata,handles);case 'n' la_Callback(hObject,eventdata,handles);case 'j' ula_Callback(hObject,eventdata,handles);case 'm'xi_Callback(hObject,eventdata,handles);case 'k' uxi_Callback(hObject,eventdata,handles);case ',' updo_Callback(hObject,eventdata,handles);case 'l'uudo_Callback(hObject,eventdata,handles);otherwiseerrordlg('z to , are C# , s to l are D#');end背景颜色菜单函数(以红色为例)我们还设置了一个改变背景颜色的功能!程序如下:functionred_Callback(hObject, eventdata, handles) set(gcbf,'Color','r');set(gcbo,'Checked','on');set,'Checked','off');set,'Checked','off');绘图控制函数function paint_Callback(hObject, eventdata, handles)com=get,'String');if isempty(com)eval(com');endplaywav 函数播放wav 格式的文件也是我们加入的一个特色文件!程序如下:function playwav_Callback(hObject, eventdata, handles)[FileName,PathName]二uigetfile('*wav',' 选择WAN文件');[y,Fs,bits]=wavread(FileName);sound(y,Fs,bits);6.系统运行情况演示绘图-正弦波波形图示例作者 弟一不羽 机,幡谊计专业 王之海 鸭楠 郑怖紹 札闻键盘弹奏波形图fF< 第一小制 机楸设计专业 王Z 海张愉 郑阳趨 杜坤啟豐挫制区| Kk |叭酉巨蓿去丙稠| 期£41I .蹇Mz*i垢啟柚立卄L BM3H L ±!厂第国曲些控制E数字电子琴咼图请會松啊区被片FiHl^ 古口准*Jil占亠唯s 1Bfa*dSa岸1*4tjE r.p+fJTF* I *0<*i数字电了琴««相征-藏书控制医耶.0屮「-1ff第一牛用叽咸许计专业三之莊圧耀I?和区亠Z iM i| 'Jldtl . 2 = 11~ ifiI&“Efk —牺J 是丄加上网格线巷第屮用机摄设计专业王之海张楠郑使趙tt坤数字电子琴1内!hfl「注弔控悯回相奇正手贡憧《hj制辺KA,I■Ml W皿占d«E |i&出数宀子电了琴尧壬金4■哙帼M「rt弔栓制氐 ----------------- ]■M KU1:IjkH ■■红色背景件卞第一小詛叽袖険计专业王之海张棉琲慢趨栏坤数字电了琴'^s齡牛惶制:z*<■1X1 I*hthj-i绿色背景播放wav格式功能7.结论与展望本项目由王之海、郑俊超、张楠、杜坤协作完成,其中由王之海、张楠来完成程序的研发和调试以及实验报告的书写,郑俊超、杜坤两人来完成电子琴GUI界面的设计与绘制。