从昨天开始,我一直在浏览所有SO帖子中出现的错误,并且在尝试了一些建议的操作后,没有一个解决了该问题。由于该错误在各种类型的流中不一致,因此很难找到根本原因。我希望在这里分享我的问题,也许有人会看到一个模式或找到解决方案。
audio
标签内运行良好。看到我们可以假设路径可以。/public
文件夹中托管的公共域mp3始终返回错误:DOMException: Unable to decode audio data
我尝试使用来自WikiCommons hosted public domain file的媒体将代码缩减到复制问题所需的最低限度。我目前正在开发最新的Chrome 85.0.4183.102。
StreamURL ='https://upload.wikimedia.org/wikipedia/commons/transcoded/9/90/JesusWalkedThatLonesomeValley.ogg/JesusWalkedThatLonesomeValley.ogg.mp3',
const options = {
headers: new Headers({ 'content-type': 'audio/mp3' }),
mode: 'no-cors',
cache: 'default',
};
const getAudioData = () =>
fetch(StreamURL.url, options)
.then((response) => response.arrayBuffer())
.then((arrayBuffer) => audioCtx.decodeAudioData(arrayBuffer))
async function createAudioStream() {
try {
let playback = audioCtx.createBufferSource();
playback.buffer = await getAudioData();
playback.connect(audioCtx.destination);
playback.start(0);
} catch (err) {
console.error(err);
}
}
audioContainer.addEventListener('click', createAudioStream);
人们可以在开发人员控制台的“网络”标签中看到数据确实进入了浏览器,但是,它仍然返回解码错误。现在的错误使我无法使用Web Audio API对音频进行进一步的处理。
答案 0 :(得分:1)
您的代码段不完整。我必须对其进行一些修改才能使其运行。
在致电console.log(arrayBuffer)
之前放置decodeAudioData
。我得到一个空的arrayBuffer
,因此decodeAudioData
自然无法解码。
我不知道为什么arrayBuffer
为空。