媒体元素音频源节点如何播放

时间:2012-12-20 19:06:38

标签: javascript html5 audio webkit web-audio

所以我遇到了一个问题,我试图从标签创建一个Web音频源节点。守则看起来像这样:

OBJECT.musicContext= new webkitAudioContext();  
OBJECT.audio = new Audio();
OBJECT.audio.src = self.file;
OBJECT.source = OBJECT.musicContext.createMediaElementSource(OBJECT.audio);

var analyser= OBJECT.musicContext.createAnalyser();
analyser.fftSize=1024;
OBJECT.analyser=analyser    

OBJECT.gain = self.musicContext.createGain();
OBJECT.gain.gain.value = .01    
OBJECT.source.connect(OBJECT.gain)
OBJECT.gain.connect(OBJECT.analyser)
OBJECT.analyser.connect(OBJECT.musicContext.destination)

OBJECT.play = function(){OBJECT.source.play();}
OBJECT.stop = function(){OBJECT.source.stop();}

问题在于最后两行。我似乎无法通过webkit音频上下文播放音频...

如果我这样做

OBJECT.play = function(){OBJECT.audio.play();}

声音将开始播放,但不会通过音频节点(这是有意义的)

我也试过

OBJECT.play = function(){OBJECT.source.noteOn(0);}
OBJECT.stop = function(){OBJECT.source.noteOff(0);}

无济于事......

任何帮助或建议都会受到极大的赞赏,并提前感谢您的时间!

艾萨克

编辑:当console.logging OBJECT.source声称零输入和1输出时。这对于源节点是否正确?

2 个答案:

答案 0 :(得分:1)

您应该在Chrome中尝试使用Safari currently doesn't send the correct data to the Analyzer Node页面。如果您使用带有Web Audio API的Audio()对象,那么您应该可以使用它来控制播放,而不是使用.noteOn()/.noteOff()

以下是测试用例:http://screamingrobots.com/misc/safariaudiobug/

答案 1 :(得分:0)

最后想出来,但不确切地知道问题是什么......

而不是使用

audio = new Audio();
audio.src = self.file;

并连接此, 我改为使用

audio = document.querySelector('audio');

选择我之前放入页面的元素。我不确定这是否有效只是因为它给了它更多的时间来加载,或者如果API有内在的东西