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

  • 1 总体设计
    • 1.1 设计思路
    • 1.2 软件运行
  • 2 软件功能说明
    • 2.1 软件界面
      • 2.1.1 菜单栏
      • 2.1.2 工具栏
      • 2.1.3 MySynthesizer界面
      • 2.1.4 mymidi界面
    • 2.2 所需文件
    • 2.3 软件运行效果
      • 2.3.1 单音合成效果
      • 2.3.2 读取midi文件
      • 2.3.3 设计个性化曲目
  • 3 后记

概要: 本文基于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所示的显示界面:

图 1 软件显示界面(1) 图2 软件显示界面(2)

2.1.1 菜单栏

   界面Synthesizer有6个下拉菜单

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

图3 “开始”菜单

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

      图4 (1)         图4 (2)         图4 (3)
      图4 (4)         图4 (5)         图4 (6)
                      图4 (7)                    图4 (8)

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

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

图5 “音色”菜单

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

图6 “音高”菜单

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

图7 “音长”菜单

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

图8 “帮助”菜单

2.1.2 工具栏

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

图9 工具栏

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

2.1.3 MySynthesizer界面

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

2.1.4 mymidi界面

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

图10 mymidi界面的“合成音色”菜单

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

2.2 所需文件

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

图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,色彩为蓝色;

图12 图13

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

图14 图15

2.3.2 读取midi文件

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

图16 (1) 图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合成。

         图17 (1)         图17 (2)
         图17 (3)         图17 (4)
图17 (5)

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

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

图18 该曲目对应的自动打孔纸卷

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

3 后记

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

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

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

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

  1. 基于Matlab的GUI界面封装exe文件

    序言:本方法结合了网上各位大神的教程,由于是菜鸟,遇到了问题远多于教程中的描述,现将整个流程汇总如下,供大家参考.此为笔者首篇文章,语言逻辑不通之处,请多多包涵. 参考1 Matlab 生成exe执行 ...

  2. 基于MATLAB的GUI界面数字图像处理系统

    目录 实验一 MATLAB数字图像处理初步 实验二 图像的代数运算 实验三 图像增强-空间滤波 实验四 图像分割 实验一 MATLAB数字图像处理初步 一.实验目的与要求 1.熟悉及掌握在MATLAB ...

  3. 基于MATLAB软件GUI界面的自制简单电子琴

    基于MATLAB软件GUI界面的自制简单电子琴 概要: 本文基于MATLAB及其GUI界面设计了一个简单电子琴.利用MATLAB的GUI控件及相关算法,实现了一些简单的功能.这是作者大一暑期课程< ...

  4. 层析成像算法 matlab,基于Matlab平台GUI的地震走时层析成像快速实现.pdf

    基于Matlab平台GUI的地震走时层析成像快速实现 第23卷 第 3 期 CT理论与应用研究 Vol.23, No.3 2014年5月(403-412) CT Theory and Applicat ...

  5. 存储论matlab,基于MATLAB的GUI设计应用软件

    Microcomputer Applications Vol. 27, No.8, 2011 技术交流 微型电脑应用 2011年第27卷第8期 ·53· 文章编号:1007-757X(2011)08- ...

  6. Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别

    Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 目录 车牌图像数据集 视频动态演示 核心代码 相关文章 Matlab:基于Matlab通过GUI实现自动驾驶的车牌智能识别 Matl ...

  7. 圆形上下挤压 matlab,基于Matlab的GUI设计双螺杆挤压机系统仿真软件

    基于Matlab的GUI设计双螺杆 挤压机系统仿真软件 王玉德,张文孝,韩翠玲 (1.大连水产学院,辽宁大连116023;2.山东省机电学校,山东兖州272105) 1 1 2 DesignofSim ...

  8. matlab gui 播放音频,基于MATLAB的GUI(Graphical User Interface)音频实时显示设计

    [博主原创] 摘要:本文章的设计主要讲基于matlab的gui音频实时显示设计,此次设计的gui相当于一个简洁的音乐播放器,界面只有"录音"和"播放"两个控件, ...

  9. matlab的gui界面怎么用,MATLAB的GUI界面基础操作

    今天我们来学习如何用MATLAB的GUI界面进行一些简单的操作,因为GUI界面可以很简单的制作界面,按钮系列,直接拖拽即可,而不需要用代码对界面进行编写,只需要对里面的具体功能进行编码,我们今天就运用 ...

最新文章

  1. oracle if=,oracle中if/else的三种实现方式详解
  2. 特征值与特征向量的意义
  3. 2017-2018-1 20155320 《信息安全系统设计基础》第十四周学习总结
  4. Asp.net MVC3.0 入门指南 7.1 展示查找页面
  5. @PathVariable注解使用
  6. 关于easyui的一些小知识点(1)
  7. 用SecureCRT连接采用NAT方式上网的虚拟机
  8. 字典树 之 hdu 4099
  9. linux下运行二进制文件
  10. 初入职场的程序员,不想被时代淘汰?那你必须迈过这个坎!
  11. 利用saopanel系统的UDP转发模式破解校园网
  12. SQL中的Northwind数据库
  13. Web安全-浅析网页暗链与挂马攻击
  14. CodeForces - 272C Dima and Staircase (线段树区间更新)
  15. k8s存储之Volumes卷类型
  16. 《统计学习方法》——隐马尔可夫模型
  17. 欧几里德 与 扩展欧几里得 学习笔记
  18. XSD文件与xml 文件
  19. B站台湾大学郭彦甫|MATLAB 学习笔记|08 图像处理I Image Processing
  20. 弧度和度 180/PI PI/180换算关系

热门文章

  1. 如何去除Excel中的重复的行数据
  2. 【Dplayer视频播放器】一款好用的视频播放器
  3. C#实现SM2国密签名签验签和加密解密
  4. 百度站长平台使用教程:robots检测
  5. 支付宝登录界面size_class
  6. 部署filebeat收集nginx日志
  7. 当爬虫工程师需要学习什么
  8. 80端口被占用了怎么办?
  9. 图形流水线中光栅化原理与实现
  10. stackedplot 函数_【matlab 基础篇 03】一文带你全面了解 plot 绘图函数的使用(超详细+图文并茂)...