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);
};
改成单例模式,在播放前确保 context 处于 running 状态:
如果你是通过某个按钮触发的,确保用户点完按钮后 context 能顺利 resume。很多现代浏览器默认禁止自动播放音频,必须要有用户交互才能让 AudioContext 变成 running 状态。