0

完整的问题:为什么更适合使用MediaElementAudioSourceNode而不是AudioBuffer来获得更长的声音?为什么使用MediaElementAudioSourceNode获得更长的声音更合适?

From MDN:这些类型的

对象被设计成保持小音频片段,典型地小于45秒。对于更长的声音,实现MediaElementAudioSourceNode的对象更合适。

From the specification

此接口表示驻留在内存中的音频资产(用于一次性的声音和其他短音频剪辑)。其格式是非交错的32位线性浮点PCM值,其正常范围为[-1,1] [ - 1,1],但值不限于此范围。它可以包含一个或多个频道。通常,预计PCM数据的长度将相当短(通常略小于1分钟)。对于较长的声音,例如音乐声轨,流媒体应与音频元素和MediaElementAudioSourceNode一起使用。

  1. 什么是使用一个MediaElementAudioSourceNode了一个多AudioBuffer的好处?
  2. 短片段使用MediaElementAudioSourceNode有什么不利吗?

回答

2
  1. MediaElementSourceNode有流的潜在能力 - 当然,开始播放之前,整个声音文件下载和解码。它还能够在不将声音文件转换(可能扩展!)到32位线性PCM(CD质量音频仅为每通道16位)并转码为输出设备采样率的情况下完成此操作。例如,一个16分钟,16kHz录制的1分钟播客本来只有2兆字节大小;如果您在48kHz设备上播放(并非罕见),则转码为32位48kHz意味着您将使用近12兆字节作为AudioBuffer。

  2. MediaElementSourceNode不会为您提供精确的播放时间,也无法管理/播放大量同步声音。精度对您的用例来说可能是合理的,但它不会像AudioBuffer那样具有精确的采样时间。

+0

有趣的是,为什么'MediaElementSourceNode'不需要转码为输出设备采样率呢?我认为,如果您播放的声音具有与输出设备不同的采样率,则样本的音高和速度会发生改变(根据我的经验,“AudioBuffer”就是这种情况)。我需要获得最精确的播放时间,因为我正在构建某种DAW,因此我会坚持使用'AudioBuffer'。谢谢您的帮助! – maximedupre

+1

它确实需要转码为输出采样率(又名AudioContext比率),但它可以一次处理一个数据流块,而不是整个缓冲区。 – cwilso

+1

如果您使用decodeAudioData(),AudioBuffers应该适当地重新采样到正确的采样率。 – cwilso

相关问题