%---------Designer:BMn--------%
%-----------Time:9.15.2020--------------%
%创建可视化界面
function varargout = MyPiano(varargin)
gui_Singleton = 1; %打开一个窗口
%该结构描述了该GUI的状况,包括gui的名字、运行实例、初始化函数、输出函数、布局以及回调函数。
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @MyPiano_OpeningFcn, ...
'gui_OutputFcn', @MyPiano_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
%程序通过gui_State.gui_Callback = str2func(varargin{1});
%分别取得figure和包含的控件的CreateFcn回调函数,创建各个控件。
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
%figure和各控件创建完毕,程序会调用OpeningFcn进行初始化,
%然后运行OutputFcn,把figure的句柄作为输出参数输出。这时,GUI界面便在屏幕上显示出来。
function MyPiano_OpeningFcn(hObject, ~, handles, varargin)
handles.output = hObject;
guidata(hObject, handles);
%欢迎页面和语音
function varargout = MyPiano_OutputFcn(~, ~, handles)
smile = imread('smile.png');
s = 'Welcome To MyPiano!';
hs = msgbox(s,'Welcome!','custom',smile);
ht = findobj(hs, 'Type', 'text'); %改变字体
set(ht, 'FontSize', 18, 'Unit', 'normal','FontName','Times New Roman');
set(hs,'Position',[480 380 280 80]);
[y,fs] = audioread('WelcomeToMyPiano.wav'); %打开表示欢迎的语音
sound(y,fs);
varargout{1} = handles.output;
%第一个坐标系
function drawy(y,t)
plot(t(1:2000),y(1:2000));
xlabel('time (s)');ylabel('amplitude');
zoom on;
%第二个坐标系
function drawfft(y,fs)
N=1024;
fy=fft(y,N); %快速傅里叶变换
fy=abs(fy); %取绝对值
f=(0:N/2-1)*fs/N;
plot(f,fy(1:N/2));
xlabel('Frequency (Hz)');ylabel('amplitude');
zoom on;
%利用回调函数处理点击按键发声事件
%共4*7=28个按键代表4种不同的1(do)~7(xi)音调
% --------------------------------------------------------------------
function pushbutton11_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f11=130.8;
y11=gen_wave(1,1);
sound(y11,fs);
axes(handles.axes1);
drawy(y11,t);
axes(handles.axes2);
drawfft(y11,fs);
set(findobj('Tag','edit1'),'String',f11);
function pushbutton12_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f12=146.8;
y12=gen_wave(2,1);
sound(y12,fs);
axes(handles.axes1);
drawy(y12,t);
axes(handles.axes2);
drawfft(y12,fs);
set(findobj('Tag','edit1'),'String',f12);
function pushbutton13_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f13=164.8;
y13=gen_wave(3,1);
sound(y13,fs);
axes(handles.axes1);
drawy(y13,t);
axes(handles.axes2);
drawfft(y13,fs);
set(findobj('Tag','edit1'),'String',f13);
function pushbutton14_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f14=174.6;
y14=gen_wave(4,1);
sound(y14,fs);
axes(handles.axes1);
drawy(y14,t);
axes(handles.axes2);
drawfft(y14,fs);
set(findobj('Tag','edit1'),'String',f14);
function pushbutton15_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f15=196.0;
y15=gen_wave(5,1);
sound(y15,fs);
axes(handles.axes1);
drawy(y15,t);
axes(handles.axes2);
drawfft(y15,fs);
set(findobj('Tag','edit1'),'String',f15);
function pushbutton16_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f16=220.0;
y16=gen_wave(6,1);
sound(y16,fs);
axes(handles.axes1);
drawy(y16,t);
axes(handles.axes2);
drawfft(y16,fs);
set(findobj('Tag','edit1'),'String',f16);
function pushbutton17_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f17=246.9;
y17=gen_wave(7,1);
sound(y17,fs);
axes(handles.axes1);
drawy(y17,t);
axes(handles.axes2);
drawfft(y17,fs);
set(findobj('Tag','edit1'),'String',f17);
function pushbutton21_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f21=261.6;
y21=gen_wave(8,1);
sound(y21,fs);
axes(handles.axes1);
drawy(y21,t);
axes(handles.axes2);
drawfft(y21,fs);
set(findobj('Tag','edit1'),'String',f21);
function pushbutton22_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f22=293.7;
y22=gen_wave(9,1);
sound(y22,fs);
axes(handles.axes1);
drawy(y22,t);
axes(handles.axes2);
drawfft(y22,fs);
set(findobj('Tag','edit1'),'String',f22);
function pushbutton23_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f23=329.6;
y23=gen_wave(10,1);
sound(y23,fs);
axes(handles.axes1);
drawy(y23,t);
axes(handles.axes2);
drawfft(y23,fs);
set(findobj('Tag','edit1'),'String',f23);
function pushbutton24_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f24=349.2;
y24=gen_wave(11,1);
sound(y24,fs);
axes(handles.axes1);
drawy(y24,t);
axes(handles.axes2);
drawfft(y24,fs);
set(findobj('Tag','edit1'),'String',f24);
function pushbutton25_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f25=392.0;
y25=gen_wave(12,1);
sound(y25,fs);
axes(handles.axes1);
drawy(y25,t);
axes(handles.axes2);
drawfft(y25,fs);
set(findobj('Tag','edit1'),'String',f25);
function pushbutton26_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f26=440.0;
y26=gen_wave(13,1);
sound(y26,fs);
axes(handles.axes1);
drawy(y26,t);
axes(handles.axes2);
drawfft(y26,fs);
set(findobj('Tag','edit1'),'String',f26);
function pushbutton27_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f27=493.9;
y27=gen_wave(14,1);
sound(y27,fs);
axes(handles.axes1);
drawy(y27,t);
axes(handles.axes2);
drawfft(y27,fs);
set(findobj('Tag','edit1'),'String',f27);
function pushbutton31_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f31=523.3;
y31=gen_wave(15,1);
sound(y31,fs);
axes(handles.axes1);
drawy(y31,t);
axes(handles.axes2);
drawfft(y31,fs);
set(findobj('Tag','edit1'),'String',f31);
function pushbutton32_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f32=587.3;
y32=gen_wave(16,1);
sound(y32,fs);
axes(handles.axes1);
drawy(y32,t);
axes(handles.axes2);
drawfft(y32,fs);
set(findobj('Tag','edit1'),'String',f32);
function pushbutton33_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f33=659.3;
y33=gen_wave(17,1);
sound(y33,fs);
axes(handles.axes1);
drawy(y33,t);
axes(handles.axes2);
drawfft(y33,fs);
set(findobj('Tag','edit1'),'String',f33);
function pushbutton34_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f34=698.5;
y34=gen_wave(18,1);
sound(y34,fs);
axes(handles.axes1);
drawy(y34,t);
axes(handles.axes2);
drawfft(y34,fs);
set(findobj('Tag','edit1'),'String',f34);
function pushbutton35_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f35=784.0;
y35=gen_wave(19,1);
sound(y35,fs);
axes(handles.axes1);f35=784.0;
drawy(y35,t);
axes(handles.axes2);
drawfft(y35,fs);
set(findobj('Tag','edit1'),'String',f35);
function pushbutton36_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f36=880.0;
y36=gen_wave(20,1);
sound(y36,fs);
axes(handles.axes1);
drawy(y36,t);
axes(handles.axes2);
drawfft(y36,fs);
set(findobj('Tag','edit1'),'String',f36);
function pushbutton37_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f37=987.8;
y37=gen_wave(21,1);
sound(y37,fs);
axes(handles.axes1);
drawy(y37,t);
axes(handles.axes2);
drawfft(y37,fs);
set(findobj('Tag','edit1'),'String',f37);
function pushbutton41_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f41=1046.5;
y41=gen_wave(22,1);
sound(y41,fs);
axes(handles.axes1);
drawy(y41,t);
axes(handles.axes2);
drawfft(y41,fs);
set(findobj('Tag','edit1'),'String',f41);
function pushbutton42_Callback(~, ~, handles)
fs = 8192;t = linspace(0,2*pi,fs);f42=1174.7;
y42=gen_wave(23,1);
sound(y42,fs);
axes(handles.axes1);