基于MATLAB软件GUI界面的可编程电音合成器软件

基于MATLAB软件GUI界面的可编程电音合成器软件

概要:
本文基于MATLAB及其GUI界面设计了一个基可编程电音合成器软件。利用MATLAB的GUI控件及相关算法,实现了多种音色电子音的合成,做到了音长、音色、音调可控和显示的多样化。基本音调包含了钢琴88键的频率,音色可选范围有正弦、方波、锯齿波、四段包络的正弦波、KarplusStrong合成波等。另外,软件还实现了midi文件的编解码,用户可通过对midi数组的编程自行设计电音曲目。

关键字:
电音合成器;MATLAB; 可编程

 

1 总体设计

1.1 设计思路

   软件首先设计了Synthesizer界面,将音频的音频显示坐标、频域显示坐标、数据输入输出界面集成到一起,实现电音合成与播放的基本功能;再设计子界面mymidi,通过该界面读取midi文件并播放。用户可以自行设计midi矩阵以实现个性化的设计。

1.2 软件运行

   本软件运行在MATLAB上,打开MATLAB,在工作路径下粘贴本软件源代码、和一个音频信号作为提示音,点击运行即可出现用户交互界面。通过操作界面内一系列按钮以及快捷键即可使用本软件。
 

2 软件功能说明

2.1 软件界面

   设计了如图1和图2所示的显示界面:

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图 1 软件显示界面(1)
《基于MATLAB软件GUI界面的可编程电音合成器软件》
图2 软件显示界面(2)

2.1.1 菜单栏

   界面Synthesizer有6个下拉菜单

   “开始”菜单有2个子菜单,分别为“读取midi文件”和“创作midi文件”。点击“读取midi文件”后,弹出mymidi界面;点击“创作midi文件”后,显示出“创作一”和“创作二”子文件,分别对应另个midi曲目。如图3所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图3 “开始”菜单

 
   “显示”菜单有8个子菜单,分别为“色彩”、“线型”、“线宽”、“标记点型”、“标记点边缘色”、“标记点表面色”、“标记点尺寸”和“恢复默认”。它们各自都有若干子菜单,作用是设置对应的图像属性。如图4所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》       图4 (1) 《基于MATLAB软件GUI界面的可编程电音合成器软件》         图4 (2) 《基于MATLAB软件GUI界面的可编程电音合成器软件》         图4 (3)
《基于MATLAB软件GUI界面的可编程电音合成器软件》       图4 (4) 《基于MATLAB软件GUI界面的可编程电音合成器软件》         图4 (5) 《基于MATLAB软件GUI界面的可编程电音合成器软件》         图4 (6)
《基于MATLAB软件GUI界面的可编程电音合成器软件》                       图4 (7) 《基于MATLAB软件GUI界面的可编程电音合成器软件》                    图4 (8)

图4 “显示”菜单的8个子菜单

 
   “音色”菜单设置所合成的单音音色,有5个子菜单,分别为“无包络锯齿波”、“无包络方波”、“无包络正弦”、“四段包络正弦”、“KarplusStrong合成”。如图5所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图5 “音色”菜单

 
   “音高”菜单设置所合成的单音的音高,按照钢琴键盘的分类,将音高分为以下9个音组,也就是对应的子菜单,分别为:“大字二组”、“大字一组”、“大字组”、“小字组”、“小字一组”、“小字二组”、“小字三组”、“小字四组”、“小字五组”。如图6所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图6 “音高”菜单

 
   “音长”菜单设置所合成的单音的音长,默认每个单音音符0.6s,每次改变0.1s,或增加或减少。如图7所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图7 “音长”菜单

 
   “帮助”菜单有2个子文件夹,分别为“版本说明”和“使用说明”,分别介绍软件的基本情况。如图8所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图8 “帮助”菜单

2.1.2 工具栏

   GUI的工具栏内有11个工具,它们从左到右依次是:“显示网格线”、“放大”、“缩小”、“数据游标”、“增加线宽”、“减小线宽”、“增加标记点尺寸”、“减小标记点尺寸”、“增加单音节时长”、“缩短单音节时长”和“恢复默认”。如图9所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图9 工具栏

 
   “显示网格线”工具的功能是在时域频域图中显示或隐藏网格线;
   “放大”、“缩小”工具的功能是缩放图像。
   “数据游标”工具的功能是显示波形图中各点的横纵坐标。
   “增加线宽”、“减小线宽”、“增加标记点尺寸”、“减小标记点尺寸”、“增加单音节时长”、“缩短单音节时长”和“恢复默认”工具的功能对应的菜单功能相同。

2.1.3 MySynthesizer界面

   MySynthesizer界面有2个坐标轴,一个参数显示框和一组单音节键盘框,2个坐标轴分别显示当前合成的单音的时域、频域波形;参数显示框显示当前合成的单音的频率值、所属音组、音色、音长、显示线宽和标记点尺寸等参数;单音组键盘有12个按键可选,表示待合成的按键音。通过对音色、音长等参数的选择,可以合成多音色、多频率、多音长的单音,还可以通过对显示参数的选择从多角度观察信号。其中,KarplusStrong合成算法对高频音的合成效果不佳,因此,当选择此音色时,设置高频音组“小字三组”、“小字四组”和“小字五组”为无效。由于KarplusStrong合成算法的特殊性,对于同一音符会有多种频谱,但是其基音频率都是相同的。

