王濤 田述珍 陳丁 王志雄 周慧
摘要:基于MATLAB GUI的音頻文件播放器的設(shè)計(jì)是隨著社會(huì)大數(shù)據(jù)化提出的,Matlab軟件是一種有效的分析工具,在數(shù)據(jù)分析時(shí)能使用一種快速、簡(jiǎn)捷、高效的軟件進(jìn)行數(shù)據(jù)處理工作。MATLAB如今已成為世界上最流行的科技應(yīng)用軟件之一,可以把使用者從繁雜、無(wú)聊的編程中解救出來(lái),以便能夠有更多的時(shí)間來(lái)學(xué)習(xí)其他專業(yè)領(lǐng)域。該項(xiàng)目利用Matlab強(qiáng)大的仿真功能和數(shù)據(jù)分析功能,通過(guò)Matlab·GUI界面進(jìn)行音頻播放器的設(shè)計(jì)。利用GUI界面設(shè)計(jì)的播放器具有音頻播放、暫停、變速、多音頻播放等功能。
關(guān)鍵詞:M文件;MATLAB/GUI;人機(jī)交互;數(shù)據(jù)分析處理
中圖分類號(hào):TP37? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? 文章編號(hào):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是一款商業(yè)數(shù)學(xué)軟件,主要用于算法開(kāi)發(fā)、數(shù)據(jù)可視化、數(shù)據(jù)分析以及數(shù)值計(jì)算的高級(jí)技術(shù)計(jì)算語(yǔ)言和交互式環(huán)境,包括GUI和Simulink兩大部分,具有完備的圖形處理和仿真功能。
2 基于M文件的音頻設(shè)計(jì)
2.1 MATLAB播放音頻的前提
首先是獲取一段音頻,由于MATLAB自身內(nèi)存的局限性,獲取的音頻不能很大。那么如何來(lái)獲取一段音頻呢?我們通過(guò)錄音來(lái)獲取,然后將其進(jìn)行保存。實(shí)現(xiàn)代碼如下:
開(kāi)始錄音:
record(handles.recObj);
結(jié)束錄音:
stop(handles.recObj);
2.2 播放錄音
獲取錄音數(shù)據(jù)通過(guò)getaudiodata函數(shù)來(lái)實(shí)現(xiàn)雙通道的波形數(shù)據(jù),通過(guò)audioplayer函數(shù)來(lái)實(shí)現(xiàn)播放功能。
代碼如下:
handles.myRecording = getaudiodata(handles.recObj);
handles.playObj=audioplayer(handles.myRecording,handles.playSpeed*handles.recObj.SampleRate);
play(handles.playObj);
guidata(hObject, handles);
2.3 保存錄音
通過(guò)uiputfile函數(shù)來(lái)保存文件,而真正保存波形文件的是audiowrite函數(shù)。
代碼如下:
[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 波形顯示
通過(guò)RecDisplay函數(shù)來(lái)實(shí)現(xiàn)波形顯示功能,通過(guò)getaudiodata函數(shù)獲取當(dāng)前錄音的波形數(shù)據(jù),然后用plot函數(shù)在畫(huà)布里面繪制波形圖,最后通過(guò)drawnow函數(shù)加速圖形刷新,設(shè)置刷新頻率較快時(shí)可以運(yùn)用此函數(shù)。
代碼如下:
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的音頻設(shè)計(jì)
在MATLAB提供的GUI上利用MATLAB語(yǔ)言構(gòu)建框架并編寫(xiě)核心代碼是一種明智的選擇。不但減少了編寫(xiě)代碼繁重的工程量,而且制作出的軟件具有界面良好和方便進(jìn)行各種數(shù)據(jù)處理及圖像分析等特點(diǎn)。GUI程序是在圖形界面下創(chuàng)建于用戶交互的控件,使用戶可以通過(guò)操作這些交互控件實(shí)現(xiàn)特定的功能,并且可以返回顯示在程序界面相應(yīng)的結(jié)果顯示區(qū)域中。該項(xiàng)目通過(guò)GUI進(jìn)行音頻的設(shè)計(jì)來(lái)說(shuō)明GUI的功能和使用。
3.1 總體界面的設(shè)計(jì)
根據(jù)界面的顯示,通過(guò)GUI各功能鍵設(shè)計(jì)了運(yùn)行界面,其總體設(shè)計(jì)包括錄音模塊、播放模塊、關(guān)閉模塊、變速、多頻播放模塊。如圖1、2、3、4、5、6。
3.2 部分按鈕代碼實(shí)現(xiàn)
3.2.1 多頻功能實(shí)現(xiàn)
通過(guò)設(shè)置一個(gè)radiobutton 鍵來(lái)實(shí)現(xiàn)多頻的功能,當(dāng)點(diǎn)擊該按鈕時(shí),增加它的頻率分量,使其含有豐富的頻率分量。通過(guò)設(shè)置一個(gè)全局變量,當(dāng)選中該控件時(shí),全局變量的值改變,程序代碼如下:
Global r;
r=get(handles.duopin,value);? ? %多頻的按鈕是否選中
3.2.2 主界面退出窗口
通過(guò)設(shè)置一個(gè)pushbutton鍵來(lái)實(shí)現(xiàn),在該鍵callback下,編寫(xiě)回調(diào)函數(shù)。程序如下:
ss=questdlg('你真的要退出嗎?','退出信息窗口!','不,我還想看看!','是的,我要退出!','是的,我要退出!');
switch ss
case '是的,我要退出!'
delete(handles.figure1);
end
%當(dāng)按下退出按鈕時(shí),得到一個(gè)退出信息窗口提示
4 結(jié)束語(yǔ)
Matlab不但具有強(qiáng)大的圖形顯示功能,而且具有豐富的人機(jī)交互界面設(shè)計(jì)的功能,通過(guò)Matlab中的GUI,可以進(jìn)行已有的M文件的仿真,又能通過(guò)人機(jī)交互的方式顯示仿真結(jié)果。在GUI設(shè)計(jì)時(shí),可以將設(shè)計(jì)的GUI界面保存為fig文件,與此同時(shí)生成相應(yīng)的M文件,便于用戶隨時(shí)進(jìn)行編輯處理。利用Matlab/GUI進(jìn)行界面設(shè)計(jì)可以為用戶提供友好、方便、形象的圖形顯示和數(shù)據(jù)分析處理,方便用戶使用。
參考文獻(xiàn):
[1] 王肖霞,楊風(fēng)暴,袁華. 利用MATLAB創(chuàng)建用戶界面[J]. 腦開(kāi)發(fā)與應(yīng)用, 2007(1).
[2] 鄭阿奇. Matlab實(shí)用教程[M]. 北京:北京電子工業(yè)出版社, 2012.
[3] 徐明遠(yuǎn),邵玉斌. Maatlab仿真在通信與電子工程中的應(yīng)用[M]. 西安:西安電子科技大學(xué)出版社, 2009.
[4] 施曉紅,周佳. 精通GUI圖形界面編程[M]. 北京:北京大學(xué)出版社, 2003.
[5] 馮建元. 音頻播放器的架構(gòu)分析與關(guān)鍵技術(shù)的實(shí)現(xiàn)[J].計(jì)算機(jī)與網(wǎng)絡(luò), 2009(20).
[6] 段鳳云. 基于ARM的數(shù)字音頻播放器的設(shè)計(jì)[J].實(shí)驗(yàn)室科學(xué), 2010(6).
[7] 劉林濤,田慧珍. 基于Authorware的wave音頻播放器的設(shè)計(jì)[J].電腦知識(shí)與技術(shù), 2006(29).
[8] 仲麟. MATLAB仿真技術(shù)與應(yīng)用教程[M].北京: 國(guó)防工業(yè)出版社, 2004.
[9] 張亮, 王繼陽(yáng). MATLAB與C/C++混合編程[M].北京: 人民郵電出版社, 2008.
[10] Sanjit K Mitra.數(shù)字信號(hào)處理——基于計(jì)算機(jī)的方法[M]. 2版.孫洪, 余翔宇, 譯. 北京: 電子工業(yè)出版社, 2005.
[通聯(lián)編輯:謝媛媛]