8-4 GUIDE Jd狺T

在這個範例中,使用者可以使用下拉式選單來選取不同的聲音檔案,來顯示波形,並可播放聲音。

首先,我們可以擺置一個圖軸和一些 UI 控制物件,如下:

接著,我們可以使用滑鼠右鍵來點選每一個 UI 控制物件,並選取「Inspect Properties」,以改變其性質,每個物件所改變的性質如下:

完成這些工作後,下一步我們要定義每個 UI 控制物件的反應命令,MATLAB 會在這些 UI 控制物件被點選時,同時呼叫每個物件所對應的反應命令。首先,我們以滑鼠右鍵點選 Close 按鈕,並選取「View Callbacks/Callback」,即可開啟 MATLAB 程式編輯器。(如果你尚未存檔,MATLAB 會要求你先存檔,才能繼續。你可以將檔案儲存成 myGUI03.m。)此程式編輯器會顯示反應命令必須加入的位置,依本例而言,Close 按鈕的 Tag 是 closeButton,所以其反應命令也必須加在函數 closeButton_Callback 之內,所加進去的命令是 close(gcbf),如下:

在這一列程式碼中,gcbf 代表產生此反應命令的視窗,因此 close(gcbf) 即是代表關閉此 GUI 介面所在的視窗。這一類的指令相當好用,可整理如下:

使用上述方法,我們可以一一加入各 UI 物件所具有的反應命令。對於下拉式選單,我們在 soundFile_Callback() 函式內所加入的程式碼如下:

value=get(hObject, 'value'); % 取得此 UI 物件的選項 switch value % 依選項來載入聲音檔 case 1 load chirp.mat case 2 load handel.mat case 3 load laughter.mat end plot((1:length(y))/Fs, y); % 畫出聲音的波形 handles.y=y; % 紀錄聲音訊號 handles.Fs=Fs; % 紀錄取樣頻率 guidata(hObject, handles); % 儲存將用於其他函式之 handles

針對上述反應命令,說明如下:

對於「Play Sound」按鈕,我們在 playButton_Callback() 函式內所加入的程式碼如下:

if isfield(handles, 'y') y=handles.y; Fs=handles.Fs; sound(y, Fs); end

換句話說,我們先使用 isfield(handles, 'y') 來確認 y 是不是 handles 的一個性質,若是,代表相關聲音資料已經儲存在 handles 變數內,因此我們就抓出 y 和 Fs,並用 sound(y, Fs) 來播放聲音訊號。

加入這些反應命令後,即可儲存檔案並關閉 MATLAB 編輯器,然後按下 GUIDE 面版的工具列的三角形按鈕,即可開啟可使用的 GUI 介面,如下:

若在下拉式選單選取 handel,即可畫出相關的歌聲波形,此時再按下「Play Sound」,即可聽到動聽的歌聲,(記得要開喇叭),相關畫面如下:

上述範例收錄在本章範例程式目錄內的 gui03.m 和 gui03.fig。

如果我們希望一開啟畫面,圖軸就能顯示 chirp.mat 的鳥聲波形,那麼你可以直接修改 myGUI_OpeningFcn(),此函式在產生 GUI 畫面之後,就會被呼叫一次,因此我們可以在這個函式內,先讀入 chirp.mat,然後把波形畫出來,這樣就能讓 chirp.mat 的波形在 myGUI.m 被呼叫後,就能立刻顯示在視窗內。各位讀者可以試試看!


MATLAB程式設計:入門篇