2.1.4 mymidi界面

   点击“开始”->“读取midi文件”之后会弹出mymidi界面。
   mymidi界面有2个菜单、2个工具和2张坐标。
   “打开”菜单为读取.mid文件,并将其解码为一个一维数组,并包含有音轨、声道、采样率等基本音频信息。同时,解码得到的信号将在第一张坐标(上侧)上显示,在第二张坐标(下侧)上显示其对应的自动打孔纸卷图,颜色代表了每个音符的响度。
   “合成音色”有5个子菜单,设置读取并解码的音频文件的合成音色。如图10所示。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图10 mymidi界面的“合成音色”菜单

 
   工具栏中有2个工具,分别为“保存音频”和“播放”。其中“保存音频”工具将读取的.mid文件保存为一般音频文件.wav格式,“播放”工具用以播放解码后的音频。

2.2 所需文件

   运行本软件需要至少18个文件:15个源代码文件,2个GUI图形界面文件和至少1个midi文件。如图11所示:

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图11 软件运行所需文件

 
   其中,.m文件是源代码文件,.fig文件是图形界面文件,.mid是midi文件。

2.3 软件运行效果

   软件可调参数丰富,包括音长、音高、音色和多样化的显示参数。下面将作简要演示。

2.3.1 单音合成效果

   图12到图15展示的是在不同音长、音色、音高和不同显示模式下的单音的时域频域图像。
   图12:音长1.2s,四段包络正弦波,小字一组c1键(261.626Hz),波形蓝色,线宽0.5;无标记点;
   图13:音长0.2s,四段包络正弦波,大字一组C1键(32.703Hz),波形蓝色,线宽1.5;有标记点,标记点型为向上的三角,尺寸为4,色彩为蓝色;

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图12
《基于MATLAB软件GUI界面的可编程电音合成器软件》
图13

 
   图14:音长0.5s,KarplusStrong合成,大字一组E1键(41.203Hz),波形红色,线宽0.5,有标记点,标记点型为圆圈,尺寸为2,色彩为蓝色;
   图15:音长0.2s,无包络方波,大字组F键(87.307Hz),波形红色,线宽0.5,有标记点,标记点型为空心五角星,尺寸为8,色彩为蓝色;

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图14
《基于MATLAB软件GUI界面的可编程电音合成器软件》
图15

2.3.2 读取midi文件

   图16展示的是读取midi文件之后的时域图和自动打孔纸卷图。
   图16(1):时域图。读入“jesu.mid”,音色为KarplusStrong。
   图16(2):自动打孔纸卷图。读入“jesu.mid”,音色为KarplusStrong。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图16 (1)
《基于MATLAB软件GUI界面的可编程电音合成器软件》
图16 (2)

2.3.3 设计个性化曲目

   用户可以通过写一特定矩阵实现个性化的编曲,用户需要输入的信息包括音符数目、每一个音符的编号、响度、音轨、声道、开始时间和结束时间。
   如,编写曲目为:

N = 21; % 音符数目
M = zeros(N,6);
M(:,1) = 1; % 音轨1
M(:,2) = 1; % 声道1
M(:,3) = (70:90)’; % 音符(只能取0-127)中央C:第60号
M(:,4) = round(linspace(60,120,N))’; % 设置每个音符的响度:80->120
M(:,5) = (0.5:0.5:10.5)’; % 每个音符的开始时间
M(:,6) = M(:,5) + 1.5; % 每个音符的结束时间

   则表示:产生21个音符,所有音符在1号音轨,在1号声道输出,取编号为70-90的21个音符,响度设置为在60-120区间线性分布,每个音符的开始时间相隔0.5s,每个音符延续1.5秒。
   则在不同的音色选择下,会出现多种音频曲线,其产生的人耳听觉效应也不同。图17(1)-(5)分别表示在5中不同音色下的音频曲线。
   图17(1):无包络锯齿波;图17(2):无包络方波;图17(3):无包络正弦波;图17(4):四段包络正弦波;图17(5):KarplusStrong合成。

《基于MATLAB软件GUI界面的可编程电音合成器软件》          图17 (1) 《基于MATLAB软件GUI界面的可编程电音合成器软件》         图17 (2)
《基于MATLAB软件GUI界面的可编程电音合成器软件》          图17 (3) 《基于MATLAB软件GUI界面的可编程电音合成器软件》         图17 (4)
《基于MATLAB软件GUI界面的可编程电音合成器软件》 图17 (5)

图17 同一曲调5种不同音色下的音频曲线

 
   图18所示为该曲目的自动打孔纸卷图。

《基于MATLAB软件GUI界面的可编程电音合成器软件》
图18 该曲目对应的自动打孔纸卷

 
   用户也可按此方法设计自己的个性化曲目。

3 后记

   这是我大三下学期做的项目,前前后后花了大约一周时间。说来有趣,某一天我在整理MATLAB目录时发现了大一暑期做的一个名为“基于MATLAB软件GUI界面的自制简单电子琴”的课程设计,(相关内容已经整理到了我的SCDN博客上,点击链接即可查看),一看才发现当年做的项目真是相当简陋,于是我对它进行了一些改进。总地来说在原来的基础上变得更加美观、功能也更加丰富了。
   本项目中midi编解码的部分主要参考了Ken Schutte的工作,相关代码见其个人网页
   出于对知识产权和他人智力劳动成果的尊重,我在此仅分享此项目中我个人贡献的代码。读者可根据上文中图11的描述从两处找全所有的文件并成功运行程序。当然,如果有读者对此尤其感兴趣或者有需要帮助的地方,我也十分欢迎大家与我联系。

   转载时务必注明来源及作者。尊重知识产权从我做起。

   代码已上传至网络,欢迎下载,密码是23cy

    原文作者:Chen_Tianyang
    原文地址: https://blog.csdn.net/ctyqy2015301200079/article/details/83152893
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