使用Howler.js+ReactJS播放音频报错求助:解码缓冲区类型未知
解决React中Howler.js在Firefox/Opera的音频解码错误
嘿,我来帮你搞定这个Howler.js的音频播放问题!你遇到的“传递给decodeAudioData的缓冲区包含未知内容类型”错误,大概率是音频文件路径不对或者代码里的小bug导致的,咱们一步步来修复:
1. 先修复条件判断的低级bug
你代码里的if ( salt.style.opacity = 1 )用了赋值运算符=,这会直接把opacity设为1,而不是做判断。正确的写法应该用全等运算符===,而且注意style.opacity返回的是字符串类型,所以要写成:
if (salt.style.opacity === '1') { sound.play(); console.log('Check'); }
2. 修正音频文件的路径(核心问题)
React项目里的静态资源路径规则很重要,这是导致解码错误的最常见原因:
方案一:用public目录存放音频文件
如果你用的是Create React App,把p.ogg和p.mp3放到public/assets/文件夹下,然后Howler的src要写成从根目录开始的路径(加斜杠):
const sound = new Howl({ src: ['/assets/p.ogg', '/assets/p.mp3'] });
方案二:通过import引入音频文件
把音频文件放在src目录下的assets文件夹里,先import再使用:
import oggAudio from './assets/p.ogg'; import mp3Audio from './assets/p.mp3'; function sound() { var salt = document.getElementById("salt"); const sound = new Howl({ src: [oggAudio, mp3Audio] }); // ... 后续代码 }
3. 添加错误监听排查问题
给Howler实例加上加载错误监听,能帮你更精准定位问题:
const sound = new Howl({ src: ['/assets/p.ogg', '/assets/p.mp3'], onloaderror: function(id, error) { console.error('音频加载失败:', error); } });
4. 注意浏览器的自动播放策略
现代浏览器(包括Firefox/Opera)要求音频播放必须由用户交互触发(比如点击按钮),所以确保你的sound()函数是绑定在用户点击、触摸等事件上的,而不是页面加载时自动执行。
按照上面的步骤调整后,应该就能解决解码错误的问题啦!
内容的提问来源于stack exchange,提问作者Alaa Zorkane
相关产品推荐
相关产品推荐

