单片机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:方波周期与频率的对应关系示意图
热门推荐
立春吃春饼和萝卜,养生就这么简单!
2025春晚无障碍转播:让每个人都能“看见”和“听见”的文化盛宴
朱淑真《秋夜》:秋夜孤寂中的传世佳作
朱淑真《秋夜》:烛花频剪,梧桐月冷
一个家庭“富”不起来的4个原因,有一个就要警惕了
节能环保,从点滴做起:如何在日常生活中践行绿色生活
《唐探1990》:王宝强刘昊然再掀春节档高潮
美国学校德育分数的现状与影响
科学有效开展德育活动评价
深度报道:教育高质量发展,这门“课”如何上得更好?
从传统水银到智能额温:一文读懂宝宝体温测量
探究使用盐汽水泡普洱茶的奥秘
盐汽水和苏打水哪个好?一文详解两种饮品的区别与选择要点
真正的《兰亭序》没失传,就藏在北京故宫,郭沫若:这才是正版!
《兰亭序》赏析
辣子鸡丁:家常做法大揭秘,让你在家也能做川菜大师
学会做正宗的山东家常菜——辣子鸡(以山东传统做作的辣子鸡)
辣子鸡,吃货们的最爱!一口下去,欲罢不能
外资企业多形式捐赠抗疫物资,彰显社会责任
央视发布在华外企ESG行动报告,20家先锋企业入选
如何实现节俭生活:学会理性消费,过简约生活。
银行销售如何逆袭成高管?这位区域销售总监的经历给你答案
银行理财经理的十项全能秘籍
大寒来袭,这样预防冬季疾病
大寒不寒?当心后续冷空气!
大寒前夕现异常暖热,强冷空气将致气温“大跳水”
职场压力山大?用情绪价值拯救你的人际关系
情绪管理:有效沟通的关键
获取兑换码的8种途径:从线上互动到线下活动
大寒节气农田管理技巧揭秘