0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

【RTT设计大赛】音乐播放器设计完成

RT_THREAD 2021-11-30 15:19 次阅读

无意中看大官方一个demo,关于audio功能的设计,现在学习一下。
从内部Flash读取WAV音频播放
主要的工作是安装播放器,通过按键控制播放和停止。

1.使能相关组件
需要使用到 Audio 和 dfs 相关的组件

poYBAGGlsHiARX7zAABgA-MjRW0971.pngpYYBAGGlsIqAIH6vAAAjkTyQ7T8342.png

开启 dfs 的时候会默认开启 posix 的使能,需要关闭 posix 的使能,否则终端的输入会有问题。

pYYBAGGlsKOAe6KSAAB-AwiKAJ8060.png

软件包安装
本次实验实现音乐播放功能,单击按键进行音乐切换。需要安装的软件包有 wavplayer/optparse/multibutton 三个软件包。其中 optparse 在 wavplayer 勾选后,自动选择。
进入软件包选择界面。

poYBAGGlsLSAF666AAD5Ap6kKNg960.pngpoYBAGGlsLyAcQ1mAADeuD1G2rM809.png

也可以通过`更多配置`查看所有软件包来选择个软件包:
wavplayer 软件包安装

pYYBAGGlsNOAMDDDAAEaGd2dXkk369.png

multibutton 软件包安装

pYYBAGGlsOSAHACkAABW-otjzFs259.png

demo编写
安装完 wavplayer/optparse/multibutton 三个软件包之后,就完成此次试验所需要的依赖的软件包。接下来开始编写demo。
下载 romfs.c(本文件包含了两个音频文件用于demo播放) 放置到 applications 下
romfs.c
下载 mnt.c 替换 applications 下原有的文件,从而挂载 romfs,主要代码在下方
mnt.c
#include #include "dfs_romfs.h"
int ab32_romfs_mount(void){
if (dfs_mount(RT_NULL, "/", "rom", 0, &(romfs_root)) == 0)
{
rt_kprintf("ROM file system initializated!\n");
}
else
{
rt_kprintf("ROM file system initializate failed!\n");
}

return 0;}INIT_ENV_EXPORT(ab32_romfs_mount);
然后在 applications 下新建 event_async.c 文件,复制以下代码
#include #include #include "board.h"#include #include "wavplayer.h"
#define BUTTON_PIN_0 rt_pin_get("PF.0")#define BUTTON_PIN_1 rt_pin_get("PF.1")
#define NUM_OF_SONGS (2u)
static struct button btn_0;static struct button btn_1;
static uint32_t cnt_0 = 0;static uint32_t cnt_1 = 0;
static char *table[2] ={
"wav_1.wav",
"wav_2.wav",};
void saia_channels_set(uint8_t channels);void saia_volume_set(rt_uint8_t volume);uint8_t saia_volume_get(void);
static uint8_t button_read_pin_0(void){
return rt_pin_read(BUTTON_PIN_0);}
static uint8_t button_read_pin_1(void){
return rt_pin_read(BUTTON_PIN_1);}
static void button_0_callback(void *btn){
uint32_t btn_event_val;

btn_event_val = get_button_event((struct button *)btn);

switch(btn_event_val)
{
case SINGLE_CLICK:
if (cnt_0 == 1) {
saia_volume_set(30);
}else if (cnt_0 == 2) {
saia_volume_set(50);
}else {
saia_volume_set(100);
cnt_0 = 0;
}
cnt_0++;
rt_kprintf("vol=%d\n", saia_volume_get());
rt_kprintf("button 0 single click\n");
break;

case DOUBLE_CLICK:
if (cnt_0 == 1) {
saia_channels_set(1);
}else {
saia_channels_set(2);
cnt_0 = 0;
}
cnt_0++;
rt_kprintf("button 0 double click\n");
break;

case LONG_PRESS_START:
rt_kprintf("button 0 long press start\n");
break;

case LONG_PRESS_HOLD:
rt_kprintf("button 0 long press hold\n");
break;
}}
static void button_1_callback(void *btn){
uint32_t btn_event_val;

btn_event_val = get_button_event((struct button *)btn);

switch(btn_event_val)
{
case SINGLE_CLICK:
wavplayer_play(table[(cnt_1++) % NUM_OF_SONGS]);
rt_kprintf("button 1 single click\n");
break;

case DOUBLE_CLICK:
rt_kprintf("button 1 double click\n");
break;

case LONG_PRESS_START:
rt_kprintf("button 1 long press start\n");
break;

case LONG_PRESS_HOLD:
rt_kprintf("button 1 long press hold\n");
break;
}}
static void btn_thread_entry(void* p){
while(1)
{
/* 5ms */
rt_thread_delay(RT_TICK_PER_SECOND/200);
button_ticks();
}}
static int multi_button_test(void){
rt_thread_t thread = RT_NULL;

/* Create background ticks thread */
thread = rt_thread_create("btn", btn_thread_entry, RT_NULL, 1024, 10, 10);
if(thread == RT_NULL)
{
return RT_ERROR;
}
rt_thread_startup(thread);

/* low level drive */
rt_pin_mode (BUTTON_PIN_0, PIN_MODE_INPUT_PULLUP);
button_init (&btn_0, button_read_pin_0, PIN_LOW);
button_attach(&btn_0, SINGLE_CLICK, button_0_callback);
button_attach(&btn_0, DOUBLE_CLICK, button_0_callback);
button_attach(&btn_0, LONG_PRESS_START, button_0_callback);
button_attach(&btn_0, LONG_PRESS_HOLD, button_0_callback);
button_start (&btn_0);

rt_pin_mode (BUTTON_PIN_1, PIN_MODE_INPUT_PULLUP);
button_init (&btn_1, button_read_pin_1, PIN_LOW);
button_attach(&btn_1, SINGLE_CLICK, button_1_callback);
button_attach(&btn_1, DOUBLE_CLICK, button_1_callback);
button_attach(&btn_1, LONG_PRESS_START, button_1_callback);
button_attach(&btn_1, LONG_PRESS_HOLD, button_1_callback);
button_start (&btn_1);

return RT_EOK;}INIT_APP_EXPORT(multi_button_test);
程序下载
demo编写完成后,单击编译按钮开始编译,编译成功后下载编译后生成的.dcf固件到芯片
双击打开 Downloader

