AudioContext Analyzer工作在firefox / chrome但不是Safari

时间:2015-11-09 18:08:23

标签: javascript webkit requestanimationframe audiocontext webkitaudiocontext

我正在为音频编写一个可视化工具,我在mac os x上遇到safari问题,并且在使用远程调试器进行ios调试时遇到问题。在用于更新AudioContext分析器的动画功能上,ByteFrequency数组中的值不会在safari上更新。以下是代码示例:

#start with variables data.shape=(N,M), vol.shape=(M,), jstarts and jends .shape=(4,)
N=3
#N=1 #uncomment to test
M=20
jstarts = np.array([0,5,12,15])
jends = np.array([3,10,14,18])
data = np.arange(0,N,M).reshape(N,M)
data_new = np.empty((N,M))

for i in range(0,N):
    for j in range(0,jstarts.size):
        jstart = jstarts[j]
        jend = jends[j]
        tmp = np.sum(data[i,jstart:jend]*vol[jstart:jend])/np.sum(vol[jstart:jend])
        data_new[i,jstart:jend] = tmp

这是指向工作示例http://basketballjock.org/

的链接

1 个答案:

答案 0 :(得分:0)

在野生动物园中,您需要在用户交互后创建音频上下文。例如,在按钮上的onclick回调中。

HTML: <button onclick="play">Play</button>

Javascript:

function play() {
  var context;
  if (typeof AudioContext !== "undefined") {
      context = new AudioContext();
  } else if (typeof webkitAudioContext !== "undefined") {
      context = new webkitAudioContext();
  }
  var analyser = context.createAnalyser();
  analyser.fftSize = 64;
  frequencyData = new Uint8Array(analyser.frequencyBinCount);

  // Get the frequency data and update the visualisation

  function update() {
    requestAnimationFrame(update);
    analyser.getByteFrequencyData(frequencyData); 
  };

  var source = context.createMediaElementSource(this);
  source.connect(analyser);
  analyser.connect(context.destination);
}