2012-06-15 18 views
0

我正在開發一個應用程序,通過自定義UDP協議從遠程服務器接收音頻樣本流。該流由小序列樣本組成,每個序列可以具有不同數量的信道和速率。使用PulseAudio中的不同sample_spec播放樣本

據我所知,流的sample_spec只能在流的創建過程中設置(pa_simple_newpa_stream_new等),之後無法切換。

我的問題是:這些樣本在PulseAudio中播放的最有效方法是什麼?我看到三個選項:

  1. 保持一個單一的PulseAudio流,手動重新採樣樣本序列並在必要時混合通道(爲了具有相同sample_spec樣品餵養的PulseAudio)
  2. 保持一個單一的PulseAudio流,靠近並與新sample_spec重新打開它時的規格改變
  3. 保持多個流,一個爲每一種樣品我有

選項1工作的好像很多手工的工作,和幾乎資源 - 消耗也是如此。方案2似乎非常低效。選項3看起來可能是最好的選項,但我擔心資源消耗。有什麼我可能會失蹤?

回答

1

重新抽樣自己將是一種浪費的努力。您可以選擇動態更新採樣率。您需要設置PA_STREAM_VARIABLE_RATE並使用pa_stream_update_sample_rate()。儘管如此,這仍然不能處理樣本規格的變化。

2和3都是有效的,顯然在預先分配資源(選項3)和輕微的性能損失(選項2)之間存在權衡。說實話,創建流並不是那麼昂貴,持有流也不應該是高開銷(除非你處於資源嚴重受限的環境中)。

因此,如果您有固定數量的規格/速率組合,只需預先創建流。如果規格/速率的變化很少,只需拆下並重新創建流。

+0

謝謝!規格/速率的變化很頻繁,所以我想我會堅持流基於池的實現 –