我所使用的MATLAB版本——MATLAB R2017a
MATLAB的GUI的操作其他人写的很清楚了,在此不再赘述。
MATLAB的GUI的基本操作可见:GUI基本操作

这次所设计的钢琴有简单的七个琴键,DO RE MI FA SO LA XI
首先在命令行中输入

guide


即可调出gui设计页面,选择第一个选项的空白GUI,然后点确定即可

在工具栏的右侧选择按钮,在界面上画出一长方形代表按键,并用ctrl+c,ctrl+v创造出七个琴键,并对齐排列

双击按键可打开具体的参数设置,其中有前景色、背景色、字体、标志、类型等,可以更加的个性化。

其中的STRING代表在GUI界面的名字,tag是生成的代码中的标志(在保存后还会生成一代码文件)

修改后即可看到第一个琴键的名字为DO,同理我们可以把其余其他按键命名,最后我们可以得到如下图所示:

在保存之后会自动生成一代码,其中大部分我们不需要关心,我们要关注的就是其中的Do_Callback()等回调函数(Do是我们命名的tag使然),也就是我们按一次按键会执行一次回调函数。

function Do_Callback(hObject, eventdata, handles)
% hObject    handle to Do (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

为了发出钢琴声我们还需要编写一发声函数,具体代码如下:

function y = gen_wave( tone, rythm )%   音调 拍Fs = 8192;freqs = [523, 587, 659, 698, 783, 880, 988];x = linspace(0, 2 * pi * rythm, floor(Fs * rythm));y = sin(freqs(tone) * x) .*(1- x/(rythm * 2 *pi));end

函数具体内容参见我的另一博客:MATLAB如何创造音乐
所以在DO按键的回调函数中应该这样写:

function Do_Callback(hObject, eventdata, handles)
% hObject    handle to Do (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(1,1);
sound(y,8192);

同理在此给出所有代码:

function varargout = piano(varargin)
% PIANO MATLAB code for piano.fig
%      PIANO, by itself, creates a new PIANO or raises the existing
%      singleton*.
%
%      H = PIANO returns the handle to a new PIANO or the handle to
%      the existing singleton*.
%
%      PIANO('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in PIANO.M with the given input arguments.
%
%      PIANO('Property','Value',...) creates a new PIANO or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before piano_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to piano_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES% Edit the above text to modify the response to help piano% Last Modified by GUIDE v2.5 06-Feb-2020 16:54:20% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...'gui_Singleton',  gui_Singleton, ...'gui_OpeningFcn', @piano_OpeningFcn, ...'gui_OutputFcn',  @piano_OutputFcn, ...'gui_LayoutFcn',  [] , ...'gui_Callback',   []);
if nargin && ischar(varargin{1})gui_State.gui_Callback = str2func(varargin{1});
endif nargout[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
elsegui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT% --- Executes just before piano is made visible.
function piano_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to piano (see VARARGIN)% Choose default command line output for piano
handles.output = hObject;% Update handles structure
guidata(hObject, handles);% UIWAIT makes piano wait for user response (see UIRESUME)
% uiwait(handles.figure1);% --- Outputs from this function are returned to the command line.
function varargout = piano_OutputFcn(hObject, eventdata, handles)
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)% Get default command line output from handles structure
varargout{1} = handles.output;% --- Executes on button press in Do.
function Do_Callback(hObject, eventdata, handles)
% hObject    handle to Do (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(1,1);
sound(y,8192);% --- Executes on button press in Re.
function Re_Callback(hObject, eventdata, handles)
% hObject    handle to Re (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(2,1);
sound(y,8192);% --- Executes on button press in Mi.
function Mi_Callback(hObject, eventdata, handles)
% hObject    handle to Mi (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(3,1);
sound(y,8192);% --- Executes on button press in Fa.
function Fa_Callback(hObject, eventdata, handles)
% hObject    handle to Fa (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(4,1);
sound(y,8192);% --- Executes on button press in So.
function So_Callback(hObject, eventdata, handles)
% hObject    handle to So (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(5,1);
sound(y,8192);% --- Executes on button press in La.
function La_Callback(hObject, eventdata, handles)
% hObject    handle to La (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(6,1);
sound(y,8192);% --- Executes on button press in Xi.
function Xi_Callback(hObject, eventdata, handles)
% hObject    handle to Xi (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
y = gen_wave(7,1);
sound(y,8192);

再结合我们的 gen_wave()函数即可发出音乐声(有时候刚开始可能会有一些延迟。。。)
以上就是用MATLAB的GUI如何设计钢琴界面并能发声的教程了,如果感觉有意思,点个赞,O(∩_∩)O哈哈~

参考博客:GUI基本知识
gen_wave函数设计

基于MATLAB中的GUI设计的钢琴界面设计并能发声相关推荐

  1. 手把手教你一小时设计基于matlab的信号发生器GUI界面(1)

    用matlab设计UI界面,我也是最近开始接触,拿过学长的作品简单学习和膜拜后,开始上手只做自己的GUI界面. 这次界面是设计一个信号发生器. 制作界面前简单思考一下自己的面板怎么设计,最后决定使用在 ...

  2. matlab创新开放性实验,基于MATLAB 的自动控制原理实验仿真系统的设计

    基于MATLAB 的自动控制原理实验仿真系统的设计 基于MATLAB 的自动控制原理实验仿真系统的设计 田晴,张茁 (河北联合大学电气工程学院,河北唐山063000) 摘要:MATLAB的图形用户界面 ...

  3. 基于matlab测量物体直径,基于MATLAB的零件尺寸检测误差分析的软件设计

    ISSN1672-4305 CN12-1352/N 实 验 室 科 学 LABORATORY SCIENCE 第 14 卷 第 4 期 2011 年 8 月 Vol. 14 No. 4 Aug. 20 ...

  4. 基于matlab的pwm波形仿真与分析,基于Matlab的单相电压型PWM整流电路仿真与设计

    基于Matlab的单相电压型PWM整流电路仿真与设计 基于Matlab的单相电压型PWM整流电路仿真与设计 摘 要 现代工业中,很多场合需要进行电能变换,例如把直流电能变为交流电能,交流电能变为直流电 ...

  5. 基于Matlab实现微波带低通高通带通滤波器设计

    基于Matlab实现微波带低通高通带通滤波器设计 在微波通信系统中,滤波器作为一个重要的模块被广泛使用.本文将介绍如何使用Matlab进行微波带通滤波器设计,并提供相应的源代码. 理论基础 微波滤波器 ...

  6. 【基于matlab数字图像处理GUI代码】_数字图像处理考核论文_大作业_项目

    基于matlab数字图像处理GUI代码 代码: function varargout = Image_processing_GUI(varargin) % IMAGE_PROCESSING_GUI M ...

  7. 基于matlab双反馈风力发电机系统Simulink仿真设计

    基于matlab双反馈风力发电机系统Simulink仿真设计,有说明介绍, 本文根据双馈风力发电机数学模型,以双 PWM 变换器作为主要研究对象,对 其进行分析.建模与控制,完成双馈风力发电机的仿真. ...

  8. matlab 高斯信道,基于MATLAB高斯信道下的16QAM误码率分析的设计 通信系统课程设计报告.doc...

    基于MATLAB高斯信道下的16QAM误码率分析的设计 通信系统课程设计报告 目录 引言---------------------- 2 一.相关知识介绍---------------- 2 (1)Q ...

  9. matlab单相pwm整流电路,基于Matlab的单相电压型PWM整流电路仿真与设计.doc

    基于Matlab的单相电压型PWM整流电路仿真与设计 摘 要 现代工业中,很多场合需要进行电能变换,例如把直流电能变为交流电能,交流电能变为直流电能.直流电能变为交流电能由逆变器实现,交流电能变为直流 ...

  10. 【智能控制实验】基于MATLAB的BP神经网络实现非线性函数拟合设计

    基于MATLAB的BP神经网络实现非线性函数拟合设计 一.实验要求: 重点是掌握BP神经网络的学习算法原理,掌握matlab工具箱设计BP神经网络拟合非线性模型的方法(m文件):掌握在图形用户界面下设 ...

最新文章

  1. 超级干货,一文看懂大数据的前世今生
  2. windows根据端口号找进程
  3. 【MySQL】存储过程中,怎么把多个select结果,合并成一个结果集返回?
  4. 阻碍物联网腾飞几大难题盘点 看能想出什么对策
  5. oracle对查询结果求和_Oracle 闪回技术详解
  6. Docker系列之二:基于容器的自动构建
  7. 听障学生计算机课本,面向听障学生程序设计的计算机教学辅助系统
  8. Oracle无法使用EM解决方案
  9. 为什么redis适合操作小数据,memcache适合操作大数据
  10. CSS实现字体镂空效果、阴影效果、字体阴影效果
  11. java使用wordnet获取近义词
  12. vmware使用自带工具vmware-vdiskmanager精简占用磁盘空间
  13. VS2017突然不检查语法错误
  14. 自我鉴定200字大专生计算机专业,大专毕业生自我鉴定200字
  15. Error: Getter not found: 'suspending'. case AppLifecycleState.suspending
  16. 04_从啤酒与尿布,聊关联规则推荐
  17. 网页、网站和HTML
  18. SAP ABAP 热咖啡报表模板
  19. 文华期货数据格式公布
  20. 旧金山市交通系统遭勒索软件感染细节进一步公布

热门文章

  1. 国外广告联盟前期需要准备的事情
  2. Android 设备兼容-[Android_YangKe]
  3. 一款值得使用的会议室管理软件【会议预订小程序】
  4. 微信进入公众号提示服务器错误,微信登录公众号提示没有权限访问解决教程
  5. 七年之后再次地说:大家好。。。
  6. BLANK_TRIMMING 参数介绍
  7. 第21批符合道路运输车辆卫星定位系统标准 及规范的车载终端
  8. C++ 后退前进资源浏览器实现方式,附代码
  9. 【Udacity】数据的差异性:值域、IQR、方差和标准差
  10. metrics 指标分析——你不在意的p99和p999