前端如何播放二进制音频数据

音频数据

播放数据

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();
    });
  };
相关推荐
Moment13 小时前
富文本编辑器在 AI 时代为什么这么受欢迎
前端·javascript·后端
爱敲代码的小鱼13 小时前
AJAX(异步交互的技术来实现从服务端中获取数据):
前端·javascript·ajax
iWZXQxBO15 小时前
运动控制卡 倒R角程序 G代码 halcon联合运动控制卡联合相机 运动控制卡内容
音视频
铅笔侠_小龙虾15 小时前
Flutter 实战: 计算器
开发语言·javascript·flutter
大模型玩家七七16 小时前
梯度累积真的省显存吗?它换走的是什么成本
java·javascript·数据库·人工智能·深度学习
2501_9447114316 小时前
JS 对象遍历全解析
开发语言·前端·javascript
发现一只大呆瓜17 小时前
虚拟列表:支持“向上加载”的历史消息(Vue 3 & React 双版本)
前端·javascript·面试
阔皮大师17 小时前
INote轻量文本编辑器
java·javascript·python·c#
lbb 小魔仙17 小时前
【HarmonyOS实战】React Native 表单实战:自定义 useReactHookForm 高性能验证
javascript·react native·react.js
_codemonster17 小时前
Vue的三种使用方式对比
前端·javascript·vue.js