【问题标题】:How to get channel data directly from ArrayBuffer without Web Audio API?如何在没有 Web Audio API 的情况下直接从 ArrayBuffer 获取通道数据?
【发布时间】:2019-09-27 14:32:46
【问题描述】:

在我的 Web 应用程序中,我使用 HTML5 Audio 进行音频播放。但是因为我需要音频文件的channelData,所以在应用启动时需要做如下步骤:

  1. 使用 Web Audio API 将 ArrayBuffer 解码为 AudioBuffer
  2. 调用audioBuffer.getChannelData(0)
  3. 处理 channelData 并转储 audioBuffer
  4. 使用 channelData 我可以将音频信号绘制到画布上

有什么方法可以从原始数据(ArrayBuffer)计算channelData?我的应用程序仅支持 PCM 16 位的 WAVE。

我知道 WAVE 格式的结构以及如何通过 Javascript 从原始数据中读取值,但我不明白 getChannelData() 如何计算其值。我在网上一无所获。

【问题讨论】:

    标签: javascript html5-audio web-audio-api


    【解决方案1】:

    getChannelData 没有什么神奇之处;它只是从AudioBuffer 返回数据。如果您有一个 16 位 PCM WAV 文件,您可以轻松地将其解码为 Javascript 中的 16 位 PCM 值。要得到getChannelData 会产生的结果,请取该 16 位值并除以 32768 以获得介于 -1 和 1 之间的浮点值。

    【讨论】:

    • 非常感谢!我对其进行了测试,比较时得到的值略有不同:例如:示例 1:来自原始:0.00341796875 来自 Web API:0.0033789610024541616 示例 2:来自原始:0.005035400390625 来自 Web API:0.005054975859820843 等等。你知道为什么值不相等吗?和浏览器的采样率有关系吗?
    • 有可能。如果 WAV 文件的采样率与上下文相同,那么它们应该匹配。如果速率不同decodeAudioData 将重新采样音频文件以匹配上下文采样率。哦,最后一件事,可能是正 PCM 值除以 32767,负值除以 32768,因为 16 位值介于 -32768 和 32767 之间。
    猜你喜欢
    • 2015-02-25
    • 2022-01-17
    • 1970-01-01
    • 1970-01-01
    • 2021-01-16
    • 2011-12-02
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    相关资源
    最近更新 更多