音频数据

播放数据
javascript
const tryListen = async (row) => {
awakenPlay(row.sid).then((res) => { // 请求接口,拿到二进制音频数据
const binaryData = atob(res.data);
// 将二进制数据转换为 Uint8Array
const byteArray = new Uint8Array(binaryData.length);
for (let i = 0; i < binaryData.length; i++) {
byteArray[i] = binaryData.charCodeAt(i);
}
const offset = 42; // 跳过可能的头部数据(假设前 42 字节是 WAV 头部),否则播放开始处有杂音
// 将 Uint8Array 转换为 Int16Array
const pcmData = new Int16Array(byteArray.buffer, offset);
// 创建 AudioContext
const audioContext = new window.AudioContext();
// 创建 AudioBuffer
const audioBuffer = audioContext.createBuffer(1, pcmData.length, 16000); // 单声道,16000 Hz
const channelData = audioBuffer.getChannelData(0);
// 将 PCM 数据归一化到 [-1, 1] 范围
for (let i = 0; i < pcmData.length; i++) {
channelData[i] = pcmData[i] / 32768.0;
}
// 播放音频
const source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioContext.destination);
source.start();
});
};