Web Audio API 播放音频时为什么没声音?
我在 React 里用 Web Audio API 加载并播放一个本地音频文件,控制台也没报错,但就是听不到声音,到底哪里出问题了?
我试过检查 audioContext 的状态是不是 suspended,也确认了 fetch 返回的数据没问题,但音频就是不响。是不是解码或者播放流程哪里漏了?
const playAudio = async () => {
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const response = await fetch('/audio/test.mp3');
const arrayBuffer = await response.arrayBuffer();
const audioBuffer = await audioContext.decodeAudioData(arrayBuffer);
const source = audioContext.createBufferSource();
source.buffer = audioBuffer;
source.connect(audioContext.destination);
source.start(0);
};
一般这样处理:在调用 start 之前,先检查并激活 AudioContext。如果它处于 suspended 状态,需要通过用户交互来解锁。这里给你改一下代码:
记得把播放逻辑绑定到某个用户交互事件里,比如按钮点击,不然浏览器可能会阻止自动播放。这东西调试起来真让人头疼,不过这样修改应该能解决问题了。
改成单例模式,在播放前确保 context 处于 running 状态:
如果你是通过某个按钮触发的,确保用户点完按钮后 context 能顺利 resume。很多现代浏览器默认禁止自动播放音频,必须要有用户交互才能让 AudioContext 变成 running 状态。