MSP53C39 FM语音合成算法
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
其中:
- RBYTE 保留字;
- CHINNAL 通道号,值是1或2分别对应通道1和2;
- NOTE 音符符号,即C、D、E、F、G、A、B七个音符,这里共定义了6个八度,见表1所示。
任何音符的高半度与其相邻高音符的低半度是相同的,或者说任何音符的高半度与其相邻低音符的高半度也是相同的。比如DS和E的低半度相同,B的低半度和 AS相同,所以符号表中未列出低半度的音符,而是均以高半度来表示。由于E和F、B和高八度的C之间都是相差半度,所以E和B没有高半度表示,而其它任两个相邻的音符之间都是相差一度。
此外,还包括一个休止符REST(#63H),用来禁止发声和两个通道和拍。
- DURATION 节拍,音符演奏的时间,如四分之一拍。分别用如下符号表示:
| 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)是有效的。
- LOAD_BOTH_CHINNELS 是否同时加载两个通道,为0时两个通道同时发这一个音符,为1时仅一个通道发声。
例如: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 方建淳编著. 语音合成技术与单片机综合系统. 北京:航空航天大学出版社
本文出自家电维修网: http://www.bjjdwx.com/wz/2009/dz1947.html欢迎转载,转载请保留链接。
- 刊登此文只为传递信息,并不表示赞同或者反对作者观点。
- 如果此内容给您造成了负面影响或者损失,本站不承担任何责任。
- 如果内容涉及版权问题,请及时与我们取得联系。

文章评论