开源小项目 - 基于无源蜂鸣器实现的音乐播放器

目录

一、音乐简谱相关知识

1、音符

2、音调

3、识读简谱

1. 找到简谱中C调的音符对应的蜂鸣器频率(确定音调对应的频率)

2. 确定蜂鸣器演奏一拍所需的时间(即确定一个音调对应的节拍数)

3.创建结构体确定一个音符所需的两个属性(音调频率、节拍数)

4.将《两只老虎》简谱的每个音符使用结构体数组编写好代码

5.创建静态歌单列表

二、音乐播放器实现过程

1、 无源蜂鸣器初始化配置

2、 蜂鸣器频率、占空比、使能配置

3、 音乐播放器列表清单初始化

4、 音乐播放器初始化

5、 设计音乐播放器处理函数

6、 其他业务代码(暂停、播放、上一曲、下一曲、音量调节)

三、使用方法

1、初始化无源蜂鸣器

2、创建歌曲简谱

3、初始化音乐播放器

4、 创建定时器运行音乐播放器处理函数

5、 调用源码中的接口函数实现音乐播放器的功能

6、 测试代码

END


        该项目使用无源蜂鸣器实现静态音乐播放器,即需要用户手动添加歌曲节点,读者可自行扩展成动态节点,实现动态音乐播放器列表,主要实现功能如下:

  1. 支持歌曲的暂停与播放
  2. 支持上一首、下一首歌曲切换
  3. 支持自定义音乐播放模式:顺序播放、随机播放、单曲循环
  4. 支持自定义设定音乐音量大小(0-100)

        主要运用知识点:

  1. 定时器配置与使用
  2. PWM配置与使用
  3. C语言结构体、结构体嵌套、枚举使用
  4. C语言指针、一维数组、二维数组、指针数组使用
  5. C语言链表使用

        源码中支持的库函数清单如下:

void                    beep_init(void);                                /* 无源蜂鸣器初始化 */
void                    beep_handler(void);                             /* 蜂鸣器音乐播放处理函数 定时执行 */
void                    music_init(void);                               /* 播放器初始化 */
void                    music_pause_playback(void);                     /* 暂停播放 */
void                    music_resume_playback(void);                    /* 恢复播放 */
void                    music_set_volume(unsigned char volume);         /* 设置音量大小 */
unsigned char           music_get_volume(void);                         /* 获取音量大小 */
void                    music_set_mode(ENUM_MUSIC_MODE_TYPEDEF mode);   /* 设置播放模式 */
ENUM_MUSIC_MODE_TYPEDEF music_get_mode(void);                           /* 获取播放模式 */
void                    music_switch_previous(void);                    /* 播放上一首 */
void                    music_switch_next(void);                        /* 播放下一首 */

蜂鸣器(音乐播放器)驱动源码下载:无源蜂鸣器实现音乐播放器功能


一、音乐简谱相关知识

        简谱是一种用简单符号表示音乐音高和节奏的音乐记谱方法。关于简谱中的相关知识点统计如下:

        1. 音符:简谱中用不同形状的符号表示不同音高的音符。常见的音符有:CDEFGAB。它们分别代表了音阶中的不同音名。

        2. 节拍:节拍是音乐中的基本时间单位,用来划分音乐的节奏。在简谱中,节拍可以用不同的符号和线条表示,如四分音符、八分音符等。

        3. 拍号:简谱中的拍号用来表示每小节中的拍数,常见的拍号有2/43/44/4等。这些拍号告诉演奏者每小节有多少拍和每拍的时值。

        4. 调号:调号在简谱中用来表示音乐作品所采用的调性。调号可以影响乐谱中所有音符的音高,使其适应特定的音阶。

        5. 连线:在简谱中,如果需要表示音符的音长超过一个小节,可以使用连线将两个相同音符连接起来,延长音符的时值。

        6. 休止符:除了音符之外,简谱还包括用来表示休止的符号。休止符用来表示音乐中的停顿或静默。

1、音符

        在简谱中,用以表示音的高低及相互关系的基本符号,为七个阿拉伯数字:即1、2、3、4、5、6、7,唱作doremifasollasi,称为唱名。

图1  音符说明

注意:一个音符由这个音的音高和对应的时值组成。

        在简谱中,如果音符时值的长短用短横线“-”表示,就称为单纯音符。单纯音符除四分音符外,有以下两种形式:

1.  在基本音符右侧加记一条短横线

        表示增长原音符时值的一倍。这类加记在音符右侧、使音符时值增长的短横线,称为增时线。增时线越多,音符的时值越长。

2.  在基本音符下方加记一条短横线

        表示缩短原音符时值的一半。这类加记在音符下方、使音符时值缩短的短横线,称为减时线。减时线越多,音符的时值越短。

图2  单纯音符说明

        在简谱中,加记在单纯音符的右侧的,使音符时值增长的小圆点"·",称为附点。加记附点的音符称为附点音符,附点本身并无一定的长短,其长短由前面的单纯音符来决定。附点音符会增长原音符时值的一半,常用于四分音符和小于四分音符的各种音符之后。

图3  附点音符说明
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值