You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JavaScript从振幅数组播放音频(类似Python的sounddevice)

在浏览器中用JavaScript从振幅数组播放音频

你可以通过浏览器的Web Audio API实现从振幅数组生成并播放音频,和你Python中用sounddevice的逻辑对应,以下是完整示例:

// 初始化音频上下文(处理浏览器兼容性)
const audioContext = new (window.AudioContext || window.webkitAudioContext)();

// 生成随机振幅数组(对应Python里的np.random.uniform(-1,1,348207))
const sampleCount = 348207;
const waveform = new Float32Array(sampleCount);
for (let i = 0; i < sampleCount; i++) {
  waveform[i] = Math.random() * 2 - 1; // 生成-1到1之间的随机浮点值
}

// 创建音频缓冲区,设置采样率为44100(和Python的samplerate参数一致)
const audioBuffer = audioContext.createBuffer(1, sampleCount, 44100);
// 将振幅数据写入缓冲区的第0声道(单声道)
audioBuffer.copyToChannel(waveform, 0);

// 创建缓冲区播放节点并连接到扬声器
const sourceNode = audioContext.createBufferSource();
sourceNode.buffer = audioBuffer;
sourceNode.connect(audioContext.destination);

// 开始播放
sourceNode.start();

// 可选:监听播放结束事件
sourceNode.addEventListener('ended', () => {
  console.log('音频播放完成');
});

关键细节说明

  • AudioContext限制:浏览器出于安全和用户体验考虑,要求AudioContext必须在用户交互(如按钮点击、触摸)后才能初始化或恢复,所以如果需要页面加载后自动播放,需要绑定一个用户触发的事件(比如点击按钮)来执行上述代码。
  • 数据格式要求:振幅数据必须是Float32Array类型,且取值范围必须在[-1, 1]之间,超出范围的数值会被自动截断。
  • 多声道支持:如果需要处理立体声,只需要在createBuffer时将第一个参数改为2,并分别写入两个声道的数据即可。

内容的提问来源于stack exchange,提问作者SpiralWire

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 04:01:19