poYBAGGlsP6AGRjDAAMH157mP-I474.png

下载成功后会在串口界面打印"Hello World", 并会有led灯闪烁

pYYBAGGlsRSAHhcOAAgHXsnHPt8509.png

思考:在这个demo学习过程中,发现了这样几个问题,一些函数看不懂,不知道参数代表的是什么意思。
对于需要配置什么也不是很明白,应该是对thread还不是很明白,不知道哪里有相关的资料可以学习下。
还有就是安装的这些软件包是如何开发的。
因为电脑比较卡,图片使用的是原demo的。实际工程已经测试完。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 音乐播放器
    +关注

    关注

    0

    文章

    67

    浏览量

    15656
收藏 人收藏

    评论

    相关推荐

    HarmonyOS开发案例:【音乐播放器

    使用ArkTS语言实现了一个简易的音乐播放器应用
    的头像 发表于 04-23 15:44 101次阅读
    HarmonyOS开发案例:【<b class='flag-5'>音乐</b><b class='flag-5'>播放器</b>】

    用STM32F105的USB做了一个读U盘MP3的播放器,为什么听到的音乐播放速度很快?

    最近用STM32F105的USB做了一个读U盘MP3的播放器,使用I2S2_DMA输出音频数据,再使用TAS5711数字功放进行输出声音。读出文件的采样为44.1khz, I2S也设置为此采样率。不知为何,听到的音乐播放速度很快
    发表于 04-02 06:52

    车载播放器怎么选择格式

    :MP3是目前最常见和广泛支持的音频格式之一。它可以提供良好的音质,并且具有较小的文件大小。由于大多数音乐都是以MP3格式存储在设备中的,所以选择支持MP3格式的车载播放器是首选。 AAC:AAC是一种高级音频编码格式,也是用于音频传输和
    的头像 发表于 01-05 16:36 572次阅读

    基于FPGA的音频播放器设计

    主要是音频播放器设计不太会,想问各位大神怎么样可以实现用verilog语言实现音频播放,通过串口输出
    发表于 01-03 13:54

    Arduino做个触摸屏音乐播放器使用什么解码模块支持格式多?

    Arduino做个触摸屏音乐播放器使用什么解码模块支持格式多
    发表于 11-10 07:10

    基于51单片机音乐喷泉设计频谱彩灯音乐播放器源代码分享

    基于51单片机音乐喷泉设计频谱彩灯音乐播放器源代码
    发表于 09-26 07:16

    基于RTT-LVGL的音乐播放器设计案例

    此次项目主要是基于瑞萨HMI board 开发板实现音乐播放器功能,主要可以实现sd卡wav 文件扫描,音乐播放,音量调节、上一曲、下一曲音乐
    的头像 发表于 09-18 11:07 1209次阅读
    基于<b class='flag-5'>RTT</b>-LVGL的<b class='flag-5'>音乐</b><b class='flag-5'>播放器</b>设计案例

    【FireBeetle 2 ESP32-S3开发板测评】MIDI音乐播放器

    本片我们使用PWM输出不同频率占空比的信号来驱动喇叭,实现MIDI音乐播放器的Demo。
    的头像 发表于 07-23 09:01 2420次阅读
    【FireBeetle 2 ESP32-S3开发板测评】MIDI<b class='flag-5'>音乐</b><b class='flag-5'>播放器</b>

    【FireBeetle 2 ESP32-S3开发板测评】MIDI音乐播放器

    播放器
    jf_1137202360
    发布于 :2023年07月22日 23:30:44

    FTP音乐流媒体服务WIZMP3播放器

    电子发烧友网站提供《FTP音乐流媒体服务WIZMP3播放器.zip》资料免费下载
    发表于 07-10 10:26 0次下载
    FTP<b class='flag-5'>音乐</b>流媒体服务WIZMP3<b class='flag-5'>播放器</b>

    神秘博士TARDIS音乐播放器开源分享

    电子发烧友网站提供《神秘博士TARDIS音乐播放器开源分享.zip》资料免费下载
    发表于 06-19 15:03 0次下载
    神秘博士TARDIS<b class='flag-5'>音乐</b><b class='flag-5'>播放器</b>开源分享

    QT音乐播放器MusicPlayer#QT界面

    播放器
    暴风雨中的白杨
    发布于 :2023年06月13日 10:29:12

    MP3播放器,音质还是非常好的。#音乐播放器 #听音乐 #抖音小助手

    播放器
    学习电子知识
    发布于 :2023年05月31日 20:48:35

    【正点原子STM32战舰V4开发板体验】第三弹,完善带屏音乐播放器案例

    播放器界面 将原来的音乐播放界面删除掉,重新画一个界面: 这个button绑定一个点击事件,点击事件里是当按钮按下时判断当前状态,进行状态切换,如果是播放状态慢开启音频
    发表于 05-21 21:24

    DVD播放器骚扰功率整改

    摘要 : 此DVD播放器需要做CCC认证,需要满足GB13837-2012《声音和电视广播接收机及有关设备 无线电骚扰特性 限值和测量方法》国家标准。 关键词:DVD播放器;CCC认证;骚扰功率整改
    发表于 05-12 09:24