MSP53C39晶元是TI公司推出的掩膜型語音處理晶元,它除了具有語音播放的功能外,還可以播放專門的FM(Frequency Modulation)樂譜。FM樂譜是TI公司專有的語音合成演算法(Synthesis),是用相對簡單的格式來產生不同樂器音樂效果的技術。使用FM 樂譜,MSP53C39可以模擬產生各種樂器的聲音,如鋼琴、黑管、長笛、小號等等。
1 FM的原理
FM樂譜使用調製后的信號來模擬各種樂器的聲音,改變信號的參數可模擬不同的樂器效果。FM的基本原理可用下式表達:
式中:V1m、V2m、ω1、ω2是載波的振幅和角頻率;
Ω3、Ω4是調製信號的角頻率;
mf3、mf4、是調頻指數。
改變調製信號的振幅可以改變音質;改變載波信號的振幅可以改變音量。調製信號和載波信號的頻率比會影響到聲音的特性,當載波頻率為調製頻率的整數倍時,發出的聲音就有音樂一樣的悅耳動聽旋律。MSP53C39內部的程序固化了67種樂器的參數(詳見第三節)。 演奏每個音符的過程包括四個基本部分:上升、衰減、維持和恢復(見圖1)。上升是一個音符的起始,衰減是對上升的撤消,維持是音符的持續,恢復是一個音符的結束。 2 TI公司FM樂譜文件數據格式 | 圖1 演奏一個音符的過程 |
2.1 樂譜文件音符數據格式
在FM格式文件中,數據位元組是倒的(低位LSB在前,高位MSB在後)。TI公司定義的FM樂譜數據格式編寫的音符/歌曲是按下面的形式組織的。
RBYTE CHANNEL NOTE DURATION LOAD_BOTH_CHINNEL
其中:
任何音符的高半度與其相鄰高音符的低半度是相同的,或者說任何音符的高半度與其相鄰低音符的高半度也是相同的。比如DS和E的低半度相同,B的低半度和 AS相同,所以符號表中未列出低半度的音符,而是均以高半度來表示。由於E和F、B和高八度的C之間都是相差半度,所以E和B沒有高半度表示,而其它任兩個相鄰的音符之間都是相差一度。
此外,還包括一個休止符REST(#63H),用來禁止發聲和兩個通道和拍。
SIXTH | 十六分之一拍 | (#08H) |
ETH | 八分之一拍 | (#10H) |
QTR | 四分之一拍 | (#20H) |
HALF | 二分之一拍 | (#40H) |
WHOLE | 全拍 | (#80H) |
表1 音符表
音 符 | 雙低八度 | 低八度 | 正常 | 高八度 | 雙高八度 | 三高八度 | ||||||
符號 | 真值 | 符號 | 真值 | 符號 | 真值 | 符號 | 真值 | 符號 | 真值 | 符號 | 真值 | |
C | - | C0 | 9 | C1 | 21 | C2 | 33 | C3 | 45 | C4 | 57 | |
高半度C | - | CS0 | 10 | CS1 | 22 | CS2 | 34 | CS3 | 46 | CS4 | 58 | |
D | - | D0 | 11 | D1 | 23 | D2 | 35 | D3 | 47 | D4 | 59 | |
高半度D | DSL | 0 | DS0 | 12 | DS1 | 24 | DS2 | 36 | DS3 | 48 | DS4 | 60 |
E | EL | 1 | E0 | 13 | E1 | 25 | E2 | 37 | E3 | 49 | E4 | 61 |
F | FL | 2 | F0 | 14 | F1 | 26 | F2 | 38 | F3 | 50 | F4 | 62 |
高半度F | FSL | 3 | FS0 | 15 | FS1 | 27 | FS2 | 39 | FS3 | 51 | - | |
G | GL | 4 | G0 | 16 | G1 | 28 | G2 | 40 | G3 | 52 | - | |
高半度G | GSL | 5 | GS0 | 17 | GS1 | 29 | GS2 | 41 | GS3 | 53 | - | |
A | A0 | 6 | A1 | 18 | A2 | 30 | A3 | 42 | A3 | 54 | - | |
高半度A | AS0 | 7 | AS1 | 19 | AS2 | 31 | AS3 | 43 | A4 | 55 | - | |
B | B0 | 8 | B1 | 20 | B2 | 32 | B3 | 44 | B4 | 56 | - |
節拍還可以是以上各值的加法組合,但總和不能超過最大值#0FFH。如WHOLE+HALF+QTR(#80H+#40H+#20H=#0D0H)是有效的。
例如:RBYTE 1 A2 QTR 1
表示僅在通道1產生A2(正常的A音符,即#30H)四分之一個節拍。
2.2 四個特殊命令
除了一般的音符數據外,還有4個特殊的命令。
(1)結束命令
RBYTE #FF
結束命令告知處理器這是一首歌曲的結束,語音處理器的模式寄存器PCM和ENA1被禁止,然後關閉。一旦處理器發現這個命令就會忽略其餘後面的音符,所以為了避免在結束時產生尖叫,應在兩個通道的最後一個音符后加休止符來適當的延遲。
(2)改變樂器命令
RBYTE #F0 NEW_TIMBRE CHINNEL
NEW_TIMBRE樂器名稱,TI的FM格式中支持67種樂器。包括:PICCOLO(短笛),FLUTE(長笛),CLARINET(黑管)等。
CHINNEL 通道號,載入樂器於某一通道。
(3)改變速度命令
RBYTE #EA NEW_TEMPO
NEW_TEMPO 設定新的速度,取值範圍是0~127。
(4)重複命令
RBYTE #D0
RDATA LABEL
使用重複命令前應先定義一個標號(LABEL),重複命令的功能是將從標號到當前的數據重複演奏一次。
3 MSP53C39支持的樂器
MSP53C39內部集成了67種樂器的模式,每種樂器的定義通過13個參數來確定。包括:1個位元組的頻率比,6個位元組的載波函數參數和6個位元組的調製函數參數,例如:
BYTE FR121,#38,#E0,#F8,#20,#FC,#00,#1F, #1C, #18, #23,#20,#20 ;喇叭
BYTE FR421,#08,#18,#FC,#00,#D0,#F8,#05, #1F, #1D,#50,#16,#04 ;長笛
BYTE FR121,#00,#F8,#FE,#00,#F0,#F0,#28, #20,#08,#37,#27,#1C ;電子琴
BYTE FR121,#00,#FE,#FE,#00,#00,#00,#30, #20,#1F,#05,#05,#05 ;風琴
以上是4種樂器的模式定義數據,這些數據是MSP53C39內部固化好的,用戶無需再定義。
4 TI_FM使用說明
如果直接按TI公司要求的FM格式編寫一首歌曲是十分困難的,作者必須具有相當的音樂專業知識,並且對命令表也要非常熟悉。為了簡化編寫的步驟,TI公司有一個基於DOS專用於轉換的程序TI_FM,可將用符號表編寫的FM歌曲的文本文件(SOG文件)轉換成彙編源文件(TFM文件),再通過 MSP50C3×彙編程序彙編成二進位數據文件。
TI_FM的使用方法是:
TI_FM SONG.SOG
輸入文件:SONG.SOG
輸出文件:SONG.TFM
5 使用體會 筆者曾使用MSP53C39對FM演算法進行過評估,用PC機的並口給MSP53C39提供數據,這樣在PC機上就能全部完成FM數據的生成和語音的評估,其連接示意圖如圖2所示。 首先在PC機上用編輯工具按FM文本格式要求編寫一段樂譜文件(見附錄1),使用TI_FM程序轉換成TFM格式文件,再用彙編程序彙編成二進位數據文件。在PC機上編寫一個小程序,通過並口向MSP53C39發送數據,就能夠聽到悅耳的音樂。編寫樂譜文件通常可以根據歌曲簡譜,如果有MIDI的多樂器樂譜,使兩個通道分別播放主樂器和配樂器的話,效果就會更好。 | 圖2 PC機與MSP53C39連接示意圖 |
在編寫FM歌曲符號表文件格式時應注意以下幾點:
(1)TEMPO用於定義速度;
(2)TIMBRE_CH1 和TIMBRE_CH2 用於定義通道1、通道2使用的樂器;
(3)CHANNEL1和CHANNEL2后是通道1、2中的音符和節拍:第一行是音符,第二行是節拍,所有音符和節拍都以空格分開,並且音符和節拍必須一一對應;
(4)‘*’和‘;’后是解釋或說明信息,如詞/曲作者和歌詞等;
(5)在歌曲最後要有一個REST休止符以保證歌曲的正確結束。
附錄1 FM格式源文件(S1.SOG)
********************************************
* 歌名 : Miss You Indeed
* 作詞 : Xianyue Yang
* 作曲 : Hanying Li
* 速度 : D4/4
TEMPO 16 | ;速度 | |
TIMBRE_CH1 ELEC_PIANO | ;通道1使用電子琴 | |
TIMBRE_CH2 ELEC_BASS | ;通道2使用電子低音提琴 |
CHANNEL1 | ||||||||||
E2 | E2 | G2 | D2 | E2 | A1 | G1 | C2 | A1 | C2 | |
QTR+ETH | SIXTH | SIXTH | ETH | QTR | SIXTH | SIXTH | QTR+QTR+QTR | ETH | ETH | |
CHANNEL2 | ||||||||||
E2 | E2 | G2 | D2 | E2 | A1 | G1 | C2 | A1 | C2 | |
QTR+ETH | SIXTH | SIXTH | ETH | QTR | SIXTH | SIXTH | QTR+QTR+QTR | ETH | ETH | |
CHANNEL1 | ||||||||||
D2 | E2 | G2 | E2 | D2 | E2 | B1 | A1 | G1 | ||
QTR+ETH | SIXTH | SIXTH | ETH | SIXTH | SIXTH | ETH | ETH | WHOLE | ||
CHANNEL2 | ||||||||||
D2 | E2 | G2 | E2 | D2 | E2 | B1 | A1 | G1 | ||
QTR+ETH | SIXTH | SIXTH | ETH | SIXTH | SIXTH | ETH | ETH | WHOLE | ||
CHANNEL1 | ||||||||||
A1 A1 A1 G1 A1 C2 D2 A2 G2 A2 G2 D2 E2 | ||||||||||
ETH SIXTH SIXTH ETH ETH QTR ETH ETH SIXTH SIXTH ETH ETH HALF | ||||||||||
CHANNEL2 | ||||||||||
A1 A1 A1 G1 A1 C2 D2 A2 G2 A2 G2 D2 E2 | ||||||||||
ETH SIXTH SIXTH ETH ETH QTR ETH ETH SIXTH SIXTH ETH ETH HALF | ||||||||||
CHANNEL1 | ||||||||||
D2 D2 D2 E2 D2 C2 A1 G2 E2 D2 D2 REST | ||||||||||
ETH QTR SIXTH SIXTH ETH ETH ETH ETH ETH ETH QTR+QTR+QTR WHOLE | ||||||||||
CHANNEL2 | ||||||||||
D2 D2 D2 E2 D2 C2 A1 G2 E2 D2 D2 REST | ||||||||||
ETH QTR SIXTH SIXTH ETH ETH ETH ETH ETH ETH QTR+QTR+QTR WHOLE | ||||||||||
;歌曲結束 | ||||||||||
................................... |
另外PC機用於和MSP53C39的介面源程序C39_ SPK.ASM限於篇幅未能列出,如感興趣者請與作者聯繫,E-mail:dvssy@p8s.com。
參 考 文 獻
1 孫樹印. 掩碼型語音晶元MSP53C39原理及應用. 力源電子工程,1999(3)
2 方建淳編著. 語音合成技術與單片機綜合系統. 北京:航空航天大學出版社
[admin via 研發互助社區 ] MSP53C39 FM語音合成演算法已經有2096次圍觀
http://cocdig.com/docs/show-post-45155.html