MATLAB 是科學計算軟件,同時也提供了圖形、聲音等多媒體展示特性和人機交互特性。利用這些特性,很容易完成復雜的任務,例如寫一個鋼琴 APP,將電腦的鍵盤當成鋼琴的琴鍵,發出悅耳的聲音。
實現以上功能的核心代碼和語法知識包括:
腳本和函數的概念
全局變量
switch流程
sound函數
figure的屬性和回調函數
這些都可以在 MATLAB 基本語法的幫助文檔(中文)中找到詳細說明:
將代碼打包成 App 需要用到 MATLAB Compiler:
首先,要知道 MATLAB 中“發聲”的方法,最簡單的是 sound 函數。這里將聲音的采樣頻率設為和一般 mp3 文件一樣的 44100 Hz,將一個音符的時間設定為 0.4 s,以音階 do 的頻率 261.63 Hz 為例,發出一段聲音。聲音的包絡線,其目的在于模擬一個音符漸響和漸輕的過程。
Fs=44100; %mp3標準采樣品頻率
T=0:Fs^-1:4e-1; %假定每個聲音持續0.4s
A=sin(2*pi/8e-1*T); %聲音振幅包絡
a=A.*sin(2*pi*261.63*T); %do的時域波形
sound(a,Fs)
也可以用 plot(T,a) 觀察波形。
對于其他音階,設定不同的頻率,于是就可以獲得一系列的音符,他們隨時可以放進 sound 中進行發聲。
a=A.*sin(2*pi*261.63*T);
s=A.*sin(2*pi*293.66*T);
d=A.*sin(2*pi*329.63*T);
其次,要知道 MATLAB 中怎么用鍵盤實時控制,這樣才是一個真正的鋼琴 App。較為簡單的方法是利用 figure 的 KeyPressFcn 屬性。建立一個圖形,在選中圖形的情況下,只要鍵盤被按下,就會執行一個函數(通常稱為回調函數),在這個函數中通過 sound 發聲。
fig=figure('KeyPressFcn','sound(a,Fs)');
再次,要在回調函數中判斷剛才按下的是哪個鍵,并決定讓 sound 發出哪個聲音。這是一個典型的 switch 流程。而 switch 的判斷依據則是 figure 的 'CurrentChar' 屬性,可以通過 get 函數來獲得。
args=get(fig,'CurrentChar');
switch args
case'a'
sound(a,Fs)
case's'
sound(s,Fs)
此時,顯然回調函數不會那么簡單,需要單獨封裝并命名,例如叫mysound。而為了使剛才定義的Fs等變量可以在mysound中使用,需要聲明他們為全局變量,即:
function mysound
global Fs z x c ……
最后,進行適當的美化,通過 rectangle 函數畫出矩形琴鍵,通過 text 函數標注音階和鍵盤的對應。同時,在回調函數中,根據不同的鍵盤輸入,對矩形進行一定的顯示變化,通過 pause 函數控制這種變化的持續時間,就很像一個鋼琴 App 了。
附件使用方法:在 MATLAB 工作路徑中,放置 mymusic 腳本和 mysound 函數兩個文件,在 Command Window 中運行 mymusic,按鍵盤發聲。
當然,也可以繼續在 Command Window 中運行。
sound([a a g g h h g zeros(size(a)) f f d d s sa],Fs)
來聽一小段音樂,enjoy~
App 如何脫離 MATLAB 運行?這里需要用到 MATLAB Compiler,僅需點擊幾次鼠標即可:
點擊:APPS -> Application Compiler
點擊:Add main file,選擇 mymusic
點擊:Files required for your application to run,選擇 mysound
這兩步的目的是告訴 MATLAB 需要打包的腳本和這個腳本調用的函數。
點擊:package,一路確定即可。
軟件打包完成后,可以關閉 MATLAB。在彈出的 for_testing 目錄下找到 mymusic 的 exe 文件,雙擊即可執行。
這樣就完成了一個鋼琴 App,可以分享給其他小伙伴。
-
人機交互
+關注
關注
12文章
1213瀏覽量
55464 -
變量
+關注
關注
0文章
613瀏覽量
28439
發布評論請先 登錄
相關推薦
評論