Javascript createMediaElementSource()的奇怪之处

Javascript createMediaElementSource()的奇怪之处,javascript,audio,html5-audio,web-audio-api,Javascript,Audio,Html5 Audio,Web Audio Api,我正在构建一个音频程序,遇到了.createMediaElementSource方法的一个绊脚石。我能够解决这个问题,但我不太清楚为什么这个解决方案有效 在我的HTML中,我创建了一个音频播放器:晚了几个月,但万一其他人无意中发现了这一点并想要一个答案: 这种行为在以下章节中描述: createMediaElementSource方法 在给定HTMLMediaElement的情况下创建MediaElementAudioSourceNode调用此方法的结果是,来自HTMLMedia元素的音频播放将

我正在构建一个音频程序,遇到了.createMediaElementSource方法的一个绊脚石。我能够解决这个问题,但我不太清楚为什么这个解决方案有效


在我的HTML中,我创建了一个音频播放器:
晚了几个月,但万一其他人无意中发现了这一点并想要一个答案:

这种行为在以下章节中描述:

createMediaElementSource方法 在给定HTMLMediaElement的情况下创建MediaElementAudioSourceNode调用此方法的结果是,来自HTMLMedia元素的音频播放将被重新路由到AudioContext的处理图中。

我的。由于音频元素的输出现在被路由到新创建的
MediaElementAudioSourceNode
实例(而不是原始目标,通常是您的扬声器),因此您需要将实例的输出路由回原始目标:

var audio = document.getElementById('myAudio');
var ctx = new AudioContext();

var src = ctx.createMediaElementSource(audio);
src.connect(ctx.destination); // connect the output of the source to your speakers
audio.play();

添加
[0]
时它起作用的原因是
document.getElementById
不返回数组或定义键为“0”的元素。因此,您可能已经编写了
ctx.createMediaElementSource(未定义)
,它不会从
#myAudio
元素重新路由音频。

晚了几个月,但万一其他人发现了这一点并想要得到答案:

这种行为在以下章节中描述:

createMediaElementSource方法 在给定HTMLMediaElement的情况下创建MediaElementAudioSourceNode调用此方法的结果是,来自HTMLMedia元素的音频播放将被重新路由到AudioContext的处理图中。

我的。由于音频元素的输出现在被路由到新创建的
MediaElementAudioSourceNode
实例(而不是原始目标,通常是您的扬声器),因此您需要将实例的输出路由回原始目标:

var audio = document.getElementById('myAudio');
var ctx = new AudioContext();

var src = ctx.createMediaElementSource(audio);
src.connect(ctx.destination); // connect the output of the source to your speakers
audio.play();

添加
[0]
时它起作用的原因是
document.getElementById
不返回数组或定义键为“0”的元素。因此,您可能已经编写了
ctx.createMediaElementSource(未定义)
,它不会从
#myAudio
元素重新路由音频。

可能重复这是哪个浏览器?您可以发布JSFIDLE吗?您发布的代码段中缺少某些内容。这没有任何意义,
getElementById
只能返回单个元素,因为ID是唯一的。这是您在实际代码中使用的吗(如果不是,您是否检查了您没有使用复数形式的jQuery,或者没有使用返回jQuery对象的jQuery)?你能为我们设置一个提琴吗?可能重复的是哪个浏览器?你能发布一个JSFIDLE吗?您发布的代码段中缺少某些内容。这没有任何意义,
getElementById
只能返回单个元素,因为ID是唯一的。这是您在实际代码中使用的吗(如果不是,您是否检查了您没有使用复数形式的jQuery,或者没有使用返回jQuery对象的jQuery)?你能帮我们摆好小提琴吗?
var audio = document.getElementById('myAudio');
var ctx = new AudioContext();

var src = ctx.createMediaElementSource(audio);
src.connect(ctx.destination); // connect the output of the source to your speakers
audio.play();