咨询大佬们一个问题,我现在接的讯飞的ai接口,每次回答,会流式返回给我问题的语音数据,我现在想把这个Base64保存为本地的音频文件,我用了plus.io.requestFileSystem,现在有个bug,我直接保存这个Base64,保存后,我去播放这个音频文件,会显示格式不支持或已损坏,我如果把这个Base64转为ArrayBuffer,这时候就写不进去,文件大小是0,writer.onwritestart 这些方法都不会触发
{
"payload": {
"tts": {
"audio": "Base64 tts audio data",
"bit_depth": 16,
"channels": 1,
"encoding": "raw",
"frame_size": 0,
"sample_rate": 24000,
"seq": 1,
"status": 0
}
}
}
saveAudioToFile(binaryData) {
const that = this
plus.io.requestFileSystem(
plus.io.PRIVATE_DOC,
function (fs) {
fs.root.getFile(
'panal.wav',
{ create: true },
function (fileEntry) {
// 写文件-s
fileEntry.createWriter(
function (writer) {
writer.seek(writer.length)
writer.onwritestart = function (e) {
console.log('写入数据开始!')
}
writer.onwrite = function (e) {
console.log('写入数据成功!')
}
writer.onwriteend = function (e) {
console.log('写入数据完成!')
}
writer.onerror = function (e) {
console.log('写入数据失败!')
}
// const buffer = that.base64ToArrayBuffer(binaryData)
// console.log('---binaryData---', binaryData)
writer.write(binaryData)
},
function (e) {
console.error('创建文件写入对象失败: ' + e.message)
}
)
// 写文件-e
},
function (e) {
console.error('创建文件失败: ' + e.message)
}
)
},
function (e) {
alert('Request file system failed: ' + e.message)
}
)
},
base64ToArrayBuffer(base64) {
const binaryString = atob(base64)
const len = binaryString.length
const bytes = new Uint8Array(len)
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i)
}
return bytes.buffer
},
阿乐呀 (作者)
这个适用app吗,我用plus.io可以吗
2025-07-25 17:08
DCloud_UNI_OttoJi
回复 阿乐呀: 兼容的微信小程序,逻辑是一样的,你改改把,微信上播放音频成功了。你的这个这个格式叫 pcm ,主要参考我如何处理的 pcm 到 wav
2025-07-25 17:38
阿乐呀 (作者)
回复 DCloud_UNI_OttoJi: 谢,大哥,抱拳
2025-07-25 17:52