代码之家  ›  专栏  ›  技术社区  ›  Doohyeon Won

什么是音频块?

  •  0
  • Doohyeon Won  · 技术社区  · 3 年前

    我见过一些句子,包括“block”一词。

    Pd通过在块中而不是单独使用样本来减轻其工作量。这大大提高了性能。标准块大小为64个样本,但此设置可以更改。( http://pd-tutorial.com/english/ch03.html )

    渲染音频图形是在128个采样帧的块中完成的。包含128个采样帧的块称为渲染量,渲染量大小为128。( https://www.w3.org/TR/webaudio/#rendering-loop )

    所以,我想知道的是:

    (1) 单独处理样品有什么问题?为什么音频样本按一定大小(64128)的块分组?

    (2) 为什么块大小是2的幂?//2^6 = 64, 2^7 = 128

    (3) 分组后,样本去了哪里?然后是用声卡或其他什么东西播放吗?

    0 回复  |  直到 3 年前
        1
  •  2
  •   Matt Timmermans    3 年前
    1. 去收银台,买一份炸薯条,吃下去,然后重复,直到吃饱为止。这就是一次处理一个样本的问题——处理每一组样本都有很大的固定成本,这并不取决于每一组样本的大小。更大的束=>束数减少=>成本更低。(折衷是延迟)

    2. 在计算机系统中,大多数块大小都是2的幂,无论它们是什么块或用于什么目的。从历史上看,这是因为使用位移位而不是除法计算2的幂更有效。然而,对于音频来说,有一些像FFT这样的变换通常用于处理,这些变换只能方便地在2次方大小的块上实现。

    3. 处理一个块后,可能会发生很多事情。最终,如果声音正在播放,每个块都将被发送到音频设备驱动程序,该驱动程序将以某种方式将其流式输出到扬声器或耳机,一次一个样本。

        2
  •  1
  •   Hazmatron    3 年前

    音频块是表示音频的浮点数数组。其中数字范围为[1,-1],其中0(不是0.xxxx)表示无音。

    1、单独处理样品有什么问题?为什么音频样本按一定大小(64128)的块分组?

    据我所知,在帧中处理示例更好,因为web音频api是如何在浏览器中运行的。不同的帧大小可能因用户在PC上的性能而异。这类似于视频上的fps。 在web音频中,有一个名为 ScriptProcesssorNode 它允许您在特定缓冲区/帧大小的事件处理程序中创建自定义音频处理。然而,缓冲区大小仅在256-16384之间,或者系统首选的缓冲区大小未定义。每个函数调用都很简单,它包含一个新的音频帧。基本上这是一个循环。

    如今 ScriptProcessorNode 由于性能不佳,现已弃用/过时。这是因为事件处理程序 onaudioprocess 函数位于主线程上,可以阻止很多事情。这将替换为 AudioWorklet 这与 ScriptProcessorNode 但是每个进程调用只有128帧,并且在主线程上节省了更好的性能,因为 音频工作网 在后台工作线程上运行。

    2、为什么块大小是2的幂?//2^6 = 64, 2^7 = 128

    老实说,我不太清楚,但我最好的猜测是,它更容易计算 因为在8位相似的数字中,例如8、16、32、64、128、256等。

    3、分组后,样本去哪里?然后是用声卡或其他什么东西播放吗?

    Web音频api是一种节点图系统,其中示例帧(即128帧块)通过不同的节点传递,例如 BiquadFilterNode 或自定义处理块,如 AudioWorkletNode ,等等。有一个节点称为 AudioDestinationNode 这是用户PC的扬声器硬件输出。任何连接都连接到此特定节点(如果有声音),它将从该连接产生声音。将这些节点视为一个连接点,点a是起点,点B是终点。每个点是一个处理块,如 音频工作网 等,其中点A是源,如麦克风或mp3/wav文件,点B是扬声器目标。把他们连在一起,砰!你的声音太棒了。

    我希望这是有意义的,你在寻找什么:)
    如果有错,请随时纠正我。

    推荐文章