2015-10-06 36 views
0

我想構建一個SoundWave採樣音頻流。如何獲取AudioGraph中的音頻流的振幅以使用通用Windows構建SoundWave?

,我讀了一個很好的方法是讓音頻流的幅度,並用多邊形表示它。但是,假設我們只有一個DeviceIputNode和一個FileOutpuNode(一個簡單的錄音機)並且AudioGraph。

  1. 我怎樣才能從AudioGraph的節點幅度?

  2. 什麼是periodize抽樣結果的最佳方式? DispatcherTimer是否足夠好?

任何幫助將不勝感激。

回答

0

首先,你關心的一切是種在這裏: uwp AudioGraph audio processing

但既然你有不同的出發點,我要解釋一些事情的核心。

的AudioGraph節點已經週期化的你 - 這通常是如何音頻作品。我認爲Win10默認爲10ms的和/或20ms的週期,但是這可以通過設置AudioGraphSettings.DesiredSamplesPerQuantum來設定(理論上),與AudioGraphSettings.QuantumSizeSelectionMode = QuantumSizeSelectionMode.ClosestToDesired;我相信這個功能的成功實際上取決於你的音頻硬件,而不是專門的操作系統。我的電腦只能做480和960.這個數字是每聲道有多少音頻信號採樣(單聲道是一個聲道,立體聲是兩個聲道,等等),這個數字也會設置回調時間爲副產品。

Win10和大多數設備的默認採樣率爲48000Hz,這意味着它們每秒測量/輸出多次數據。因此,對於每一幀音頻,我的QuantumSize爲480,我每秒獲得48000/480或100幀,這意味着我默認每10毫秒獲取它們。如果您將量程設置爲每幀960個採樣,則您將每秒獲得50個幀,或者每20ms獲得一個幀。

爲了在每個量子的音頻幀中獲得回調,您需要在AudioGraph.QuantumProcessed處理程序中註冊一個事件。您可以直接參考上面的鏈接瞭解如何做到這一點。

所以默認情況下,一幀數據存儲在一個由[-1,+ 1]組成的480浮點數組中。爲了得到幅度,你只需要平均這個數據的絕對值。

這部分,包括處理多個音頻通道,在我的另一篇文章中有更詳細的解釋。

玩得開心!