音频上传问题
基于3.12.14版本的SDK,希望实现一个不经过mic处理,直接把已经录好的音频传到云服务的功能。
这个功能如何实现?
麻烦提供下思路。比如:通过ty_ai_proc_event_send把音频数据输入进去,或者直接通过mic把数据copy进去等等
谢谢。
基于3.12.14版本的SDK,希望实现一个不经过mic处理,直接把已经录好的音频传到云服务的功能。
这个功能如何实现?
麻烦提供下思路。比如:通过ty_ai_proc_event_send把音频数据输入进去,或者直接通过mic把数据copy进去等等
谢谢。
可以试试这个接口:
Code: Select all
ty_ai_proc_event_send(s_ai_toy->llm, AI_PROC_INTERRUPT_EVENT, NULL, 0); // 打断老的event
ty_ai_proc_event_send(s_ai_toy->llm, AI_PROC_ADUIO_EVENT, data, data_len); // 开启一个新的音频event,data是音频数据,data_len是音频数据长度
ty_ai_proc_event_send(s_ai_toy->llm, AI_PROC_FINSH_EVENT, NULL, 0); // 结束event
也想用这个接口,那ai的状态是不是得设置下呀
在发送之前,设置成:
ai_toy_state_update(s_ai_toy, AI_TOY_UPLOAD);
发送失败,设置成:
ai_toy_state_update(s_ai_toy, AI_TOY_IDLE);
我做了如下操作:
TAL_PR_DEBUG("[%s %d]----------------------upload",func, LINE);
ty_ai_proc_event_send(s_ai_toy->llm, AI_PROC_INTERRUPT_EVENT, NULL, 0);
ai_toy_state_update(s_ai_toy, AI_TOY_UPLOAD);
rt = ty_ai_proc_event_send(s_ai_toy->llm, AI_PROC_AUDIO_EVENT, media_src_network_conn_success_zh, sizeof(media_src_network_conn_success_zh));
rt |= ty_ai_proc_event_send(s_ai_toy->llm, AI_PROC_FINSH_EVENT, NULL, 0);
if (OPRT_OK != rt) {
TAL_PR_DEBUG("[%s %d]----------------------upload failed",func, LINE);
ai_toy_state_update(s_ai_toy, AI_TOY_IDLE);
if (rt == OPRT_NETWORK_ERROR) {
ty_ai_toy_alert(TOY_ALERT_TYPE_NETWORK_DISCONNECT, TRUE);
}
}
TAL_PR_DEBUG("[%s %d]----------------------upload end",func, LINE);
但是没有收到云端的回复,看了下log,收到的回复是空的
你的音频是啥格式?云端可能没识别出来。目前上传支持的格式是这样的。如果你开了opus编码就是opus,否则就是pcm。
Code: Select all
#if defined(ENABLE_APP_OPUS_ENCODER) && (ENABLE_APP_OPUS_ENCODER == 1)
TY_AI_CHAT_UPLOAD_PARA_T upload_para = {
.encoder = &g_tuya_ai_encoder_opus_ipc,
.info = {
.encode_type = AUDIO_CODEC_OPUS,
.sample_rate = 16000,
.channels = AUDIO_CHANNELS_MONO,
.bits_per_sample = 16,
},
.tts_cfg = {
.tts_overwrite = 1,
.bit_rate = 64000, // 64kbps
.sample_rate = 16000,
.format = "mp3",
},
};
#else
TY_AI_CHAT_UPLOAD_PARA_T upload_para = {
.encoder = NULL,
.info = {
.encode_type = AUDIO_CODEC_PCM,
.sample_rate = 16000,
.channels = AUDIO_CHANNELS_MONO,
.bits_per_sample = 16,
},
.tts_cfg = {
.tts_overwrite = 1,
.bit_rate = 64000, // 64kbps
.sample_rate = 16000,
.format = "mp3",
},
};
#endif
alert里面不是有好几个预警的语音?那些不可以?我找下这种格式的文件
我找了个opus格式的文件,按照上面要求做的音频,云也没有回应,附件是log
你好,请直接上传PCM文件里的数据,(提示音是mp3文件,opus是内部自动会根据pcm进行编码的)
pcm文件请自行找下,通过工具转成C数组或者通过文件
ENABLE_APP_OPUS_ENCODER这个宏是打开的,我找的opus的文件,通过工具转成了类似alert里面的代码,然后上传到云。
这样不行?
另:按照你的意思是我找pcm的文件,把这个宏ENABLE_APP_OPUS_ENCODER关闭,尝试它?