资讯详情

科学网—[原][Matlab][04] Midi音乐键盘 - 王楠的博文

我以前在网上读过一个matlab播canon音乐的源代码很有趣,但声音还不够好。

所以想做自己的音乐播放器,有键盘,有相应的钢琴声,读音乐谱就可以播放。

(1)按钮的音高和频率

1、1、1#,2,2#,3,4,4#,5,5#,6,6#,7,1(高)。

假设1的音波振动频率是f,而1(高)频率为2f,那么这十二个半音之间的频率间隔是2对12开方,即2^(1/12)。

所以确定了每个声音的相对频率。

(2)按键的绝对中心频率

钢琴C调1的中心频率是261.626Hz,对应88键钢琴中的第24个白键。因此,根据中心频率和相对频率,可以知道所有键的振动频率。

(3)采样频率

本标准441000多种音波采样频率Hz,即每秒从声音中收集44100个点。

(4)音速和采样时间

一般节拍每分钟对应120个四分之一的音符,即每个1/4的音符时间为0.5秒,1/2音符为1秒,1/8音符为0.25秒,1/16音符为0.125秒。

(5)乐器音色

不同的乐器演奏不同的音色,主要是因为不仅有中心频率的振动,还有谐波甚至频波。在线下载标准C分析键钢琴音。

频率:波形声音FFT转换到频域,发现除中心频率外,还有2-6阶谐波,各阶谐波也有相应的强度。

时域:通过拟合曲线指数衰减,可通过拟合曲线获得包络参数。

最后,基频和谐波的采样曲线可以线性叠加,并乘以时域的包络曲线获得单个钢琴按钮的声音。

(6)变音和升降调

有时音符需要提升调整,感觉非常复杂,无法理解,目前我主要使用提升半音或提升全音来实现调整的转换。

通过(1)-(6),钢琴的声音基本完成。

(7)键盘布局

标准钢琴有88键,其中白键52个,黑键26个。白键长144mm*24mm,黑键长86mm*9mm,以上参数为matlab中使用rectangle分别采用函数edgecolor和facecolor边框颜色和填充颜色设置参数没有问题。

(8)动态显示按钮

按键时使用set函数改变对应按钮handleID的facecolor变色可以实现。图形图层的变化可以使用,因为图形图层会发生变化uistack函数将白键设置为底层,黑键设置为顶层。

通过(7)-(8),钢琴的按键动画基本完成。

(9)按键声音与按键动画的配合

在程序中首先初始化所有声音,钢琴键盘和为每个按键分配一个handleID,将每个ID与该ID声音与图像相关。当需要响应音符时,首先将音符翻译成相应的音符handleID,然后设置该ID键变色,然后根据音符的长度播放声音pause函数停顿对应的时间,然后ID按键颜色恢复。

(10)乐谱读取

播放音乐最方便的方法是将乐谱写在文本文件中,程序读取文本文件,然后翻译成音符,再翻译成音符handleID,然后播放。我用六位字符表示一个音符,比如1# 104表示音高为1升半音,8度音符为1/4音符;例如,3-216表示音高为3,8度音符为1/16音符为1/16音符;1/4-108表示音高为1的按钮和音高为4,同时按下持续时间对应的1/8音符。

在程序中使用fgets读取文件,将所有行连接成单行字符串,然后使用regexp的split将字符串字符串分开,然后使用split该方法使用/符号将每个元胞分开获得单个音符,然后判断音符的音高、半音、八度和长度。然后根据音调得到按钮对应handleID,是黑键还是音符长度?

乐谱读取和播放的功能通过(9)-(10)实现。

(11)音乐保存

想把生成的音乐保存下来,首先要把所有的音符根据其时长间隔加到同一个一维数组上,然后使用audiowrite函数保存为文件。

(12)视频保存

要保存视频,首先要使用所有的按键响应动画getframe获取,然后使用VideoWriter,open,writeVideo,close函数实现。每帧写入的数量应根据帧速和音符长度设置在中间。

(13)合成多媒体

合成视频和音乐是完美的,但我还没有实现。toolbox可以做到,但是由于采样率的不同,存在一些问题。matlab输入命令行窗口ex_combine_video_and_andio_streams打开示例查看。最后将是。matlab视频和音乐的生成moviemaker合成,可获得初级视频效果。

附件:CanonC.mp4(CanonC调),CanonD.mp4(CanonD调)

请联系原作者获得转载本文的授权,请注明本文来自王楠科学网的博客。

链接地址:http://blog.sciencenet.cn/blog-2857675-936944.html

上一篇:[原][Python] 下载器 破防盗链

下一篇文章:[随记][算法]进行三维图像处理的入门算法

标签: 连接器振动盘

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台