本帖最后由 小燕子神飞 于 2010-5-20 09:32 编辑
下表是我经过反复试验整理出来的,不是官方文档,不一定对哈!
整体格式:
速度+命令字+音阶+间隔+命令字+音阶+间隔+...+结束标志(3fh)
其中速度是一个字节,范围是0x00--0x1f,值越大播放速度越慢,控制字用来调节音量、选择音色、转换当前的基础音高和发出某个频率的声音。对于SPCE061A,可以同时播放6个通道的声音,所以上面的每个命令都有六种数据,对应6个通道,前2个通道是鼓点,后4个是乐器通道。当SPCE061A的解码器工作时,会顺序读取数据,遇到命令字执行命令,遇到间隔数据则延时相应的时间再读取以后的命令,直到遇到结束标志0x3f为止。
控制字格式:
30h--35h:调节通道音量,后接音量值,范围:00h--0fh,值越大声音越大
28h--2dh:选择音色,后接音色。
对于28h,29h,音色范围是 00h--13h(对应鼓点名称在后面)
对于2ah--2dh,音色范围是 00h--22h(对应乐器名称在后面)
20h--25h:转换音高,后面接当前的基本音高,范围是00h--04h,注意这个不是实际的发音频率,实际的发音频率等于这个值乘以12再加下面的音高。
例如从02h转到03h,那么以后发的音会提高一个八度。
音高:0xAB
A:选择通道,范围:8,9,a,b,c,d
B:选择音高,范围:1--c 表示12个音,相邻数字表示半音关系
七个基本音1234567的对应值:
1-1 2-3 3-5 4-6 5-8 6-a 7-c(3和4,1和7是半音关系)
如果是通道0或1(A=8,9),则B的值一般为1,因为鼓点没有音高。
间隔:0x00--0x1f,越大越慢,实验发现不能用多个间隔数据表示更长的延时。
====================================================
下面是音色表,名字是我随便起的。音乐盲~~~呵呵
通道2--6的音色表:
00h:中音---------铃
01h:钟声
02h:钢琴1
03h:低音---------钢琴
04h:低音---------钢琴1
05h:小提琴
06h:低音---------钢琴2
07h:颤音---------笛子
08h:低音---------铃
09h:高音颤声---钢琴
0ah:强颤声------钢琴1
0bh:钢琴2
0ch:低音---------钢琴2
0dh:钢琴3
0eh:振动钢琴1
0fh:钢琴4
10h:强振钢琴1
11h:弱振-弱颤音--钢琴1
12h:弱振-弱颤音--钢琴2
13h:振动钢琴2
14h:强振钢琴2
15h:强颤声------钢琴2
16h:强颤声------钢琴3
17h:高音----------钢琴
18h:高音----------钢琴
19h:高音----------钢琴
1ah:高音----------钢琴
1bh:高音----------钢琴
1ch:钢琴
1dh:高音----------钢琴
1eh,1fh,20h,21h,22h:笛子
=================================================
通道0,1的鼓点表:
00h:鼓
01h:鼓
02h:鼓
03h:镲
04h:小擦
05h:小擦
06h:鼓
07h:小擦
08h:镲
09h:小擦
0ah:镲
0bh:小擦
0ch:镲
0dh:镲
0eh:镲
0fh:镲
10h:鼓
11h:小擦
12h:鼓
13h:镲
如果不清楚可以到我博客看看,有篇**用一个具体的BIN文件解释了。我还有个软件可以播放BIN文件,也可以在博客中下载:[url=http://www.myrobot.21ic.org/]myrobot.21ic.org[/url] |