Page 1 of 1

T5 播放FLASH 的MP3如何单独调用哪些接口实现,不需要AI的情况下?

Posted: 2025年 Jul 7日 11:47
by 勇敢牛牛不怕代码难

我现在使用的是T5 3.12.12的开发包;
使用tuyaos_demo_ai_toy DEMO 下,我调用挂载FLASH 播放MP3 使用tuya_speaker_service_tone_play_loop接口没有问题;
但是tuyaos_demo_ai_toy包含很多不需要的东西,我现在想知道,如何只是播放FLASH 中MP3,需要调用哪些接口?
在这个过程我尝试其他的几个DEMO 调用tuya_speaker_service_tone_play_loop,播放都是失败的。


Re: T5 播放FLASH 的MP3如何单独调用哪些接口实现,不需要AI的情况下?

Posted: 2025年 Jul 7日 13:44
by 愚者千虑必有一得

参考这个帖子:https://www.tuyaos.com/viewtopic.php?t=4813。audio player和ai没强关联关系,相关的初始化还是要做的。

Code: Select all

    TUYA_SPEAKER_SERVICE_CONFIG_S player_cfg = {0};
    TUYA_CALL_ERR_GOTO(tuya_speaker_service_init(&player_cfg), __error);
    TUYA_CALL_ERR_GOTO(tuya_audio_player_set_event_callback(_event_play_status_cb, ai_toy), __error);

Re: T5 播放FLASH 的MP3如何单独调用哪些接口实现,不需要AI的情况下?

Posted: 2025年 Jul 7日 13:53
by 勇敢牛牛不怕代码难

我的意思是挂载flash之后,文件系统成功之后,使用接口播放,是没有问题的,那个链接我早看过了,他也是基于tuyaos_demo_ai_toy DEMO下去增加接口播放就可以了;这个是正常的;

从FLASH播放MP3需要哪些初始化;文件挂载和播放接口我都没有问题,我的本意想了解,播放还需要哪些前置的初始化


Re: T5 播放FLASH 的MP3如何单独调用哪些接口实现,不需要AI的情况下?

Posted: 2025年 Jul 7日 15:37
by 愚者千虑必有一得

没了,播放只依赖:
1,外部flash驱动
2,文件系统
3,播放器

如果你都好了,还有问题的话,请贴上log


Re: T5 播放FLASH 的MP3如何单独调用哪些接口实现,不需要AI的情况下?

Posted: 2025年 Jul 7日 20:02
by 勇敢牛牛不怕代码难

以下是我的日志和代码实现方式

Code: Select all

[01-01 00:00:01 ty D][7010][tuya_ai_chat_protoc
[19:59:51.896]收←◆ol.c:400] tuya ai proto init...
[01-01 00:00:01 ty D][7010][mqc_app.c:112] mq_pro:9000 cnt:3
[01-01 00:00:01 ty D][7495][tal_thread.c:224] Thread:MusicPlayerThre Exec Start. Set to Running Stat 0x60749588
[01-01 00:00:01 ty D][75a9][tal_thread.c:224] Thread:ai_client Exec Start. Set to Running Stat 0x6075a9e8
[01-01 00:00:01 ty I][7010][tal_thread.c:200] thread_create name:ai_client,stackDepth:4096,totalstackDepth:138240,priority:4
[01-01 00:00:01 ty N][7010][tuya_ai_client.c:462] ai client init success
[01-01 00:00:01 ty D][7010][tuya_app_main.c:512] Speaker service init result: 0
[01-01 00:00:01 ty D][7010][tuya_app_main.c:516] Mounting filesystem...
mkfs on qspi flash, total size: 16777216, block size: 4096
[qflash_init] bk_qspi_flash_read_id [ret=1840ef]!
[qflash_init] qspi flash, capacity: 16MB, block: 4KB, page: 256
fs flash conf:
	read_size: 256
	prog_size: 256
	block_size: 4096
	block_count: 4096
	cache_size: 4096
	lookahead_size: 4096
	block_cycles: 500
