0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

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

MATLAB 来源:djl 2019-09-11 15:22 次阅读

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) 观察波形。

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

对于其他音阶,设定不同的频率,于是就可以获得一系列的音符,他们随时可以放进 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

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

点击:Add main file,选择 mymusic

点击:Files required for your application to run,选择 mysound

这两步的目的是告诉 MATLAB 需要打包的脚本和这个脚本调用的函数。

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

点击:package,一路确定即可。

软件打包完成后,可以关闭 MATLAB。在弹出的 for_testing 目录下找到 mymusic 的 exe 文件,双击即可执行。

这样就完成了一个钢琴 App,可以分享给其他小伙伴。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 人机交互
    +关注

    关注

    12

    文章

    1221

    浏览量

    55846
  • 变量
    +关注

    关注

    0

    文章

    613

    浏览量

    28634
收藏 人收藏

    相关推荐

    如何使用MATLAB实现一维时间卷积网络

    本文对一维卷积操作进行介绍,包括一维扩展卷积和一维因果卷积,以及 MATLAB 对一维卷积的支持情况。在最后通过一个实例演示如何在 MATLAB 中将一维卷积和 LSTM 结合构建分类网络,实现基于传感器数据的故障诊断。
    的头像 发表于 03-07 09:15 302次阅读
    如何使用<b class='flag-5'>MATLAB</b><b class='flag-5'>实现</b>一维时间卷积网络

    如何运用MATLAB来控制DLP4500?

    希望通过MATLAB实现对DLP4500 的控制?因为现在MATLAB可以控制相机,希望也直接控制DLP。 是否有相关的例子来参考。谢谢
    发表于 03-03 06:19

    有没有什么方案能实现直接matlab或python调用D4100_usb.dll?

    D4100_usb.dll是否有64位版本的,如果没有,那有没有什么方案能实现直接matlab或python调用D4100_usb.dll。 万分感谢。 以下是eclipse java
    发表于 02-27 06:59

    OptiSystem应用:MATLAB组件实现振幅调制

    。我们MATLAB代码控制电脉冲对光信号的调制过程,通过在MATLAB组件中导入MATLAB代码来实现。整体光路图如图1,全局参数如图2:
    发表于 02-14 09:39

    MATLAB或者C语言开发FPGA有什么问题吗

    最近有个项目领导要求MATLAB开发FPGA,有大佬MATLAB或者C语言开发FPGA的吗,有没有什么问题,需要注意什么问题吗
    发表于 01-26 09:57

    分享两则MATLAB和Simulink助力教学案例

    和 Simulink 助力教学案例:南方科技大学无线通信创新教学实验室负责人吴光博士使用 AI 推动前沿通信教学创新,以及东南大学电气工程学院胡秦然教授通过 MATLAB 实时脚本和 App 设计工具实现教学模式创新。
    的头像 发表于 12-05 16:46 710次阅读
    分享两则<b class='flag-5'>MATLAB</b>和Simulink助力教学案例

    verilog设计之基于basys3实现简易分秒数字钟

    基于basys3实现简易分秒数字钟
    发表于 09-03 14:15 0次下载

    基于MATLAB的通信系统设计

    在通信系统设计领域,MATLAB作为一款强大的数学计算与仿真软件,广泛应用于信号处理、通信系统建模与仿真等方面。本文将详细介绍一个基于MATLAB的通信系统设计方案,包括系统架构、各模块功能实现及相应的
    的头像 发表于 07-18 15:52 1990次阅读

    利用Matlab函数实现深度学习算法

    Matlab实现深度学习算法是一个复杂但强大的过程,可以应用于各种领域,如图像识别、自然语言处理、时间序列预测等。这里,我将概述一个基本的流程,包括环境设置、数据准备、模型设计、训练过程、以及测试和评估,并提供一个基于Matlab
    的头像 发表于 07-14 14:21 2786次阅读

    matlab预测模型怎么

    MATLAB预测模型是一种基于统计和数学方法的预测工具,广泛应用于各种领域,如金融、气象、生物医学等。本文将介绍MATLAB预测模型的使用方法。 数据预处理 数据预处理是预测模型建立的第一步,主要目
    的头像 发表于 07-11 14:33 790次阅读

    matlab预测模型有哪些

    环境,使其成为预测模型开发和实现的理想平台。本文将详细介绍MATLAB中常用的预测模型及其应用。 线性回归模型 线性回归是一种简单的预测模型,用于分析两个或多个变量之间的线性关系。在MATLAB中,可以使用 regress 、
    的头像 发表于 07-11 14:27 987次阅读

    matlab的神经网络app怎么

    Matlab的神经网络App是一个强大的工具,可以帮助用户快速构建、训练和测试神经网络模型。 神经网络基本概念 神经网络是一种模拟人脑神经元网络的计算模型,由大量的神经元(或称为节点)通过权重连接
    的头像 发表于 07-09 09:49 600次阅读

    MATLAB如何使用训练好的网络

    实现和应用变得简单易行。 MATLAB神经网络概述 MATLAB提供了多种神经网络架构,如前馈神经网络、卷积神经网络(CNN)、循环神经网络(RNN)等。这些网络可以通过MATLAB
    的头像 发表于 07-03 10:06 1457次阅读

    先楫6880如何实现bootload + APP应用跳转

    ,通过boot来判断是哪种启动方式。 因此,内存管理是保证程序正确运行的前提。在实现bootload跳转的前提无非两个问题: (1).app程序跳转的地址。 (2).app程序的中断向量表。 2.
    发表于 04-26 16:03

    STM32进行bootloader开发时,能不能将boot和app程序的hex合成为一个hex进行烧录?

    大家好,请问STM32进行bootloader开发时,能不能将boot和app程序的hex合成为一个hex进行烧录?我之前分别烧录两个hex,是可以实现功能的,不知道合成一个hex烧录行不行。 我
    发表于 04-01 08:20