Javascript Web音频API不一致无法解码音频数据异常
从昨天开始,我一直在浏览所有带有此错误的SO帖子,虽然我尝试了一些建议,但没有一个解决了问题。因为错误在不同类型的流之间是不一致的,所以很难找到根本原因。我希望我在这里分享我的问题,也许有人会看到一个模式或有一个解决方案Javascript Web音频API不一致无法解码音频数据异常,javascript,node.js,audio,web-audio-api,Javascript,Node.js,Audio,Web Audio Api,从昨天开始,我一直在浏览所有带有此错误的SO帖子,虽然我尝试了一些建议,但没有一个解决了问题。因为错误在不同类型的流之间是不一致的,所以很难找到根本原因。我希望我在这里分享我的问题,也许有人会看到一个模式或有一个解决方案 首先,本地托管的文件和web托管的流在HTML5audio标记中运行良好。看,我们可以假设路径是可以的 其次,我还注意到下面的代码在我最喜欢的互联网广播电台上的效果与预期一样,但我不想在为完全不同的目的开发应用程序时ping它们 托管在Node.js服务器的/Public文件
- 首先,本地托管的文件和web托管的流在HTML5
标记中运行良好。看,我们可以假设路径是可以的audio
- 其次,我还注意到下面的代码在我最喜欢的互联网广播电台上的效果与预期一样,但我不想在为完全不同的目的开发应用程序时ping它们
- 托管在Node.js服务器的
文件夹中的公共域MP3与以下代码一致返回错误:/Public
domeException:无法解码音频数据
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对音频进行进一步处理
您的代码片段不完整。我不得不对它进行一些修改以使其运行 在调用
decodeAudioData
之前,放置一个console.log(arrayBuffer)
。我得到一个空的arrayBuffer
,因此decodeAudioData
自然无法解码
我不知道为什么
arrayBuffer
是空的。正如雷蒙德所说,arrayBuffer是空的。尝试在不使用选项的情况下使用fetch:fetch(StreamURL.url)
。将内容类型设置为“audio/mp3”意味着您将发送一个mp3文件,而不是希望服务器返回一个。如果decodeAudioData可以返回更多有关其解码失败原因的信息,这不是很好吗?诸如“缓冲区为空”、“不知道如何解码此类型”、“格式错误的文件”之类的信息。至少你得到了一个可能出错的提示,而不仅仅是“失败”。好消息。。仍在尝试跟踪空缓冲区。