【瑞昱RTL8763E】音频

1 音乐播放控制

1.1 播放列表更新

文件系统在sd卡中保存header.bin及name.bin两份文件用于歌曲名称的存储。为方便应用层进行歌曲显示及列表管理,可将这两个bin文件信息读取并保存到nor flash中。需要播放指定名称的歌曲时,将对于歌曲名称传递给文件系统接口,可直接完成歌曲的播放。

uint32_t audio_fs_get_header_list_size(void);

uint32_t audio_fs_get_name_list_size(void);

uint16_t audio_fs_read_header_list(uint32_t offset, uint8_t *readBuf, uint32_t readLen, uint32_t *len);

uint16_t audio_fs_read_name_list(uint32_t offset, uint8_t *readBuf, uint32_t readLen, uint32_t *len);

  • offset,文件偏移地址
  • readBuf,读取数据buffer
  • readLen,期望读取长度
  • len,实际读取长度

header.bin描述歌曲总数及各个歌曲名称在name.bin中的偏移及长度信息。header.bin格式如下。

|--------|----------|--------------------------|--------------------------|--------|
| Count | Reserved | Song info1 | Song info2 | ...... |
| 2bytes | 4bytes | Sizeof(T_SONG_NAME_INFO) | Sizeof(T_SONG_NAME_INFO) | |

typedef struct

{

uint32_t offset; //Start offset of the song name

uint16_t length; //Length of the song name

uint16_t plIndex; /*Play List Index, indicate which playlist the song belongs to.

uint8_t isDeleted : 1; /* flag of if song is deleted.1: deleted,0: not deleted */

uint8_t needToUnlink : 1; /* flag of if song need to unlink. */

uint8_t extension : 6;

uint16_t rsv; /* Reserve for future usage, should set to "0" */

} attribute((packed)) T_SONG_NAME_INFO;

name.bin保存各个歌曲的名称信息,结合song info中提供的offset和length部分,可以提取到各个歌曲的名称。

|--------------------|--------------------|--------|
| Song name 1 | Song name 2 | ...... |
| Name data(Unicode) | Name data(Unicode) | |

1.2音乐播放控制

T_APP_AUDIO_FS_ERROR app_audio_fs_interface_play_by_name(uint8_t *file_name, uint16_t length)

void app_mmi_handle_action(uint8_t action)

case IO_MSG_MMI:

{

uint8_t action = p_watch_msg->u.param;

app_mmi_handle_action(action);

}

break;

case IO_MSG_PLAY_BY_NAME:

{

if (app_db.usb_status == USB_PLUG_OUT)

{

T_SONG_NAME_INFO *play_name = (T_SONG_NAME_INFO *)p_watch_msg->u.param;

app_audio_fs_interface_play_by_name((uint8_t *)(MUSIC_NAME_BIN_ADDR + play_name->offset), play_name->length);

}

else

{

APP_PRINT_INFO0("ERROR: USB plug in, disallow play media now!");

}

}

break;

音频控制,包括播放、暂停、音量调节等,可通过MMI(Man Machine Interface)和app_audio_fs_interface_play_by_name完成。播放列表的维护由上层进行,切换歌曲时,上层只需要控制传入歌曲的名称信息即可。MMI命令所定义的action可参考T_MMI_ACTION,已实现的功能参考void app_mmi_handle_action(uint8_t action)。

本地播放模式与耳机播放模式下,上层共用MMI命令,底下会做区分。不同模式之间的切换也可通过MMI命令完成。

相关推荐
沟通QQ:2769988510 小时前
自研 | 基于YOLOv8改进的高精度红外小目标检测算法
物联网
Bona Sun11 小时前
单片机手搓掌上游戏机(二十)—pico运行doom之编译环境
c语言·c++·单片机·游戏机
音视频牛哥12 小时前
AI时代底层技术链:GPU、云原生与大模型的协同进化全解析
大数据·云原生·kubernetes·音视频·transformer·gpu算力·云原生cloud native
梯度下降不了班12 小时前
【mmodel/xDit】Cross-Attention 深度解析:文生图/文生视频的核心桥梁
人工智能·深度学习·ai作画·stable diffusion·音视频·transformer
偶像你挑的噻14 小时前
16-Linux驱动开发-多核通信中的并发控制
linux·驱动开发·stm32·嵌入式硬件
御控工业物联网14 小时前
码垛机数据采集物联网解决方案:驱动智能制造的“数字引擎”
物联网·边缘计算·数据采集·mqtt协议·工业智能网关·plc远程调试
编码追梦人15 小时前
基于 ESP32 的多人无线答题竞赛系统设计与实现
单片机·嵌入式硬件
yyycqupt15 小时前
蓝牙协议栈的学习(二)
stm32·单片机·嵌入式硬件·mcu·物联网·51单片机·iot
ACP广源盛1392462567315 小时前
GSV2125D@ACP#GSV6125#HDMI 2.0 转 DisplayPort 1.4 转换器(带嵌入式 MCU)
嵌入式硬件·计算机外设·音视频
赖small强16 小时前
【音视频开发】 ISP核心技术解析:3A算法(AE/AWB/AF)原理与实现
音视频·ae·af·awb·3a算法