【问题标题】:How to get amplitude of an audio stream in an AudioGraph to build a SoundWave using Universal Windows?如何获取 AudioGraph 中音频流的振幅以使用通用 Windows 构建 SoundWave?
【发布时间】:2016-01-03 17:57:49
【问题描述】:

我想构建一个 SoundWave 对音频流进行采样。

我读到一个很好的方法是获取音频流的幅度并用多边形表示它。但是,假设我们的 AudioGraph 只有一个 DeviceInputNode 和一个 FileOutpuNode(一个简单的记录器)。

  1. 如何从 AudioGraph 的节点获取振幅?

  2. 对此采样进行周期化的最佳方法是什么? DispatcherTimer 是否足够好?

我们将不胜感激。

【问题讨论】:

    标签: audio win-universal-app


    【解决方案1】:

    首先,您关心的一切都在这里: uwp AudioGraph audio processing

    但由于你的出发点不同,我会解释一些更核心的东西。

    AudioGraph 节点已经为您分期了——这通常是音频的工作方式。我认为 Win10 默认为 10 毫秒和/或 20 毫秒的周期,但这可以通过 AudioGraphSettings.DesiredSamplesPerQuantum 设置(理论上)设置,使用 AudioGraphSettings.QuantumSizeSelectionMode = QuantumSizeSelectionMode.ClosestToDesired;我相信此功能的成功实际上取决于您的音频硬件,而不是具体的操作系统。我的电脑只能做480和960。这个数字是每个通道要累积多少个音频信号的样本(单声道是一个通道,立体声是两个通道等...),这个数字也会设置回调时间为一种副产品。

    Win10 和大多数设备默认为 48000Hz 采样率,这意味着它们每秒测量/输出数据很多次。因此,对于每帧音频,我的 QuantumSize 为 480,我每秒获得 48000/480 或 100 帧,这意味着我默认每 10 毫秒获得一次。如果将量子设置为每帧 960 个样本,则每秒将获得 50 帧,或每 20 毫秒获得一帧。

    要在每个量程中回调该音频帧,您需要在 AudioGraph.QuantumProcessed 处理程序中注册一个事件。您可以直接参考上面的链接了解如何操作。

    所以默认情况下,一帧数据存储在一个由 [-1,+1] 开始的 480 个浮点数组成的数组中。要获得幅度,您只需平均这些数据的绝对值。

    这部分,包括处理多个音频通道,在我的另一篇文章中有更详尽的解释。

    玩得开心!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多