前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >全志XR系列 XRMCU如何播放xip中的音频?

全志XR系列 XRMCU如何播放xip中的音频?

作者头像
阿志小管家
发布2024-02-02 16:12:04
950
发布2024-02-02 16:12:04
举报

问题背景 有客户因为担心音频存放在flash中会因为没有烧录,导致播放异常,所以希望可以提供播放xip中的音频数据的方法。

问题分析 XRMCU允许使用raw_bin的方式烧录,确保烧录固件时音频也能下载到flash中,请参考(XR806如何添加本地音频到flash)[https://one.allwinnertech.com/#/faq/0/show]。 如果确定要播放xip中的数据,需要把计算出音频数据在flash中的实际地址。

解决步骤

  • 使用bin2hex或者HxD等工具把音频文件转变成c文件,并保存在xip中。
代码语言:javascript
复制
__xip_rodata    //保存在xip中
const unsigned char testmusic[39197] = {
	0x49, 0x44, 0x33, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x33, 0x54, 0x53,
	0x53, 0x45, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x4C, 0x41, 0x4D,
	0x45, 0x20, 0x33, 0x32, 0x62, 0x69, 0x74, 0x73, 0x20, 0x76, 0x65, 0x72,
	0x73, 0x69, 0x6F, 0x6E, 0x20, 0x33, 0x2E, 0x31, 0x30, 0x30, 0x2E, 0x31,
......
  • 计算音频数据在flash中的地址。 参照xip初始化platform_xip_init();可以知道app_xip.bin在flash中的位置是image_get_section_addr(IMAGE_APP_XIP_ID) + IMAGE_HEADER_SIZE static void platform_xip_init(void)
代码语言:javascript
复制
{
	uint32_t addr;
	addr = image_get_section_addr(IMAGE_APP_XIP_ID);    //通过ID获取app_xip.bin在flash中的地址
	if (addr == IMAGE_INVALID_ADDR) {
		FWK_NX_ERR("no xip section\n");
		return;
	}

	HAL_Xip_Init(PRJCONF_IMG_FLASH, addr + IMAGE_HEADER_SIZE);  //IMAGE_HEADER_SIZE为头码地址
}

可以得出音频数据在flash中的地址。

代码语言:javascript
复制
/*
__xip_start__指xip的入口地址,在appos.ld中定义,数值也在appos.ld中定义为0x400000。
(uint32_t)testmusic  - (uint32_t)__xip_start__也就是相对于xip入口的偏移量。
image_get_section_addr(IMAGE_APP_XIP_ID) + IMAGE_HEADER_SIZE就是app_xip.bin在flash中的实际地址,会被映射到0x400000
*/
uint32_t music_addr = ((uint32_t)testmusic  - (uint32_t)__xip_start__ + image_get_section_addr(IMAGE_APP_XIP_ID)+ IMAGE_HEADER_SIZE);
  • 把数值格式化为cedarx能识别的字符串。
代码语言:javascript
复制
char *song_addr = malloc(50);
sprintf(song_addr,"flash://0?addr=%u&length=%u",music_addr,sizeof(testmusic));
  • 播放音频
代码语言:javascript
复制
player_base  *mAwPlayer;
mAwPlayer = player_create();
mAwPlayer->play(mAwPlayer,song_addr);

原贴链接:https://bbs.aw-ol.com/topic/1056

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-02-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档