关于用MATLAB 实现简易钢琴 App的教程分享

matlab 是科学计算软件,同时也提供了图形、声音等多媒体展示特性和人机交互特性。利用这些特性,很容易完成复杂的任务,例如写一个钢琴 app,将电脑的键盘当成钢琴的琴键,发出悦耳的声音。
实现以上功能的核心代码和语法知识包括:
脚本和函数的概念
全局变量
switch流程
sound函数
figure的属性和回调函数
这些都可以在 matlab 基本语法的帮助文档(中文)中找到详细说明:
将代码打包成 app 需要用到 matlab compiler:
首先,要知道 matlab 中“发声”的方法,最简单的是 sound 函数。这里将声音的采样频率设为和一般 mp3 文件一样的 44100 hz,将一个音符的时间设定为 0.4 s,以音阶 do 的频率 261.63 hz 为例,发出一段声音。声音的包络线,其目的在于模拟一个音符渐响和渐轻的过程。
fs=44100; %mp3标准采样品频率
t=0:fs^-1:4e-1; %假定每个声音持续0.4s
a=sin(2*pi/8e-1*t); %声音振幅包络
a=a.*sin(2*pi*261.63*t); %do的时域波形
sound(a,fs)
也可以用 plot(t,a) 观察波形。
对于其他音阶,设定不同的频率,于是就可以获得一系列的音符,他们随时可以放进 sound 中进行发声。
a=a.*sin(2*pi*261.63*t);
s=a.*sin(2*pi*293.66*t);
d=a.*sin(2*pi*329.63*t);
其次,要知道 matlab 中怎么用键盘实时控制,这样才是一个真正的钢琴 app。较为简单的方法是利用 figure 的 keypressfcn 属性。建立一个图形,在选中图形的情况下,只要键盘被按下,就会执行一个函数(通常称为回调函数),在这个函数中通过 sound 发声。
fig=figure('keypressfcn','sound(a,fs)');
再次,要在回调函数中判断刚才按下的是哪个键,并决定让 sound 发出哪个声音。这是一个典型的 switch 流程。而 switch 的判断依据则是 figure 的 'currentchar' 属性,可以通过 get 函数来获得。
args=get(fig,'currentchar');
switch args
case'a'
sound(a,fs)
case's'
sound(s,fs)
此时,显然回调函数不会那么简单,需要单独封装并命名,例如叫mysound。而为了使刚才定义的fs等变量可以在mysound中使用,需要声明他们为全局变量,即:
function mysound
global fs z x c ……
最后,进行适当的美化,通过 rectangle 函数画出矩形琴键,通过 text 函数标注音阶和键盘的对应。同时,在回调函数中,根据不同的键盘输入,对矩形进行一定的显示变化,通过 pause 函数控制这种变化的持续时间,就很像一个钢琴 app 了。
附件使用方法:在 matlab 工作路径中,放置 mymusic 脚本和 mysound 函数两个文件,在 command window 中运行 mymusic,按键盘发声。
当然,也可以继续在 command window 中运行。
sound([a a g g h h g zeros(size(a)) f f d d s sa],fs)
来听一小段音乐,enjoy~
app 如何脱离 matlab 运行?这里需要用到 matlab compiler,仅需点击几次鼠标即可:
点击:apps -> application compiler
点击:add main file,选择 mymusic
点击:files required for your application to run,选择 mysound
这两步的目的是告诉 matlab 需要打包的脚本和这个脚本调用的函数。
点击:package,一路确定即可。
软件打包完成后,可以关闭 matlab。在弹出的 for_testing 目录下找到 mymusic 的 exe 文件,双击即可执行。
这样就完成了一个钢琴 app,可以分享给其他小伙伴。

中控智慧科技射频卡读卡器KR802B介绍
关于本田E电动汽车电驱动技术状态的解析
建立一个家庭光伏电站这些事项需提前预知
基于TX4101制作的DEMO演示板
湘潭电化深化正极材料布局 参股公司为CATL批量供货
关于用MATLAB 实现简易钢琴 App的教程分享
二维材料家族包含了哪些材料?
I2C总线简介
揭秘天线演进如何支持5G移动设备
荣耀Magic发布:人工智能+八曲面+自研闪充 仅售3699
瑞萨电子推全新RZ/G2L MPU,可实现降低整体系统成本
美国能源之星认证和DLC认证主要争对哪些照明产品?
使用行业标准化接口解决这些挑战
Intel新旗舰至强W9-3495 拥有56核112线程
迎难而上 亨鑫科技5G天线已开发20余款产品
新一代ROG游戏手机即将官宣 华硕与腾讯联合打造120Hz高刷新率游戏手机
用于Flash和JavaFX的硬件视频解码器
库克执掌苹果5周年记:走出乔布斯阴影
5G+智能,正将引领无线边缘变革
电动汽车寒冬不减 从根本上解决冬天电池衰减才是重点