当你使用百度语音合成 API 并接收到二进制音频数据时,可以通过几种方式在 UniApp 中播放这段音频。这通常涉及将二进制数据转换为可以在音频控件中播放的格式。以下是具体步骤和代码示例。
innerAudioContext
播放二进制数据在 UniApp 中,你可以通过将二进制音频数据转换为 Blob,对其进行 URL.createObjectURL,然后使用 <audio>
标签或者 innerAudioContext
控件进行播放。
URL.createObjectURL
创建可以在音频控件中使用的 URL 并播放以下是如何实现这一流程的示例代码:
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('你好,欢迎使用语音合成示例!');
cuid
,可以使用 UUID 或其它唯一标识符。audio/mp3
)。URL.createObjectURL
在某些环境中可能不被支持,确保在目标设备上可以正常使用。URL.createObjectURL
生成的 URL 后,应调用 URL.revokeObjectURL(audioUrl)
释放相应的内存。标签: 来源:
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。