MSP53C39芯片是TI公司推出的掩膜型语音处理芯片,它除了具有语音播放的功能外,还可以播放专门的FM(Frequency Modulation)乐谱。FM乐谱是TI公司专有的语音合成算法(Synthesis),是用相对简单的格式来产生不同乐器音乐效果的技术。使用FM 乐谱,MSP53C39可以模拟产生各种乐器的声音,如钢琴、黑管、长笛、小号等等。
FM乐谱使用调制后的信号来模拟各种乐器的声音,改变信号的参数可模拟不同的乐器效果。FM的基本原理可用下式表达:
式中:V1m、V2m、ω1、ω2是载波的振幅和角频率;
Ω3、Ω4是调制信号的角频率;
mf3、mf4、是调频指数。
改变调制信号的振幅可以改变音质;改变载波信号的振幅可以改变音量。调制信号和载波信号的频率比会影响到声音的特性,当载波频率为调制频率的整数倍时,发出的声音就有音乐一样的悦耳动听旋律。MSP53C39内部的程序固化了67种乐器的参数(详见第三节)。 演奏每个音符的过程包括四个基本部分:上升、衰减、维持和恢复(见图1)。上升是一个音符的起始,衰减是对上升的撤消,维持是音符的持续,恢复是一个音符的结束。 2 TI公司FM乐谱文件数据格式 |
图1 演奏一个音符的过程 |
在FM格式文件中,数据字节是倒的(低位LSB在前,高位MSB在后)。TI公司定义的FM乐谱数据格式编写的音符/歌曲是按下面的形式组织的。
RBYTECHANNELNOTEDURATIONLOAD_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)四分之一个节拍。
除了一般的音符数据外,还有4个特殊的命令。
RBYTE#FF
结束命令告知处理器这是一首歌曲的结束,语音处理器的模式寄存器PCM和ENA1被禁止,然后关闭。一旦处理器发现这个命令就会忽略其余后面的音符,所以为了避免在结束时产生尖叫,应在两个通道的最后一个音符后加休止符来适当的延迟。
RBYTE#F0NEW_TIMBRECHINNEL
NEW_TIMBRE乐器名称,TI的FM格式中支持67种乐器。包括:PICCOLO(短笛),FLUTE(长笛),CLARINET(黑管)等。
CHINNEL 通道号,加载乐器于某一通道。
RBYTE#EANEW_TEMPO
NEW_TEMPO 设定新的速度,取值范围是0~127。
RBYTE #D0
RDATA LABEL
使用重复命令前应先定义一个标号(LABEL),重复命令的功能是将从标号到当前的数据重复演奏一次。
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内部固化好的,用户无需再定义。
如果直接按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 |
||||||||||
A1A1A1G1A1C2D2A2G2A2G2D2E2 |
||||||||||
ETHSIXTHSIXTHETHETHQTRETHETHSIXTH SIXTHETHETHHALF |
||||||||||
CHANNEL2 |
||||||||||
A1A1A1G1A1C2D2A2G2A2G2D2E2 |
||||||||||
ETH SIXTHSIXTHETHETHQTRETHETHSIXTHSIXTHETHETHHALF |
||||||||||
CHANNEL1 |
||||||||||
D2D2D2E2D2C2A1G2E2D2D2REST |
||||||||||
ETHQTRSIXTHSIXTHETHETHETHETH ETH ETH QTR+QTR+QTR WHOLE |
||||||||||
CHANNEL2 |
||||||||||
D2D2D2E2D2C2A1G2E2D2D2REST |
||||||||||
ETHQTRSIXTHSIXTH ETH ETHETH ETH ETH ETH QTR+QTR+QTR WHOLE |
||||||||||
;歌曲结束 |
||||||||||
................................... |
另外PC机用于和MSP53C39的接口源程序C39_ SPK.ASM限于篇幅未能列出,如感兴趣者请与作者联系,E-mail:dvssy@p8s.com。
1 孙树印. 掩码型语音芯片MSP53C39原理及应用. 力源电子工程,1999(3)
2 方建淳编著. 语音合成技术与单片机综合系统. 北京:航空航天大学出版社