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

音频数据

播放数据

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();
    });
  };
相关推荐
Van_captain6 分钟前
React Native for OpenHarmony Toast 轻提示组件:自动消失的操作反馈
javascript·开源·harmonyos
程序员哈基耄6 分钟前
小红书在线去水印工具:一键下载高清无水印图片与视频
音视频
Van_captain15 分钟前
React Native for OpenHarmony Modal 模态框组件:阻断式交互的设计与实现
javascript·开源·harmonyos
xkxnq15 分钟前
第一阶段:Vue 基础入门(第 14天)
前端·javascript·vue.js
前端小臻15 分钟前
列举react中类组件和函数组件常用到的方法
前端·javascript·react.js
研☆香21 分钟前
html css js文件开发规范
javascript·css·html
科技小E21 分钟前
EasyGBS算法算力平台重构服务业视频监控AI应用
人工智能·重构·音视频
赵民勇25 分钟前
JavaScript中的this详解(ES5/ES6)
前端·javascript·es6
wayne21427 分钟前
React Native 状态管理方案全梳理:Redux、Zustand、React Query 如何选
javascript·react native·react.js
我的golang之路果然有问题28 分钟前
Mac 上的 Vue 安装和配置记录
前端·javascript·vue.js·笔记·macos