如何播放本地MP3

Wi-Fi 设备、蜂窝设备、WuKongAI、开发板、TuyaOS 移植等


愚者千虑必有一得
Posts: 659

从sdcard里,把文件读出来,得到mp3的data、data_len,调用接口播放:tuya_speaker_service_tone_play_data(CHAR_T *id, INT_T format, CHAR_T *data, INT_T len); id可以填null,format选mp3

愚者千虑必有一得
Posts: 659

Re: 如何播放本地MP3

还有一个接口,也可以:OPERATE_RET tuya_speaker_service_tone_play(CONST CHAR_T *url);
参考这个文档:https://developer.tuya.com/cn/docs/cell ... 3%EF%BC%9A

Tianqin
Posts: 7

Re: 如何播放本地MP3

我是按照你给你方式,从sdcard里,把文件读出来,得到mp3的data、data_len,调用接口播放:tuya_speaker_service_tone_play_data(CHAR_T *id, INT_T format, CHAR_T *data, INT_T len); id可以填null,format选mp3,的确MP3可以播放了,但是播放一段就停止了,没有播完,是什么原因呢,是不是MP3文件有长度限制呢,我现在MP3文件大小是700多KB。

愚者千虑必有一得
Posts: 659

Re: 如何播放本地MP3

愚者千虑必有一得 2025年 Jun 24日 17:16

还有一个接口,也可以:OPERATE_RET tuya_speaker_service_tone_play(CONST CHAR_T *url);
参考这个文档:https://developer.tuya.com/cn/docs/cell ... 3%EF%BC%9A

用这个接口试试?

Tianqin
Posts: 7

Re: 如何播放本地MP3

谢谢,使用这个接口函数可以正常播放,如果我想内置多首MP3,按照顺序播完一首再播放下一首,这个要怎么做呢

Tianqin
Posts: 7

Re: 如何播放本地MP3

使用这种播放模式,我发现了一个问题,播放停止后,无法唤醒语音对话,要重新关机再开机才可以,似乎是哪里状态不对或者阻塞了。

愚者千虑必有一得
Posts: 659

Re: 如何播放本地MP3

Tianqin 2025年 Jul 7日 18:49

使用这种播放模式,我发现了一个问题,播放停止后,无法唤醒语音对话,要重新关机再开机才可以,似乎是哪里状态不对或者阻塞了。

有log吗?发一个完整的过来看一下

Tianqin
Posts: 7

Re: 如何播放本地MP3

我抓了两种状态的LOG,帮分析一下,一个LOG是配网之前可以播放MP3,配网成功后无法播放,按对话模式按键也无语音响应;另一个LOG是先配网,可以语音对话,接着播放MP3,就播放失败了。帮分析一下,谢谢。附上我写的播放MP3源码
#include <common/bk_include.h>
// #include "diskio.h"
#include "bk_posix.h"
#include "driver/sd_card_types.h"
#include "tkl_fs.h"
#include "tkl_memory.h"

const char mount_sd_point = "/sdcard";
#define MP3_1_FILE "2.mp3"
#define MP3_SIZE (3
1024*1024)
#define AI_MP3_PLAY_ID "mp3_play"

static void ai_sdcard_mount(void)
{
INT_T ret = 0;
ret = tkl_fs_mount(mount_sd_point, DEV_SDCARD);
TAL_PR_DEBUG("ai_sdcard_mount ret =----------------------------: %d", ret);
return;
}

static void ai_sdcard_umount(void)
{
tkl_fs_unmount(mount_sd_point);
}

static void ai_sdcard_mp3_play(void)
{
char fp[64] = {'\0'};
uint32_t len = 0;
BOOL_T ret = 0;
BOOL_T fs_exist = 0;
ai_sdcard_mount();

Code: Select all

	sprintf(fp, "%s/%s", mount_sd_point, MP3_1_FILE);
	TAL_PR_DEBUG("mount_sd_point path =----------------------------: %s", fp);

ret = tkl_fs_is_exist("/sdcard/", &fs_exist);

if(ret != 0)
{
		TAL_PR_DEBUG("fs_exist not = %d \n\n----------------------------", fs_exist);
}
else
{
	ret = tuya_speaker_service_tone_play("/sdcard/2.mp3");
		TAL_PR_DEBUG("tuya_speaker_service_tone_play ret =----------------------------: %d", ret);
}

}

void ai_toy_sd_audio_play(void)
{
// char *mp3_path = "1.mp3";

Code: Select all

bk_sd_card_init();
if(s_sd_open)
{
	s_sd_open = 0;
	if (tuya_speaker_service_tone_is_playing() ||(tuya_audio_player_get_status(TUYA_AUDIO_PLAYER_TYPE_MUSIC) == TUYA_PLAYER_STATE_PLAYING))
	{
		tuya_speaker_service_tone_stop();
	}
	ai_sdcard_umount();
}
else
{
	s_sd_open = 1;
	ai_sdcard_mp3_play();
}

}

Attachments
配网之前可以播放MP3,配网成功后无法播放,按对话模式按键也无语音响应LOG.txt
(87.08 KiB) Downloaded 2 times
配好网后先语音对话再播放MP3,MP3播放失败LOG.txt
(173.95 KiB) Downloaded 2 times
Post Reply