【瑞昱RTL8763E】音频

embedded/2024/10/10 19:03:22/

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命令完成。


http://www.ppmy.cn/embedded/125496.html

相关文章

【Linux 】文件描述符fd、重定向、缓冲区(超详解)

目录 ​编辑 系统接口进行文件访问 open 接口介绍 文件描述符fd 重定向 缓冲区 1、缓冲区是什么? 2、为什么要有缓冲区? 3、怎么办? 我们先来复习一下,c语言对文件的操作: C默认会打开三个输入输出流&#xf…

区块链技术在金融行业的应用与未来发展趋势

区块链技术作为近年来金融科技中的核心创新,正在深刻影响全球金融行业的运行方式。香港作为国际金融中心,在区块链技术的应用与创新方面扮演了重要角色。本文将深入探讨区块链技术在金融行业中的应用,并展望其未来发展趋势。 #### 一、区块链…

运用MinIO技术服务器实现文件上传——在Linux系统上安装和启动(一)

# MinIO 单机版环境搭建详解 ## 1. 简介 随着大数据时代的到来,数据存储的需求日益增大,如何有效地存储和管理大规模的非结构化数据成为许多企业和开发者面临的挑战。MinIO 作为一个高性能、分布式对象存储系统,致力于为用户提供简单、快速…

Qt和c++面试集合

目录 Qt面试 什么是信号(Signal)和槽(Slot)? 什么是Meta-Object系统? 什么是Qt的MVC模式? 1. QT中connect函数的第五个参数是什么?有什么作用? 3. 在QT中&#xff…

实验室装修:一系列设计方案需考虑哪些因素?

实验室装修设计看似简单,但其实背后藏着无数细节与思考。一个成功的实验室不仅需要满足科研的需求,还要确保在安全、环保和未来扩展性等方面都有良好的规划。今天,我们就来聊聊,实验室装修设计方案究竟需要考虑哪些因素。 一、实验…

Day06-数据库服务存储引擎

Day-06-数据库存储引擎知识 1、数据库联合索引应用2、数据库索引扩展信息(扩展列信息说明)3、数据库索引应用总结4、数据库存储引擎概述5、数据库存储引擎种类6、数据库存储引擎特性(Innodb)Innodb vs MyISAM7、数据库存储引擎应用…

使用pandas和numpy进行数据理解与清晰

处理缺失值 可以使用dropna()方法删除包含空值的行或列,或者使用fillna()方法填充空值。例如,可以用均值、中位数或众数来填充空值,代码示例如下: import pandas as pd df pd.read_csv(property-data.csv) df.fillna(df.mean(),…

C语言二级考试上机题

1.表示关系x≥y≥z应使用C语言表达式() A)(x>y)&&(y>z)B)(x>y)AND(y>z)C)x>y>zD)(x>y)&(y>z) 2.C语言可执行程序的开始执行点是() A)程序中第一条可执行语言B)程序中第一个函数 C)程序中的main函数D)包含文件中的第一个函数 3.以下if语…