【问题标题】:Web Audio Offline Context and Analyser NodeWeb 音频离线上下文和分析器节点
【发布时间】:2018-05-23 07:13:44
【问题描述】:

是否可以使用offlineAudioContext中的Analyser节点进行频率分析?

我发现ScriptProcessoronaudioprocess 事件仍然在offlineAudioContext 中触发,这是我可以用来调用Analyser 节点的getByteFrequencyData 的唯一事件源。如下:

var offline = new offlineAudioContext(1, buffer.length, 44100);
var bufferSource = offline.createBufferSource();
bufferSource.buffer = buffer;

var analyser = offline.createAnalyser();
var scp = offline.createScriptProcessor(256, 0, 1);

bufferSource.connect(analyser);
scp.connect(offline.destination); // this is necessary for the script processor to start

var freqData = new Uint8Array(analyser.frequencyBinCount);
scp.onaudioprocess = function(){
    analyser.getByteFrequencyData(freqData);
    console.log(freqData);
   // freqData is always the same.
};

bufferSource.start(0);
offline.startRendering();

这里的问题是freqData 数组总是相同的并且永远不会改变。好像只分析缓冲区的一部分。

我在这里做错了吗?或者Analyser 不打算在offlineContext 中使用。

这是fiddle,代码相同。

【问题讨论】:

    标签: javascript web-audio-api


    【解决方案1】:

    分析器并不是真的打算在离线上下文中使用;事实上,它最初被命名为“RealtimeAnalyser”。但更重要的是,现在您也无法在离线环境中从脚本处理器获得一致的功能。

    【讨论】:

    • 很公平,尽管使用分析器节点和脚本处理器的能力对于离线上下文来说将是一个很棒的功能。 @cwilso
    • 新的工作脚本节点应该可以在离线状态下正常工作。
    • AnalyserNode & OfflineAudioContext 是否仍然如此?或者是否可以在离线模式下对 BufferSource 进行频率分析?
    • 不使用 AnalyserNode,不。您最好直接使用库来执行此操作,例如 DSP.js。
    【解决方案2】:

    另一种方法是使用可用于OfflineAudioContextsuspendresume 方法。暂停后,您可以使用分析器节点获取所需的时域和/或频域数据。由于上下文已停止,因此效果很好。如果您要多次执行此操作,则需要安排下一次停止,然后再继续。

    不幸的是,AFAIK,只有 Chrome 为 OfflineAudioContext 实现了 suspend

    【讨论】:

      猜你喜欢
      • 2017-08-28
      • 2013-09-14
      • 2020-07-12
      • 1970-01-01
      • 1970-01-01
      • 2017-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多