lfs_flashbd_createcfg(0x2802b668 {.context=0x28020b70, .read=0x220bd6d, .prog=0x220bddd, .erase=0x220be4d, .sync=0x220be85, .read_size=256, .prog_size=256, .block_size=4096, .block_count=4096}, 0x2031794)
mount littlefs / ok
[01-01 00:00:01 ty D][7010][tuya_app_main.c:518] Filesystem mount result: 0
[01-01 00:00:01 ty D][7093][tuya_simple_player.c:313] [1-0x28017930] TUYA_SIMPLE_CMD_PLAY, state:0, /15.mp3
[01-01 00:00:01 ty D][7092][tuya_adecode.c:327] [0x607090c0-ToneDecoder] TUYA_ADECODE_CMD_RESET, state:0
[01-01 00:00:01 ty D][7090][tuya_amix.c:101] [0x60708f68] 1
[01-01 00:00:01 ty D][7090][tuya_amix.c:112] reset track:0x607091a0, success
[01-01 00:00:01 ty D][7090][tuya_amix.c:170] on cmd result:0
[01-01 00:00:01 ty D][7092][tuya_aqueue.c:276] send finish. ret:0
[01-01 00:00:01 ty D][7092][tuya_adecode.c:550] on cmd [0], result:0
[01-01 00:00:01 ty D][7093][tuya_aqueue.c:276] send finish. ret:0
tkl_fs_is_exist path:/15.mp3 exist 
[01-01 00:00:01 ty D][7093][tuya_astream.c:459] use the stream type:1
tkl_fopen file success, path:/15.mp3 fd = 1
[01-01 00:00:01 ty D][7092][tuya_adecode.c:343] [0x607090c0-ToneDecoder] TUYA_ADECODE_CMD_SET_SOURCE, state:0, codec type:1, channel:0, rate:0, bits:0
[01-01 00:00:01 ty D][7092][tuya_adecode.c:550] on cmd [1], result:0
[01-01 00:00:01 ty D][7093][tuya_aqueue.c:276] send finish. ret:0
[01-01 00:00:01 ty D][7093][tuya_simple_player.c:527] on cmd [0] result:0
[01-01 00:00:01 ty D][7010][tuya_aqueue.c:276] send finish. ret:0
[01-01 00:00:01 ty D][7010][tuya_simple_player.c:156] __simple_play exit
swimming tone play = 0	
[01-01 00:00:01 ty D][7010][tal_thread.c:265] Del Thrd:tuya_app_main
[01-01 00:00:01 ty D][7093][tuya_simple_player.c:410] [1-0x28017930] TUYA_SIMPLE_CMD_RESUME, state:3
[01-01 00:00:01 ty D][7092][tuya_adecode.c:379] [0x607090c0-ToneDecoder] TUYA_ADECODE_CMD_START, state:1
[01-01 00:00:01 ty D][7092][tuya_adecode.c:550] on cmd [2], result:0
[01-01 00:00:01 ty D][7090][tuya_amix.c:101] [0x60708f68] 0
[01-01 00:00:01 ty D][7090][tuya_amix.c:106] wake up thread to work
[01-01 00:00:01 ty D][7090][tuya_amix.c:170] on cmd result:0
[01-01 00:00:01 ty D][7093][tuya_aqueue.c:276] send finish. ret:0
[01-01 00:00:01 ty D][7093][tuya_speaker_service.c:1130] __tuya_player_event_handler: 0x6072a2a4 src 1, event [2] TUYA_PLAYER_EVENT_STARTED:Event play start success, userdata 0x280163e4, url /15.mp3

[01-01 00:00:01 ty D][7093][tuya_simple_player.c:527] on cmd [3] result:0
[01-01 00:00:01 ty D][7010][tal_thread.c:240] Thread:tuya_app_main Exec Finish. Set to Del Stat
[01-01 00:00:01 ty D][7010][tal_thread.c:95] del list not empty...deleting 0x6070007c, next 0x60700020
[01-01 00:00:01 ty D][7010][tal_thread.c:103] Final Free Thread:tuya_app_main, is_self:1
[01-01 00:00:01 ty D][7010][tal_thread.c:107] delay to delete thread self
[01-01 00:00:01 ty D][7010][tal_thread.c:119] finally delete thread self
[01-01 00:00:01 ty D][7010][tal_thread.c:73] real delete thread:0x607010d0
[01-01 00:00:01 ty D][7092][tuya_afilter_remap.c:262] the format:3
[01-01 00:00:01 ty D][7092][tuya_afilter_resample.c:150] map required, 2->1
[01-01 00:00:01 ty D][7092][tuya_afilter_resample.c:179] resampler:rate 16000 -> 16000, format 3 -> 3, channels 2 -> 1
[01-01 00:00:01 ty D][7092][tuya_afilter_resample.c:270] fit buf success, 1152
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:01 ty D][708e][tuya_ai_battery.c:242] force upload battery capacity, cap: 0
[01-01 00:00:01 ty N][7038][tuya_ai_battery.c:179] --- aaa tal sw timer callback
[01-01 00:00:01 ty D][7038][tuya_ai_battery.c:522] battery low = 1, charging = 1
[01-01 00:00:01 ty N][7038][tuya_ai_battery.c:525] low battery alert
[01-01 00:00:01 ty N][7038][tuya_ai_battery.c:506] __tuya_ai_toy_battery_callback, in charge
[01-01 00:00:01 ty D][7038][smart_frame.c:4344] dp filtered, dev no act
[01-01 00:00:01 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23
[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23

[19:59:52.840]收←◆[01-01 00:00:02 ty E][7090][tuya_aplayback.c:156] tkl_ao_put_frame failed, ret=-23

以下是我的代码

Code: Select all

    // 1. 初始化扬声器服务
    TUYA_SPEAKER_SERVICE_CONFIG_S player_cfg = {0};
    rt = tuya_speaker_service_init(&player_cfg);
    TAL_PR_DEBUG("Speaker service init result: %d", rt);


// 2. 挂载FLASH文件系统
TAL_PR_DEBUG("Mounting filesystem...");
rt = tkl_fs_mount("/", DEV_EXT_FLASH);
TAL_PR_DEBUG("Filesystem mount result: %d", rt);   
// 5. 播放本地MP3
rt = tuya_speaker_service_tone_play_loop("/15.mp3",NULL);
bk_printf("swimming tone play = %d	\r\n",rt);