王濤 田述珍 陳丁 王志雄 周慧


摘要:基于MATLAB GUI的音頻文件播放器的設計是隨著社會大數據化提出的,Matlab軟件是一種有效的分析工具,在數據分析時能使用一種快速、簡捷、高效的軟件進行數據處理工作。MATLAB如今已成為世界上最流行的科技應用軟件之一,可以把使用者從繁雜、無聊的編程中解救出來,以便能夠有更多的時間來學習其他專業領域。該項目利用Matlab強大的仿真功能和數據分析功能,通過Matlab·GUI界面進行音頻播放器的設計。利用GUI界面設計的播放器具有音頻播放、暫停、變速、多音頻播放等功能。
關鍵詞:M文件;MATLAB/GUI;人機交互;數據分析處理
中圖分類號:TP37? ? ? 文獻標識碼:A? ? ? 文章編號:1009-3044(2018)35-0207-02
Abstract: The design of the audio file player Based on MATLAB GUI is proposed with the big data of society. Matlab software is an effective analysis tool, and can use a fast, simple and efficient software for data processing when analyzing data. MATLAB has now become one of the most popular technology applications in the world, saving users from complicated and boring programming so that they can have more time to learn other professional fields. This project uses Matlab's powerful simulation function and data analysis function to design audio player through Matlab GUI interface. The player designed using the GUI interface has music playback, pause, fast forward, fast retreat, multiple audio playback and other functions.
Key words: M file; MATLAB/GUI; human-computer interaction; data analysis and processing
1 背景
MATLAB是一款商業數學軟件,主要用于算法開發、數據可視化、數據分析以及數值計算的高級技術計算語言和交互式環境,包括GUI和Simulink兩大部分,具有完備的圖形處理和仿真功能。
2 基于M文件的音頻設計
2.1 MATLAB播放音頻的前提
首先是獲取一段音頻,由于MATLAB自身內存的局限性,獲取的音頻不能很大。那么如何來獲取一段音頻呢?我們通過錄音來獲取,然后將其進行保存。實現代碼如下:
開始錄音:
record(handles.recObj);
結束錄音:
stop(handles.recObj);
2.2 播放錄音
獲取錄音數據通過getaudiodata函數來實現雙通道的波形數據,通過audioplayer函數來實現播放功能。
代碼如下:
handles.myRecording = getaudiodata(handles.recObj);
handles.playObj=audioplayer(handles.myRecording,handles.playSpeed*handles.recObj.SampleRate);
play(handles.playObj);
guidata(hObject, handles);
2.3 保存錄音
通過uiputfile函數來保存文件,而真正保存波形文件的是audiowrite函數。
代碼如下:
[file,path] = uiputfile(['soundDemo_Speed' num2str(handles.playSpeed) '.wav'],'Save recorded sound');
if file
audiowrite([path'\'file],handles.myRecording,handles.playSpeed*handles.recObj.SampleRate)
end
2.4 波形顯示
通過RecDisplay函數來實現波形顯示功能,通過getaudiodata函數獲取當前錄音的波形數據,然后用plot函數在畫布里面繪制波形圖,最后通過drawnow函數加速圖形刷新,設置刷新頻率較快時可以運用此函數。
代碼如下:
function RecDisplay(hObject, eventdata,handles)
%handles
handles.myRecording = getaudiodata(handles.recObj);
axes(handles.axes1)
plot((1:length(handles.myRecording))/handles.recObj.SampleRate,handles.myRecording)
drawnow;
3 基于GUI的音頻設計
在MATLAB提供的GUI上利用MATLAB語言構建框架并編寫核心代碼是一種明智的選擇。不但減少了編寫代碼繁重的工程量,而且制作出的軟件具有界面良好和方便進行各種數據處理及圖像分析等特點。GUI程序是在圖形界面下創建于用戶交互的控件,使用戶可以通過操作這些交互控件實現特定的功能,并且可以返回顯示在程序界面相應的結果顯示區域中。該項目通過GUI進行音頻的設計來說明GUI的功能和使用。
3.1 總體界面的設計
根據界面的顯示,通過GUI各功能鍵設計了運行界面,其總體設計包括錄音模塊、播放模塊、關閉模塊、變速、多頻播放模塊。如圖1、2、3、4、5、6。
3.2 部分按鈕代碼實現
3.2.1 多頻功能實現
通過設置一個radiobutton 鍵來實現多頻的功能,當點擊該按鈕時,增加它的頻率分量,使其含有豐富的頻率分量。通過設置一個全局變量,當選中該控件時,全局變量的值改變,程序代碼如下:
Global r;
r=get(handles.duopin,value);? ? %多頻的按鈕是否選中
3.2.2 主界面退出窗口
通過設置一個pushbutton鍵來實現,在該鍵callback下,編寫回調函數。程序如下:
ss=questdlg('你真的要退出嗎?','退出信息窗口!','不,我還想看看!','是的,我要退出!','是的,我要退出!');
switch ss
case '是的,我要退出!'
delete(handles.figure1);
end
%當按下退出按鈕時,得到一個退出信息窗口提示
4 結束語
Matlab不但具有強大的圖形顯示功能,而且具有豐富的人機交互界面設計的功能,通過Matlab中的GUI,可以進行已有的M文件的仿真,又能通過人機交互的方式顯示仿真結果。在GUI設計時,可以將設計的GUI界面保存為fig文件,與此同時生成相應的M文件,便于用戶隨時進行編輯處理。利用Matlab/GUI進行界面設計可以為用戶提供友好、方便、形象的圖形顯示和數據分析處理,方便用戶使用。
參考文獻:
[1] 王肖霞,楊風暴,袁華. 利用MATLAB創建用戶界面[J]. 腦開發與應用, 2007(1).
[2] 鄭阿奇. Matlab實用教程[M]. 北京:北京電子工業出版社, 2012.
[3] 徐明遠,邵玉斌. Maatlab仿真在通信與電子工程中的應用[M]. 西安:西安電子科技大學出版社, 2009.
[4] 施曉紅,周佳. 精通GUI圖形界面編程[M]. 北京:北京大學出版社, 2003.
[5] 馮建元. 音頻播放器的架構分析與關鍵技術的實現[J].計算機與網絡, 2009(20).
[6] 段鳳云. 基于ARM的數字音頻播放器的設計[J].實驗室科學, 2010(6).
[7] 劉林濤,田慧珍. 基于Authorware的wave音頻播放器的設計[J].電腦知識與技術, 2006(29).
[8] 仲麟. MATLAB仿真技術與應用教程[M].北京: 國防工業出版社, 2004.
[9] 張亮, 王繼陽. MATLAB與C/C++混合編程[M].北京: 人民郵電出版社, 2008.
[10] Sanjit K Mitra.數字信號處理——基于計算機的方法[M]. 2版.孫洪, 余翔宇, 譯. 北京: 電子工業出版社, 2005.
[通聯編輯:謝媛媛]