Javascript 如何在没有Web音频API的情况下直接从ArrayBuffer获取频道数据?

Javascript 如何在没有Web音频API的情况下直接从ArrayBuffer获取频道数据?,javascript,html5-audio,web-audio-api,Javascript,Html5 Audio,Web Audio Api,在我的web应用程序中,我使用HTML5音频进行音频播放。但因为我需要音频文件的channelData,所以在应用程序启动时,我需要执行以下步骤: 使用Web音频API将ArrayBuffer解码为AudioBuffer 调用audioBuffer.getChannelData(0) 处理channelData并转储audioBuffer 使用channelData,我可以将音频信号绘制到画布上 是否有任何方法可以从原始数据(ArrayBuffer)计算channelData?我的应用程序仅支持

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

  • 使用Web音频API将ArrayBuffer解码为AudioBuffer
  • 调用audioBuffer.getChannelData(0)
  • 处理channelData并转储audioBuffer
  • 使用channelData,我可以将音频信号绘制到画布上
  • 是否有任何方法可以从原始数据(ArrayBuffer)计算channelData?我的应用程序仅支持带PCM 16位的WAVE


    我知道WAVE格式的结构以及如何通过Javascript从原始数据中读取值,但我不知道
    getChannelData()
    如何计算其值。我在网上什么也没找到。

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

    非常感谢!我测试了它,当我比较它时,我得到了稍微不同的值:例如:样本1:来自Raw:0.00341796875来自Web API:0.0033789610024541616样本2:来自Raw:0.005035400390625来自Web API:0.005054975820843等等。你知道为什么这些值不相等吗?这是否与浏览器的采样率有关?可能是。如果WAV文件的采样率与上下文相同,则它们应该匹配。如果速率不同,
    decodeAudioData
    将对音频文件重新采样,以匹配上下文采样速率。哦,最后一件事,可能是对于正PCM值,除以32767,对于负值,除以32768,因为16位值介于-32768和32767之间。