音乐合成原理
(1). 音频产生原理
1. 要产生音频脉冲,只要算出某一音频的周期(1/频率),然后将此周期除以2即为半周期的时间。利用定时器计时这个半周期时间,每当计时到后就将输出脉冲的I/O反相,然后重复计时此半周期时间再对I/O反相,就可以在I/O引脚上得到此频率的脉冲。
2. 利用8051的内部定时器使其工作在计数器模式MODE1下,改变计数值TH0及TL0以产生不同频率。
3. 例如频率为523Hz,其周期T=1/523=1912us,因此只要令计数器计时956us/1us=956,在每次计数956次时将I/O反相,就可得到中音1(DO)(523Hz)。同理可以得到 DAO RE MI 等等
(2). 简谱的单片机实现
1. 每个音符使用一个字节,字节的高4位代表音符的高低,低4位代表音符的节拍。如果1拍为0.4秒,1/4拍就是0.1秒,只要设定延时时间就可以求得节拍的时间。假设1/4拍为1DELAY,则1拍应为4DELAY,依此类推。所以只要求得1/4拍的DELAY时间,其余的节拍就是它的倍数。下表为1/4和1/8节拍的时间设定。
曲调值 | DELAY(1/4拍) | 曲调值 | DELAY(1/8拍) |
调4/4 | 125毫秒 | 调4/4 | 62毫秒 |
调3/4 | 187毫秒 | 调3/4 | 94毫秒 |
调2/4 | 250毫秒 | 调2/4 | 125毫秒 |
2. 建立音乐的步骤:
A. 先建立音频表,建立时可不必把所有音频都建在表里,可以从音乐里最低的音频开始建立。
B. 再按音乐的简谱和节拍建立音符表。音符表的高4位为音符的音频高低,低4位为节拍数。
C. 可以用延时或中断的方式产生1/4节拍或1/8节拍时间间隔。
D. 程序中从音符表的开始处依次读取音符并翻译成音频和节拍数,直到音乐结束。