基于MATLAB中的GUI设计的钢琴界面设计并能发声
我所使用的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设计的钢琴界面设计并能发声相关推荐
- 手把手教你一小时设计基于matlab的信号发生器GUI界面(1)
用matlab设计UI界面,我也是最近开始接触,拿过学长的作品简单学习和膜拜后,开始上手只做自己的GUI界面. 这次界面是设计一个信号发生器. 制作界面前简单思考一下自己的面板怎么设计,最后决定使用在 ...
- matlab创新开放性实验,基于MATLAB 的自动控制原理实验仿真系统的设计
基于MATLAB 的自动控制原理实验仿真系统的设计 基于MATLAB 的自动控制原理实验仿真系统的设计 田晴,张茁 (河北联合大学电气工程学院,河北唐山063000) 摘要:MATLAB的图形用户界面 ...
- 基于matlab测量物体直径,基于MATLAB的零件尺寸检测误差分析的软件设计
ISSN1672-4305 CN12-1352/N 实 验 室 科 学 LABORATORY SCIENCE 第 14 卷 第 4 期 2011 年 8 月 Vol. 14 No. 4 Aug. 20 ...
- 基于matlab的pwm波形仿真与分析,基于Matlab的单相电压型PWM整流电路仿真与设计
基于Matlab的单相电压型PWM整流电路仿真与设计 基于Matlab的单相电压型PWM整流电路仿真与设计 摘 要 现代工业中,很多场合需要进行电能变换,例如把直流电能变为交流电能,交流电能变为直流电 ...
- 基于Matlab实现微波带低通高通带通滤波器设计
基于Matlab实现微波带低通高通带通滤波器设计 在微波通信系统中,滤波器作为一个重要的模块被广泛使用.本文将介绍如何使用Matlab进行微波带通滤波器设计,并提供相应的源代码. 理论基础 微波滤波器 ...
- 【基于matlab数字图像处理GUI代码】_数字图像处理考核论文_大作业_项目
基于matlab数字图像处理GUI代码 代码: function varargout = Image_processing_GUI(varargin) % IMAGE_PROCESSING_GUI M ...
- 基于matlab双反馈风力发电机系统Simulink仿真设计
基于matlab双反馈风力发电机系统Simulink仿真设计,有说明介绍, 本文根据双馈风力发电机数学模型,以双 PWM 变换器作为主要研究对象,对 其进行分析.建模与控制,完成双馈风力发电机的仿真. ...
- matlab 高斯信道,基于MATLAB高斯信道下的16QAM误码率分析的设计 通信系统课程设计报告.doc...
基于MATLAB高斯信道下的16QAM误码率分析的设计 通信系统课程设计报告 目录 引言---------------------- 2 一.相关知识介绍---------------- 2 (1)Q ...
- matlab单相pwm整流电路,基于Matlab的单相电压型PWM整流电路仿真与设计.doc
基于Matlab的单相电压型PWM整流电路仿真与设计 摘 要 现代工业中,很多场合需要进行电能变换,例如把直流电能变为交流电能,交流电能变为直流电能.直流电能变为交流电能由逆变器实现,交流电能变为直流 ...
- 【智能控制实验】基于MATLAB的BP神经网络实现非线性函数拟合设计
基于MATLAB的BP神经网络实现非线性函数拟合设计 一.实验要求: 重点是掌握BP神经网络的学习算法原理,掌握matlab工具箱设计BP神经网络拟合非线性模型的方法(m文件):掌握在图形用户界面下设 ...
最新文章
- 超级干货,一文看懂大数据的前世今生
- windows根据端口号找进程
- 【MySQL】存储过程中,怎么把多个select结果,合并成一个结果集返回?
- 阻碍物联网腾飞几大难题盘点 看能想出什么对策
- oracle对查询结果求和_Oracle 闪回技术详解
- Docker系列之二:基于容器的自动构建
- 听障学生计算机课本,面向听障学生程序设计的计算机教学辅助系统
- Oracle无法使用EM解决方案
- 为什么redis适合操作小数据,memcache适合操作大数据
- CSS实现字体镂空效果、阴影效果、字体阴影效果
- java使用wordnet获取近义词
- vmware使用自带工具vmware-vdiskmanager精简占用磁盘空间
- VS2017突然不检查语法错误
- 自我鉴定200字大专生计算机专业,大专毕业生自我鉴定200字
- Error: Getter not found: 'suspending'. case AppLifecycleState.suspending
- 04_从啤酒与尿布,聊关联规则推荐
- 网页、网站和HTML
- SAP ABAP 热咖啡报表模板
- 文华期货数据格式公布
- 旧金山市交通系统遭勒索软件感染细节进一步公布