基于MATLAB软件GUI界面的可编程电音合成器软件
基于MATLAB軟件GUI界面的可編程電音合成器軟件
- 1 總體設計
- 1.1 設計思路
- 1.2 軟件運行
- 2 軟件功能說明
- 2.1 軟件界面
- 2.1.1 菜單欄
- 2.1.2 工具欄
- 2.1.3 MySynthesizer界面
- 2.1.4 mymidi界面
- 2.2 所需文件
- 2.3 軟件運行效果
- 2.3.1 單音合成效果
- 2.3.2 讀取midi文件
- 2.3.3 設計個性化曲目
- 3 后記
概要: 本文基于MATLAB及其GUI界面設計了一個基可編程電音合成器軟件。利用MATLAB的GUI控件及相關算法,實現了多種音色電子音的合成,做到了音長、音色、音調可控和顯示的多樣化。基本音調包含了鋼琴88鍵的頻率,音色可選范圍有正弦、方波、鋸齒波、四段包絡的正弦波、KarplusStrong合成波等。另外,軟件還實現了midi文件的編解碼,用戶可通過對midi數組的編程自行設計電音曲目。
關鍵字: 電音合成器;MATLAB; 可編程
?
1 總體設計
1.1 設計思路
?? 軟件首先設計了Synthesizer界面,將音頻的音頻顯示坐標、頻域顯示坐標、數據輸入輸出界面集成到一起,實現電音合成與播放的基本功能;再設計子界面mymidi,通過該界面讀取midi文件并播放。用戶可以自行設計midi矩陣以實現個性化的設計。
1.2 軟件運行
?? 本軟件運行在MATLAB上,打開MATLAB,在工作路徑下粘貼本軟件源代碼、和一個音頻信號作為提示音,點擊運行即可出現用戶交互界面。通過操作界面內一系列按鈕以及快捷鍵即可使用本軟件。
?
2 軟件功能說明
2.1 軟件界面
?? 設計了如圖1和圖2所示的顯示界面:
圖 1 軟件顯示界面(1) 圖2 軟件顯示界面(2)2.1.1 菜單欄
?? 界面Synthesizer有6個下拉菜單
?? “開始”菜單有2個子菜單,分別為“讀取midi文件”和“創作midi文件”。點擊“讀取midi文件”后,彈出mymidi界面;點擊“創作midi文件”后,顯示出“創作一”和“創作二”子文件,分別對應另個midi曲目。如圖3所示。
圖3 “開始”菜單?
?? “顯示”菜單有8個子菜單,分別為“色彩”、“線型”、“線寬”、“標記點型”、“標記點邊緣色”、“標記點表面色”、“標記點尺寸”和“恢復默認”。它們各自都有若干子菜單,作用是設置對應的圖像屬性。如圖4所示。
| ??????圖4 (1) | ????????圖4 (2) | ????????圖4 (3) |
| ??????圖4 (4) | ????????圖4 (5) | ????????圖4 (6) |
| ??????????????????????圖4 (7) | ???????????????????圖4 (8) |
?
?? “音色”菜單設置所合成的單音音色,有5個子菜單,分別為“無包絡鋸齒波”、“無包絡方波”、“無包絡正弦”、“四段包絡正弦”、“KarplusStrong合成”。如圖5所示。
?
?? “音高”菜單設置所合成的單音的音高,按照鋼琴鍵盤的分類,將音高分為以下9個音組,也就是對應的子菜單,分別為:“大字二組”、“大字一組”、“大字組”、“小字組”、“小字一組”、“小字二組”、“小字三組”、“小字四組”、“小字五組”。如圖6所示。
?
?? “音長”菜單設置所合成的單音的音長,默認每個單音音符0.6s,每次改變0.1s,或增加或減少。如圖7所示。
?
?? “幫助”菜單有2個子文件夾,分別為“版本說明”和“使用說明”,分別介紹軟件的基本情況。如圖8所示。
2.1.2 工具欄
?? GUI的工具欄內有11個工具,它們從左到右依次是:“顯示網格線”、“放大”、“縮小”、“數據游標”、“增加線寬”、“減小線寬”、“增加標記點尺寸”、“減小標記點尺寸”、“增加單音節時長”、“縮短單音節時長”和“恢復默認”。如圖9所示。
圖9 工具欄?
?? “顯示網格線”工具的功能是在時域頻域圖中顯示或隱藏網格線;
?? “放大”、“縮小”工具的功能是縮放圖像。
?? “數據游標”工具的功能是顯示波形圖中各點的橫縱坐標。
?? “增加線寬”、“減小線寬”、“增加標記點尺寸”、“減小標記點尺寸”、“增加單音節時長”、“縮短單音節時長”和“恢復默認”工具的功能對應的菜單功能相同。
2.1.3 MySynthesizer界面
?? MySynthesizer界面有2個坐標軸,一個參數顯示框和一組單音節鍵盤框,2個坐標軸分別顯示當前合成的單音的時域、頻域波形;參數顯示框顯示當前合成的單音的頻率值、所屬音組、音色、音長、顯示線寬和標記點尺寸等參數;單音組鍵盤有12個按鍵可選,表示待合成的按鍵音。通過對音色、音長等參數的選擇,可以合成多音色、多頻率、多音長的單音,還可以通過對顯示參數的選擇從多角度觀察信號。其中,KarplusStrong合成算法對高頻音的合成效果不佳,因此,當選擇此音色時,設置高頻音組“小字三組”、“小字四組”和“小字五組”為無效。由于KarplusStrong合成算法的特殊性,對于同一音符會有多種頻譜,但是其基音頻率都是相同的。
2.1.4 mymidi界面
?? 點擊“開始”->“讀取midi文件”之后會彈出mymidi界面。
?? mymidi界面有2個菜單、2個工具和2張坐標。
?? “打開”菜單為讀取.mid文件,并將其解碼為一個一維數組,并包含有音軌、聲道、采樣率等基本音頻信息。同時,解碼得到的信號將在第一張坐標(上側)上顯示,在第二張坐標(下側)上顯示其對應的自動打孔紙卷圖,顏色代表了每個音符的響度。
?? “合成音色”有5個子菜單,設置讀取并解碼的音頻文件的合成音色。如圖10所示。
?
?? 工具欄中有2個工具,分別為“保存音頻”和“播放”。其中“保存音頻”工具將讀取的.mid文件保存為一般音頻文件.wav格式,“播放”工具用以播放解碼后的音頻。
2.2 所需文件
?? 運行本軟件需要至少18個文件:15個源代碼文件,2個GUI圖形界面文件和至少1個midi文件。如圖11所示:
圖11 軟件運行所需文件?
?? 其中,.m文件是源代碼文件,.fig文件是圖形界面文件,.mid是midi文件。
2.3 軟件運行效果
?? 軟件可調參數豐富,包括音長、音高、音色和多樣化的顯示參數。下面將作簡要演示。
2.3.1 單音合成效果
?? 圖12到圖15展示的是在不同音長、音色、音高和不同顯示模式下的單音的時域頻域圖像。
?? 圖12:音長1.2s,四段包絡正弦波,小字一組c1鍵(261.626Hz),波形藍色,線寬0.5;無標記點;
?? 圖13:音長0.2s,四段包絡正弦波,大字一組C1鍵(32.703Hz),波形藍色,線寬1.5;有標記點,標記點型為向上的三角,尺寸為4,色彩為藍色;
?
?? 圖14:音長0.5s,KarplusStrong合成,大字一組E1鍵(41.203Hz),波形紅色,線寬0.5,有標記點,標記點型為圓圈,尺寸為2,色彩為藍色;
?? 圖15:音長0.2s,無包絡方波,大字組F鍵(87.307Hz),波形紅色,線寬0.5,有標記點,標記點型為空心五角星,尺寸為8,色彩為藍色;
2.3.2 讀取midi文件
?? 圖16展示的是讀取midi文件之后的時域圖和自動打孔紙卷圖。
?? 圖16(1):時域圖。讀入“jesu.mid”,音色為KarplusStrong。
?? 圖16(2):自動打孔紙卷圖。讀入“jesu.mid”,音色為KarplusStrong。
2.3.3 設計個性化曲目
?? 用戶可以通過寫一特定矩陣實現個性化的編曲,用戶需要輸入的信息包括音符數目、每一個音符的編號、響度、音軌、聲道、開始時間和結束時間。
?? 如,編寫曲目為:
N = 21; % 音符數目
M = zeros(N,6);
M(:,1) = 1; % 音軌1
M(:,2) = 1; % 聲道1
M(:,3) = (70:90)’; % 音符(只能取0-127)中央C:第60號
M(:,4) = round(linspace(60,120,N))’; % 設置每個音符的響度:80->120
M(:,5) = (0.5:0.5:10.5)’; % 每個音符的開始時間
M(:,6) = M(:,5) + 1.5; % 每個音符的結束時間
?? 則表示:產生21個音符,所有音符在1號音軌,在1號聲道輸出,取編號為70-90的21個音符,響度設置為在60-120區間線性分布,每個音符的開始時間相隔0.5s,每個音符延續1.5秒。
?? 則在不同的音色選擇下,會出現多種音頻曲線,其產生的人耳聽覺效應也不同。圖17(1)-(5)分別表示在5中不同音色下的音頻曲線。
?? 圖17(1):無包絡鋸齒波;圖17(2):無包絡方波;圖17(3):無包絡正弦波;圖17(4):四段包絡正弦波;圖17(5):KarplusStrong合成。
| ?????????圖17 (1) | ????????圖17 (2) |
| ?????????圖17 (3) | ????????圖17 (4) |
| 圖17 (5) |
?
?? 圖18所示為該曲目的自動打孔紙卷圖。
?
?? 用戶也可按此方法設計自己的個性化曲目。
3 后記
?? 這是我大三下學期做的項目,前前后后花了大約一周時間。說來有趣,某一天我在整理MATLAB目錄時發現了大一暑期做的一個名為“基于MATLAB軟件GUI界面的自制簡單電子琴”的課程設計,(相關內容已經整理到了我的SCDN博客上,點擊鏈接即可查看),一看才發現當年做的項目真是相當簡陋,于是我對它進行了一些改進。總地來說在原來的基礎上變得更加美觀、功能也更加豐富了。
?? 本項目中midi編解碼的部分主要參考了Ken Schutte的工作,相關代碼見其個人網頁。
?? 出于對知識產權和他人智力勞動成果的尊重,我在此僅分享此項目中我個人貢獻的代碼。讀者可根據上文中圖11的描述從兩處找全所有的文件并成功運行程序。當然,如果有讀者對此尤其感興趣或者有需要幫助的地方,我也十分歡迎大家與我聯系。
?? 轉載時務必注明來源及作者。尊重知識產權從我做起。
?? 代碼已上傳至網絡,歡迎下載,密碼是23cy。
總結
以上是生活随笔為你收集整理的基于MATLAB软件GUI界面的可编程电音合成器软件的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 17AHU排位赛1 C题(经典DP)
- 下一篇: 经历过黑暗才更渴望黎明_黑暗的图案,你如