【问题标题】:Media Element Audio Source Node How to Play媒体元素音频源节点如何播放
【发布时间】:2012-12-22 00:36:32
【问题描述】:

所以我在尝试从标签创建网络音频源节点时遇到问题。代码如下所示:

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 输出时。这对于源节点是否正确?

【问题讨论】:

  • 另外,您只能拥有 一个 AudioContext,请确保您不是每次都创建一个新的。
  • 只有一个,请确保。它似乎仍然是音频到源的链接......

标签: javascript html audio webkit web-audio-api


【解决方案1】:

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

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

【讨论】:

  • 嘿!非常感谢我一直在使用 chrome 进行测试的响应,但我从来不知道 safari,所以很高兴知道!我开始认为我的代码中可能存在更根本的问题,因为即使我通过
【解决方案2】:

终于搞定了,但不知道到底是什么问题...

而不是使用

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

并连接它, 我改为使用

audio = document.querySelector('audio');

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

【讨论】:

  • 还想补充一点,这似乎在 chrome canary 中有效,但是当我在 Chrome 中检查它时,它的行为有所不同......
  • 我认为这也是问题所在:crbug.com/112368!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-20
  • 1970-01-01
相关资源
最近更新 更多