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