2015年12月26日 星期六

簡易 piano_GUI (使用GUIDE)







程式碼

function varargout = piano(varargin)
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});
end
if nargout
    [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
    gui_mainfcn(gui_State, varargin{:});
end

function piano_OpeningFcn(hObject, ~, handles, varargin)
global ff Fs t m;
Fs = 11025; t = 0:1/Fs:(1-1/Fs); m = exp(-(0:Fs-1)/3/Fs);
pitch = 60:72;
ff = fix(440 * 2.^((pitch - 69)/12));
handles.output = hObject;
guidata(hObject, handles);                                      % Update handles structure

function varargout = piano_OutputFcn(~, ~, handles)
varargout{1} = handles.output;

function pushbuttonE_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(5) * t).*m;  wavplay(y, Fs);

function pushbuttonC_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(1) * t).*m;  wavplay(y, Fs);

function pushbuttonD_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(3) * t).*m;  wavplay(y, Fs);

function pushbuttonF_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(6) * t).*m;  wavplay(y, Fs);

function pushbuttonG_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(8) * t).*m;  wavplay(y, Fs);

function pushbuttonA_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(10) * t).*m;  wavplay(y, Fs);

function pushbuttonB_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(12) * t).*m;  wavplay(y, Fs);

function pushbuttonC__Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(13) * t).*m;  wavplay(y, Fs);

function pushbutton1_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(2) * t).*m;  wavplay(y, Fs);

function pushbutton2_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(4) * t).*m;  wavplay(y, Fs);

function pushbutton3_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(7) * t).*m;  wavplay(y, Fs);

function pushbutton4_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(9) * t).*m;  wavplay(y, Fs);

function pushbutton5_Callback(~, ~, ~)
global ff t Fs m;  y = sin(2 * pi * ff(11) * t).*m;  wavplay(y, Fs);

function pushbutton6_Callback(~, ~, ~)

2015年12月22日 星期二

Cardioid Curve(心臟形曲線)



適當的加上axis off,可刪除座標軸

適當的加上
                 h1 = figure;
                set(h1, 'color','w');
可以將底色設成白色


2015年12月16日 星期三

plottools命令調整繪圖視窗的輸入介面

Command Window中鍵入plottools命令、或是在已開啟的繪圖視窗(Figure xx)的工具列中按下「Show Plot Tools and Dock Figure快捷鍵


即可顯示繪圖視工具列和調整的輸入介面。



在「Figure Palette」之「New Subplots」中按下快捷鍵「2D Axes」或「3D Axes即可產生2D3D的繪圖區;若按下快捷鍵


則會產生磁磚狀的子圖樣式(create tiled subplots),選擇後繪圖視窗將呈現多張圖的繪圖區



選擇2×2後的結果,如下圖所示:



選取第一個Axes(no title),在屬性編輯器中將由Property Editor - Figure改為Property EditorAxes如下圖所示:


再按下Add  Data...將出現Add Data to Axes對話視窗,如下圖所示


X Data Source中輸入「[0:0.1:2*pi]」,Y Data Source中輸入「cos([0:0.1:2*pi]).^2」,按下OK按鈕,即可繪製出函數曲線,此時在第一個Axes (no title)下方將出現藍色 cos([0:0.1:2*pi]).^2 vs 0:0.1:2*pi字樣,如下圖所示



此時若在Workspace視窗已有向量變數,將會在「Figure Palette」之「Variables」中顯示出已存在的變數,可將已存在的向量變數(或經MATLAB函數運算)當資料來源。旁邊的核取方塊

可以選擇該曲線是否可視。


點選第一個Axes (no title)可以看到Title(標題)-有時要適度放大繪圖視窗


Title裡鍵入「cos^{2}(t),結果如下圖所示



X Axis頁籤中的X Label入「\it{t}\rm(sec)」、X Limits0 to 2*pi,結果如下圖所示


Y Axis頁籤中的Y Label入「Amplitude」、Y Limits0 to 1,結果如下圖所示


點選 cos([0:0.1:2*pi]).^2 vs 0:0.1:2*pi,除了可以重新修改曲線的資料來源內容,也可修改Plot Type點選,如下圖所示


並可依不同樣式調整繪製的參數。



若要顯示其它的参數,可按下「More Properties...」,


調整好圖形資料後,可在工具列中按下「Hide Plot Tools快捷鍵


即可結束繪圖調整的輸入介面。