单片机MIDI音乐播放原理详解及代码示例
创作时间:
2025-03-16 05:51:00
作者:
@小白创作中心
单片机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:方波周期与频率的对应关系示意图
热门推荐
文化中国行丨系统性保护让吐峪沟石窟重焕新生
普通人的10公里到底要跑多久?你想跑得更快更轻松吗?
民事案件律师咨询:免费咨询途径与收费标准全解析
2025,老片重映新趋势
钾离子过低过高都不好!钾离子的功效、10大高钾食物吃这些
王者荣耀:露娜与程咬金的日间战斗策略全解析
雷军造车迎来一场严峻考验
公安公务员体能要求详解:人民警察的体能考核标准与锻炼指南(2024版)
欠一身债,还不起又不想变“老赖”,个人能申请破产吗?这个可以有!
股票在高位区域下跌且缩量,这通常意味着什么?
全国政协委员段旭如:聚变能商用,时间表有提前可能性
银行存款利率全面进入"1"时代,息差再创新低
温柔的力量:如何在职场中展现亲和力
MapReduce基本介绍
PD-1/PD-L1:癌症免疫治疗的“刹车”与“油门”
香薰使用的正确方法与注意事项
顶底区间多震荡,期权策略增收益
探究明末刘六刘七起义的根源
产品科普 | “独一无二“的热电制冷器
《魔兽世界》80级猎人"强化追踪"技能测试报告
迟延履行仅两天,就得多给500万元吗?
王者荣耀三大更新:成吉思汗重做改名,铠无双限定曝光,赵云将获荣耀典藏
网购宠物猫生病,消费者能否索赔三倍?
电池测试工程师要掌握哪些知识
交强险赔偿范围和金额计算方法详解
山东16市经济数据出炉:2市下滑,1市疯跑,3市拉胯!
域名能用来干什么?为什么有人愿意花这么多钱买域名?
可乐是碱性的还是酸性的?
股市分红的时间节点是什么?熟悉股市分红的时间安排和变动
老人家卧床皮肤腐烂怎么办