STM32学习100步之第三十二步——MIDI音乐程序

什么是MIDI音乐
MIDI音乐的产生原理
编写MIDI音乐
代码解读

什么是MIDI音乐

HIDI(Musical Instrument Digital Interface)乐器数字接口
是20世纪80年代初为解决电声乐器之间的通信问题而提出的。
MIDI是编曲界最为广泛的音乐标准格式,可称为“计算机能理解的乐谱”。
它用音符的数字控制信号来记录音乐。一首完整的MIDI音乐只有几十KB大,
而能包含数十条音乐轨道。几乎所有的现代音乐都是用MIDI加上音色库来制作合成的。MIDI传输的不是音乐信号,而是音符、控制参数等指令,它指示MIDI设备要做什么,怎么做,如演奏哪个音符,多大音量等、。它们被统一表示成MIDI消息。
传输时采用异步串行通信,标准通信波特率32.25×(1±0.01)Kbaud。

MIDI音乐的产生原理

MIDI音乐的产生的原理和上一节蜂鸣器发声的原理相同,都是让单片机控制蜂鸣器的端口产生高低变化的方波,来产生一定的频率周期,通过频率周期的改变发出不同音调的声音和改变周期的数量来改变声音的长短,把不同频率的声音组合在一起,就组成了声音的长短。

在这里插入图片描述

编写MIDI音乐

如果要编写某个MIDI音乐,我们需要找到该音乐的音乐简谱,把简谱上的每一个音符转换为相应的频率,再根据每一个音符的节拍,来控制该音符发出时间的长短,然后让单片机按照声音的顺序以此播放(依次输出高低电平,控制方波),如此便放出相应的MIDI音乐了。

相应程序的大致思路如下:
通常音符转换为的频率存放在数组中,以及该频率的音符执行时间的长短均放在数组中,二者相邻,然后对数组进行操作即可
利用双重循环:
第一个循环代表有多少个音符需要播放。
第二个循环代表该音符需要执行时间的长短

例子如下(出自洋桃电子)

uc16 music1[78]={ //音乐1的数据表(奇数是音调,偶数是长度)
330,750,
440,375,
494,375,
523,750,
587,375,
659,375,
587,750,
494,375,
392,375,
440,1500,
330,750,
440,375,
494,375,
523,750,
587,375,
659,375,
587,750,
494,375,
392,375,
784,1500,
659,750,
698,375,
784,375,
880,750,
784,375,
698,375,
659,750,
587,750,
659,750,
523,375,
494,375,
440,750,
440,375,
494,375,
523,750,
523,750,
494,750,
392,750,
440,3000
};

void MIDI_PLAY(void){ //MIDI音乐
	u16 i,e;
	for(i=0;i<39;i++){
		for(e=0;e

代码解读如下:

  • 该数组定义了39个音符,并且数组内部偶数项是对应音符的频率,紧跟频率后面的选择项便是该频率的声音持续的时间。因此第一个for循环是按照顺序播放不同频率的声音,第二个for循环内部是利用stm32延时函数先产生一个完整周期频率的矩形波(该矩形波高低电平各占周期时间的一半,占空比为50%),时间为该频率声音震动一次所需要的时间(即第二个for循环内部执行一次便是该频率声音振动一次所需时间),类似于PWM的调制(delay精准计时,未用定时器和专门的PWM模块),第二个for循环的执行条件music1[i×2]×music1[i×2+1]/1000,代表的意思是要求该频率振动一定时间一共振动的次数,如此以来,第二个for循环便是控制该频率声音持续的时间长短。

你可能感兴趣的:(STM32学习100步之第三十二步——MIDI音乐程序)