音频数据

播放数据
javascript">const tryListen = async (row) => {awakenPlay(row.sid).then((res) => { // 请求接口,拿到二进制音频数据const binaryData = atob(res.data);// 将二进制数据转换为 Uint8Arrayconst byteArray = new Uint8Array(binaryData.length);for (let i = 0; i < binaryData.length; i++) {byteArray[i] = binaryData.charCodeAt(i);}const offset = 42; // 跳过可能的头部数据(假设前 42 字节是 WAV 头部),否则播放开始处有杂音// 将 Uint8Array 转换为 Int16Arrayconst pcmData = new Int16Array(byteArray.buffer, offset);// 创建 AudioContextconst audioContext = new window.AudioContext();// 创建 AudioBufferconst audioBuffer = audioContext.createBuffer(1, pcmData.length, 16000); // 单声道,16000 Hzconst 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();});};