MSP53C39 FM语音合成算法
2012-06-02

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乐谱数据格式编写的音符/歌曲是按下面的形式组织的。

RBYTECHANNELNOTEDURATIONLOAD_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#F0NEW_TIMBRECHINNEL

NEW_TIMBRE乐器名称,TI的FM格式中支持67种乐器。包括:PICCOLO(短笛),FLUTE(长笛),CLARINET(黑管)等。

CHINNEL 通道号,加载乐器于某一通道。

(3)改变速度命令

RBYTE#EANEW_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

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 方建淳编著. 语音合成技术与单片机综合系统. 北京:航空航天大学出版社

可能会用到的工具/仪表
相关文章
推荐文章
热门文章
章节目录
本站简介 | 意见建议 | 免责声明 | 版权声明 | 联系我们
CopyRight@2024-2039 嵌入式资源网
蜀ICP备2021025729号