Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Web音频API不一致无法解码音频数据异常_Javascript_Node.js_Audio_Web Audio Api - Fatal编程技术网

Javascript Web音频API不一致无法解码音频数据异常

Javascript Web音频API不一致无法解码音频数据异常,javascript,node.js,audio,web-audio-api,Javascript,Node.js,Audio,Web Audio Api,从昨天开始,我一直在浏览所有带有此错误的SO帖子,虽然我尝试了一些建议,但没有一个解决了问题。因为错误在不同类型的流之间是不一致的,所以很难找到根本原因。我希望我在这里分享我的问题,也许有人会看到一个模式或有一个解决方案 首先,本地托管的文件和web托管的流在HTML5audio标记中运行良好。看,我们可以假设路径是可以的 其次,我还注意到下面的代码在我最喜欢的互联网广播电台上的效果与预期一样,但我不想在为完全不同的目的开发应用程序时ping它们 托管在Node.js服务器的/Public文件

从昨天开始,我一直在浏览所有带有此错误的SO帖子,虽然我尝试了一些建议,但没有一个解决了问题。因为错误在不同类型的流之间是不一致的,所以很难找到根本原因。我希望我在这里分享我的问题,也许有人会看到一个模式或有一个解决方案

  • 首先,本地托管的文件和web托管的流在HTML5
    audio
    标记中运行良好。看,我们可以假设路径是可以的
  • 其次,我还注意到下面的代码在我最喜欢的互联网广播电台上的效果与预期一样,但我不想在为完全不同的目的开发应用程序时ping它们
  • 托管在Node.js服务器的
    /Public
    文件夹中的公共域MP3与以下代码一致返回错误:
    domeException:无法解码音频数据
我已经尝试将代码剥离到最低限度,以便使用来自网络的媒体复制问题。我目前正在开发最新的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对音频进行进一步处理


您的代码片段不完整。我不得不对它进行一些修改以使其运行

在调用
decodeAudioData
之前,放置一个
console.log(arrayBuffer)
。我得到一个空的
arrayBuffer
,因此
decodeAudioData
自然无法解码


我不知道为什么
arrayBuffer
是空的。

正如雷蒙德所说,arrayBuffer是空的。尝试在不使用选项的情况下使用fetch:
fetch(StreamURL.url)
。将内容类型设置为“audio/mp3”意味着您将发送一个mp3文件,而不是希望服务器返回一个。如果decodeAudioData可以返回更多有关其解码失败原因的信息,这不是很好吗?诸如“缓冲区为空”、“不知道如何解码此类型”、“格式错误的文件”之类的信息。至少你得到了一个可能出错的提示,而不仅仅是“失败”。好消息。。仍在尝试跟踪空缓冲区。