基于Matlab的数字电子琴的
与实现
数字信号处理算法与实践
之
基于Matlab的数字电子琴的设计与实现
学生: 吕柳燕
班级:机硕0701
学号:200770438
指导教师:何岭松
日期:2007-9-28
基于Matlab的数字电子琴的设计与实现 学生:吕柳燕
基于Matlab的数字电子琴的设计与实现 电子琴发展概况
电子琴是随着电子技术的广泛应用而产生。1959年,世界上第一台全晶体管双排键电子琴在日本诞生。从此,电子琴技术不断发展成熟,电子琴的普及也越来越广。
电子琴在中国的推广始于20世纪八十年代,至今在音色、音质、演奏的便利性等方面都达到了相当成熟的地步,而且随着集成电路技术的发展,其升级换代可以在保持原有结构不变的情况下,通过简单的芯片更换实现。但是,电子琴也有明显的不足之处:与非电子乐器,如钢琴、管弦乐器等的协奏问题,限制了电子琴在重要音乐场所的使用,这极大的影响了电子琴的应用和推广。协调电子琴与非电子乐器的协奏,是当前音乐界人士和电子琴开发商的当务之急。
电子琴发音原理
物体振动时会发出声音,振动的频率不同,声音的音调就不同。在电子琴里,虽然没有振动的弦、簧、管等物体,却有许多特殊的电装置,每个电装置一工作,就会使喇叭发出一定频率的声音。当按动某个琴键时,就会使与它对应的电装置工作,从而使喇叭发出某种音调的声音。
电子琴的音量控制器,实质上是一个可调电阻器。当转动音量控制器旋扭时,可调电阻器的电阻就随着变化。电阻大小的变化,又会引起喇叭声音强弱的变化。所以转动音量控制旋扭时,电子琴发声的响度就随之变化。
当乐器发声时,除了发出某一频率的声音??基音以外,还会发出响度较小、频率加倍的辅助音??谐音。我们听到的乐器的声音是它发出的基音和谐音混合而成的。不同的乐器发出同一基音时,不仅谐音的数目不同,而且各谐音的响度也不同。因而使不同的乐器具有不同的音品。在电子琴里,除了有与基音对应的电装置外,还有与许多谐音对应的电装置,适当地选择不同的谐音电装置,就可以模仿出不同乐器的声音来。
基于 Matlab的数字电子琴实现原理
振动频率不同,音调就不同。电子琴的每一按键对应一个频率不同的正弦波,按下按键,产生正弦波,播放波形即可听到对应按键的基音。
基于Matlab的数字电子琴的实现
在Matlab环境下,设置如图,1所示的数字电子琴界面,编程实现按键A
1 第 页 共3页
基于Matlab的数字电子琴的设计与实现 学生:吕柳燕 至O的消息映射即可。
实现要点
(1) 按键A至O对应的正弦波频率(HZ)依次为:131、147、165、175、196、
220、247、262、294、330、349、392、440、494、523 (2) 按键对应正弦波频率的数字显示
下面是按键A对应的消息映射:,其余按键代码相同,只是频率f值不同
图,1 数字电子琴交互界面
,映射函数
function pushbutton3_Callback(hObject, eventdata, handles)
,映射代码:由设计者编写
A=1; ,正弦波幅度
f=131; ,正弦波频率
Fs=11025; ,PC声卡抽样频率
P=60; ,正弦波初始相位
,数字正弦波产生代码
T=1.0/f;
dt=T/Fs;
N=T/dt;
t=linspace(0,1,N);
y=A*sin(2*pi*f*t+P);
Phandel=findobj('Tag','edit1');
2 第 页 共3页
基于Matlab的数字电子琴的设计与实现 学生:吕柳燕 set(Phandel,'String',f,'FontSize',15.0) ;,显示正弦波频率
plot(t,y,'r'); ,显示正弦波波形
grid ;
axis([0,0.1,-1.5,1.5]);
wavplay(y,11025); ,按键发音(基音)
pause(1);
cla; ,波形显示1秒后消失
设计尚需完善之处
(1)实际上,当按下电子琴的某一键,电子琴除了发出某一频率的声音??基音以外,还会发出响度较小、频率加倍的辅助音??谐音。我们听到的乐器的声音是它发出的基音和谐音混合而成的。
需要对映射代码稍加修改,添加谐音成分,使发音更加逼近电子琴实体。
(2)设计的电子琴界面中,琴键由鼠标操控;若能实现PC键盘上的A至O键与电子琴琴键,至O的对应关系,即按下键盘A键与用鼠标按下琴键A等价, 则电子琴交互界面更加友好。
3)设计的电子琴无法实现音量控制。 (
参考文献:
伊泽明,丁春利,《精通Matlab 6》,清华大学出版社
3 第 页 共3页
基于Matlab的数字电子琴的设计与实现 学生:吕柳燕
4 第 页 共3页