单片机MIDI音乐播放原理详解及代码示例
创作时间:
作者:
@小白创作中心
单片机MIDI音乐播放原理详解及代码示例
引用
CSDN
1.
https://blog.csdn.net/liwangsb2/article/details/145886941
本文将详细介绍如何在单片机中实现MIDI音乐播放功能,包括MIDI的基本概念、音符频率对照表、音乐数据编码方法以及播放核心代码的实现。
一、什么是MIDI?
MIDI(Musical Instrument Digital Interface)是电子乐器间的数字通信协议,在单片机中可通过以下要素模拟实现:
- 音符数字编码:用数字代替具体音高(如60代表中音C)
- 持续时间控制:通过定时器设定音符长度
- 多通道支持:通过PWM同时产生多个音调(需高级单片机)
二、C调音符频率对照表(完整版)
音符 | 低音组(Hz) | 中音组(Hz) | 高音组(Hz) |
|---|---|---|---|
1 | 262 (C4) | 523 (C5) | 1047 (C6) |
2 | 294 (D4) | 587 (D5) | 1175 (D6) |
3 | 330 (E4) | 659 (E5) | 1319 (E6) |
4 | 349 (F4) | 698 (F5) | 1397 (F6) |
5 | 392 (G4) | 784 (G5) | 1568 (G6) |
6 | 440 (A4) | 880 (A5) | 1760 (A6) |
7 | 494 (B4) | 988 (B5) | 1976 (B6) |
三、MIDI音乐播放实例
1. 音乐数据编码
// 数组结构:[频率, 持续时间(ms)]交替存储
u16 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
};
2. 播放核心代码解析
void MIDI_PLAY(void) {
u16 i, e;
for(i=0; i<39; i++) { // 遍历39个音符
// music1[i*2]:当前音符频率
// music1[i*2+1]:当前音符持续时间
for(e=0; e < (music1[i*2] * music1[i*2+1])/1000; e++) {
/* 方波生成:500000us(0.5秒)/频率 = 单个周期时长 */
GPIO_WriteBit(BUZZERPORT, BUZZER,(BitAction)(0)); // 输出低电平
delay_us(500000/music1[i*2]); // 半周期延时
GPIO_WriteBit(BUZZERPORT, BUZZER,(BitAction)(1)); // 输出高电平
delay_us(500000/music1[i*2]); // 另一半周期
}
}
}
3. 关键参数说明
频率计算:
500000/music1[i*2]
推导过程
周期T(μs)=1,000,000/频率 → 半周期=500,000/频率循环次数:
(频率×持续时间)/1000
确保总时长精确
例:440Hz音符播放500ms时:
循环次数=(440×500)/1000=220次
四、优化技巧
- 硬件定时器替代delay_us:使用PWM输出方波
- 中断控制:TIM_IT_Update中断切换电平
- 动态BPM调整:添加全局速度系数变量
float speed_ratio = 1.0; // 速度调节系数
delay_us((int)(500000/music1[i*2] * speed_ratio));
图1:无源蜂鸣器驱动电路原理图
图2:方波周期与频率的对应关系示意图
热门推荐
职场新人必修课:用成语提升沟通力
桂林绝美风光摄影打卡地推荐
德天瀑布自驾游全攻略:南宁出发,3天玩转中越边境
广西三大景点PK:涠洲岛、德天瀑布、桂林山水,你更爱哪一个?
吉地过年,吉祥如意—— 冰雪盛景点亮新春时光
最新公布!陕西重大考古发现
陕西20大景点全攻略:从兵马俑到华山,领略三秦大地的绝美风光
元德李后陵探秘:神秘越窑瓷器揭秘
北宋皇陵地宫:皇家陵寝的建筑艺术与丧葬文化
手机版本升级指南:从备份到适应全攻略
掌握PTE考试技巧,助你职场飞黄腾达!
千岛湖2天1晚:体验最刺激的水上运动!
千岛湖亲子游:两天一晚玩转最美湖泊!
涠洲岛:从“海上明珠”到全球可持续发展典范
涠洲岛旅游打卡:必去的五大景点和美食推荐!
涠洲岛南湾海洋运动公园:168元起体验帆船出海,30分钟玩转海上运动!
东京美食探险:从米其林到街边小吃的美食地图
演员徐娇劝阻男子餐厅抽烟被抢手机!无禁烟标=默许吗?
东京塔打卡,清水寺祈福:日本十日游攻略
古都奈良的文化遗产:见证日本首个首都的辉煌历史
钠离子电池能否颠覆电动车市场?
72V40Ah锂电池:续航真相大揭秘!
糖尿病病人吃铁皮石斛的功效与作用
微信传文件太慢?这些小妙招让你秒变高手!
微信文件传输助手,隐私安全大揭秘!
微信传大文件,这些妙招你get了吗?
天干物燥,恰碗蒸梨润润肺!三种蒸梨做法详解
怎样蒸梨治咳嗽效果好
西双版纳自驾游:这个冬天最火的旅行地!
西双版纳自驾游必打卡:野象谷、曼听公园、总佛寺