2012-07-04 51 views
0

我正在用C++編寫我的WAVE解碼器/編碼器。我設法正確地在不同的樣本大小(8,16和32)之間進行轉換,但我需要一些關於通道和頻率的幫助。正確解碼/編碼原始PCM數據

渠道:

如果我想從立體聲轉換爲單聲道:(?哪一個呢?1或2)

  1. 我只是從一個通道取數據?
  2. 還是我從單聲道的聲道1和2中取平均值。

如果我想從單聲道轉換爲立體聲: (我知道這是不是很科學)

  1. 我可以簡單地從單一渠道到兩個立體聲道加樣?
  2. 有沒有更科學的方法來做到這一點(例如:插值)?

採樣率:

如何改變採樣率(重採樣),例如:從44100赫茲到22050赫茲:

  1. 我隨便拿2個連續的平均新(低頻)值的樣本?
  2. 有沒有更多的科學算法呢?
+1

問題更適合於http:// dsp。 stackexchange.com –

+1

我假設你的意思是44100 Hz到22050 Hz? –

+0

是的,很抱歉,這是22050 – goocreations

回答

1
  • 立體聲到單聲道 - 採取左,右樣本的平均值,即M = (L + R)/2 - 這適用於絕大多數的立體聲內容,但要注意,有一些罕見的情況下,你可以在那裏左/正確的取消。

  • 單聲道立體聲 - 把單樣品中左和右信道,即L = R = M - 這給出了當立體聲播放

  • 再採樣該中心的聲象 - 爲一個簡單的整數比的下采樣在您的示例上述過程是:

    • 低通濾波器,以適應新奈奎斯特頻率,例如10千赫LPF爲22.05 kHz的採樣率
    • 抽取所要求的比(即下降交替的抽樣爲您的2倍下采樣實施例)

注意,有第三方庫如libsamplerate它能夠處理的二次採樣你在一般情況下,所以如果你需要支持多個比率,或者你有一些棘手的非整數比率,那麼這可能是一個更好的方法

相關問題