燕麗紅


摘 要: 隨著社會大數據化的提出,數據分析時要求能使用一種快速、簡潔、高效的軟件進行數據處理工作,其中Matlab軟件就是一種有效的分析工具。利用Matlab強大的仿真和數據分析功能,通過編程M文件和Matlab GUI界面設計進行了音樂播放器的設計,其中M文件編程可以播放任意歌曲,GUI界面設計的播放器具有音樂播放、暫停、單音播放、多音播放、視頻播放、歌詞顯示等功能。實踐表明,在教學上采用Matlab軟件進行系統設計具有良好的實用性,也可以很直觀、方便地進行人機交互,教學效果良好。
關鍵詞: M文件; Matlab/GUI; 數據分析功能; 人機交互
中圖分類號: TN911?34; G642 文獻標識碼: A 文章編號: 1004?373X(2015)08?0114?03
Design of music player based on Matlab/GUI
YAN Li?hong
(Information Engineering College, Xian Eurasia University, Xian 710065, China)
Abstract: with the occurrence of the big?datamation, the rapid, simple and efficient softwares are required to realize data processing when carrying out data analysis, in which the Matlab software is an effective analysis tool. With powerful simulation and data analysis function of Matlab, the music player was designed by means of M file programming and Matlab GUI interface design. The M file programming can play any song, and the player designed with GUI interface has the functions of play, pause, monophonic music play, multitone play, video playback, lyrics display, etc. The practice shows that the Matlab software for system design has good practicability in teaching, with which man?machine interaction can be realized intuitively and expediently, and the perfect teaching effect can be achieved.
Keywords: M File; Matlab/GUI; data analysis function; man?machine interaction
0 引 言
Matlab是美國MathWorks公司設計的數學軟件,主要包括Matlab/Simulink和GUI設計兩大部分[1?2]。Matlab可以進行矩陣運算、繪制函數和數據、創建用戶界面、系統仿真設計等,主要應用于工程計算、信號處理與通信、圖像處理、控制設計等領域。
筆者在近幾年的教學中,結合應用型人才培養的目標,采用CDIO工程理念,能充分根據學生的興趣和愛好進行Matlab教學,針對其系統仿真和人機界面設計兩大功能進行模塊主題式教學,充分調動了學生學習的積極性。本文采用M文件和GUI界面進行了音樂播放器的設計,并總結了兩者之間的聯系。
1 基于M文件的音樂設計
1.1 Matlab播放音樂的前提
Matlab具有強大的功能,主要歸功于強大的內置函數功能[3?4]。在Matlab中,可以借助sound函數來播放聲音,其格式為:
sound(Y,FS) :通過揚聲器產生一個采樣頻率為FS的信號Y,其中Y的范圍定義為-1.0≤y≤1.0,超過這個范圍的值將被重新調整,以產生更符合人耳的聲音。 同時當Y為N×2大小的矩陣時,可以通過該函數產生立體聲。
sound(Y):產生默認的采樣頻率為8 192 Hz的聲音。
sound(Y,FS,BITS):產生按位采樣的聲音,其中大部分的平臺支持BITS=8 or 16。
同時可以通過wavwrite 產生*.wav視頻/音頻文件,其格式為:
wavwrite(Y,FS,NBITS,WAVEFILE):寫入一個采樣頻率為FS Hz,位數為NBITS (其中NBITS 必須為8, 16, 24或32)的數據信息Y,并生成相應的WAVE文件。如果產生立體聲的數據需要建立二維矩陣。
wavwrite(Y,FS,WAVEFILE):產生WAV文件時 NBITS=16 b。
wavwrite(Y,WAVEFILE):產生WAV文件時NBITS=16 b并且FS=8 000 Hz。
1.2 頻率轉換
本文根據《荷塘月色》的歌譜(如圖1所示),通過學習相應的樂理知識后,生成了對應的樂譜矩陣,以進行歌曲的播放[5?6]。其中產生的音符:1?do;2?re;3?mi;4?fa;5?so;6?la;7?ti。音階:0?低音;1?中音;2?高音;3?超高音;音長:指的是節拍,最低支持1/16拍。
圖1 《荷塘月色》的簡譜
依據《荷塘月色》簡譜中的譜音,節奏,音節,高低音在matlab *.m文件中建立對應代碼,依據響應函數實現。
paragraph1= [1 1 6 5 6 1 1 2 3 2 2 1 2 2 5 5 3 3 2 3 1 1 6 5 5 3 2 3 2 1 2 2 1 2 2 3 2 1 6 2 1;
0 0 ?1 ?1 ?1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ?1 ?1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 ?1 0 0;
0.5 1 0.5 1 1 1 0.5 0.5 2 0.5 1 0.5 1 0.5 0.5 0.5 0.5 0.5 0.5 2 0.5 1 0.5 1 1 0.5 0.5 0.5 0.5 2 0.5 1 0.5 0.5 1 0.5 0.5 0.5 0.5 0.5 2];
以上代碼功能說明:第一部分為所演奏歌曲的譜;第2部分為各譜音對應的音調;第3部分為各譜音對應的音節。
1.3 歌曲播放
fs = 8000;
sound_pose = [0 2 4 5 7 9 11 0:12];
y = zeros(1, sum(music(3,:))*fs + 1); %初始化
cure_pose = 1;
for count = 1 : length(music)
cure_sound_name = music(1, count); %處理音樂
cure_sound_pose= sound_pose(cure_sound_name);
%產生音樂
cure_freq = 220 * 2 .^ ((cure_sound_pose + rhythm + 3) / 12 + music(2, count));
cure_sound = generate_tune(cure_freq, music(3, count), fs);
y(1,cure_pose:(cure_pose+ length(cure_sound) ? 1)) = cure_sound;
cure_pose=cure_pose+ length(cure_sound);
為了歌曲播放的連續性,需要對其頻率進行修正,其代碼為:
function y = amendment(p, l)
if p < 0.2
y = p*5;
elseif p < 0.3
y = 1.8 ? p * 4;
else
y = 0.6 * exp((0.3 ? p)/5);
end
2 基于GUI的音樂設計
在Matlab 提供的GUI 上利用Matlab 語言編寫核心代碼并構建框架是一種不錯的選擇。這不但減少了代碼編寫的工程量,而且制作出的軟件同時具有界面友好和能夠方便進行各種數據處理及圖像分析等特點[7?8]。圖形用戶界面(Graphic User Interface,GUI)的程序是在圖形界面[9]下創建與用戶交互的控件元素,使用戶可以通過操作這些交互控件實現特定的功能,并且可以返回顯示在程序界面相應的結果顯示區域中[10]。本文通過GUI的GUIDE進行音樂鍵盤的設計來說明GUI的功能和使用。
2.1 總體界面顯示
根據鍵盤的顯示,通過GUI各功能鍵設置了音樂鍵盤,其總體設計包括單頻發音模塊、多頻模塊、播放譜曲模塊、播放視頻模塊和關閉模塊。
圖2中鍵盤的黑、白鍵通過Pushbutton控件相應屬性改變進行設置。
圖2 音樂鍵盤的總體設計
2.2 部分按鍵代碼實現
(1) 關閉功能模塊
通過設置一個push button鍵來實現,在該鍵callback下,編寫該回調函數。程序如下:
selection=questdlg([′是否關閉′,get(gcf,′Name′),′窗口?′], ...
[′Close ′,get(gcf,′Name′),′...′],′是′,′否′,′是′);
%當選擇退出按鈕時,得出一個問是否確定關閉的框
if strcmp(selection,′否′)
return;
else
clc;
clear all;
delete(gcf);
end
(2) 多頻功能模塊
通過設置一個radio button 來實現雙音多頻的功能,當選中該按鈕時,則增加它的頻率分量。使其含有豐富頻率分量。通過設置一個全局變量,當選中該控件時,全局變量的值改變,程序如下:
function duopin_Callback(hObject, eventdata, handles)
global r;
r=get(handles.duopin,′value′); %多頻的按鈕是否選中
2.3 歌曲的顯示
通過查閱資料,發音頻率對應的表達式為f=440*2^((f0-49)/12),當所發音為低音時f0的取值為31~37,發中音時f0的取值為40~46,發高音時f0的取值為49~55。播放音樂可以通過設置一個push button鍵來實現,通過編輯該鍵callback功能通過wavplay函數就可以播放該歌曲了。
A=440; %標準音A
ft=44100; %頻率
f0=ft/2;
scale12=A4/2^(9/12)*2.^((0:11)/12);
ma1=[1 3 5 6 8 10 12]; %七音符
score=[1 1 5 5 6 6 5,...do do sol sol la la sol?
4 4 3 3 2 2 1,...fa fa mi mi re re do?
5 5 4 4 3 3 2,...sol sol fa fa mi mi re?
5 5 4 4 3 3 2,...sol sol fa fa mi mi re?
1 1 5 5 6 6 5,...do do sol sol la la sol?
4 4 3 3 2 2 1];%fa fa mi mi re re do? %樂譜
3 結 語
Matlab具有強大的圖形顯示功能,同時具有豐富的人機交互界面設計的功能,通過Matlab中的GUIDE創建GUI設計時,既能將已有的M文件進行仿真,又能將仿真的圖形結果通過人機交互的方式顯示,從而給使用者留下更形象、深刻的印象。而在GUI設計時,可以將設計的GUI界面保存為Fig文件的同時生成對應的M文件,方便用戶隨時進行編輯處理。利用Matlab/GUI進行界面設計可以為用戶提供友好、方便、形象的圖形顯示和數據分析處理,將會在教學和工程應用上帶來良好的效果。
參考文獻
[1] 鄭阿奇.Matlab實用教程[M].3版.北京:北京電子工業出版社,2012.
[2] 徐明遠,邵玉斌.Matlab仿真在通信與電子工程中的應用[M].西安:西安電子科技大學出版社,2009.
[3] 鄔曉紅,唐紅軍,趙琳,等.基于Matlab GUI的說話人識別測試平臺設計[J].現代電子技術,2013,36(8):59?62.
[4] 沈媛媛.基于Matlab的數字信號處理綜合性實驗設計[J].實驗室研究與探索,2009,28(8):60?61.
[5] 黃飛,李燦平,任小慶,等.基于Matlab/GUI的圖像處理軟件開發[J].長沙通信職業技術學院學報,2010,9(3):22?25.
[6] 白曉梅,王茹,趙云兵.基于Delta3D的氣象仿真框架設計與實現[J].現代電子技術,2012,35(4):29?32.
[7] 李京秀.基Matlab GUI的電路特性演示平臺設計[J].現代電子技術,2012,35(22):160?162.
[8] 施曉紅,周佳.精通GUI 圖形界面編程[M].北京:北京大學出版社,2003.
[9] 龔妙昆.基于Matlab的GUI設計應用軟件[J].微型電腦應用,2011(8):53?56.
[10] 陳瑞峰,左曙光,郭偉.基于Matlab GUI的信號分析系統[J].佳木斯大學學報,2009,27(5):645?647.