百度语音合成API返回的是二进制结果,怎么在UniApp中播放
作者:互联网
当你使用百度语音合成 API 并接收到二进制音频数据时,可以通过几种方式在 UniApp 中播放这段音频。这通常涉及将二进制数据转换为可以在音频控件中播放的格式。以下是具体步骤和代码示例。
1. 使用 UniApp 的 innerAudioContext
播放二进制数据
在 UniApp 中,你可以通过将二进制音频数据转换为 Blob,对其进行 URL.createObjectURL,然后使用 <audio>
标签或者 innerAudioContext
控件进行播放。
1.1 实现步骤
- 请求语音合成 API,并获取二进制音频数据
- 将二进制数据形成 Blob 对象
- 使用
URL.createObjectURL
创建可以在音频控件中使用的 URL 并播放
2. 示例代码
以下是如何实现这一流程的示例代码:
async function getAccessToken() {
const response = await uni.request({
url: 'https://aip.baidubce.com/oauth/2.0/token',
method: 'POST',
data: {
grant_type: 'client_credentials',
client_id: 'YOUR_API_KEY', // 替换为你的 Api Key
client_secret: 'YOUR_SECRET_KEY' // 替换为你的 Secret Key
}
});
return response.data.access_token;
}
async function textToSpeech(text) {
const accessToken = await getAccessToken();
// 发起语音合成请求
const response = await uni.request({
url: `https://tsn.baidu.com/text2audio?lan=zh&cuid=YOUR_CUID&tok=${accessToken}&ctp=1&tex=${encodeURIComponent(text)}`,
method: 'GET',
responseType: 'arraybuffer' // 获取二进制数据
});
// 如果返回的状态不是 200,打印错误信息
if (response.statusCode !== 200) {
console.error('语音合成请求失败', response);
return;
}
// 创建 Blob 对象并生成 URL
const audioBlob = new Blob([response.data], { type: 'audio/mp3' }); // 根据实际的返回类型调整
const audioUrl = URL.createObjectURL(audioBlob);
// 播放音频
const innerAudioContext = uni.createInnerAudioContext();
innerAudioContext.src = audioUrl;
innerAudioContext.autoplay = true;
innerAudioContext.onPlay(() => {
console.log('开始播放');
});
innerAudioContext.onError((res) => {
console.error(res.errMsg);
});
// 释放 URL 对象
innerAudioContext.onEnded(() => {
URL.revokeObjectURL(audioUrl);
});
}
// 使用实例
textToSpeech('你好,欢迎使用语音合成示例!');
JavaScript
重要注意事项
- CUID: 在请求中需要提供一个设备唯一标识符
cuid
,可以使用 UUID 或其它唯一标识符。 - 音频格式: 确保根据合成 API 的响应设置正确的 MIME 类型(如
audio/mp3
)。 - 兼容性: 由于
URL.createObjectURL
在某些环境中可能不被支持,确保在目标设备上可以正常使用。 - 释放内存: 使用完
URL.createObjectURL
生成的 URL 后,应调用URL.revokeObjectURL(audioUrl)
释放相应的内存。
标签: 来源: