2010-11-30 74 views
2

在SDL中,當您設置音頻輸出設備時,您和SDL必須就音頻格式達成一致 - 例如, 44.1KHz立體聲16位有符號小端。沒關係。但是,除了最終商定的格式之外,您還可以得到一個似乎沒有很好記錄的計算「沉默」值。SDL音頻API中「沉默」值的確切含義是什麼?

一個沉默的聲音樣本顯然包含一遍又一遍重複的相同樣本值,並且您希望它處於「零」水平。從某種意義上講,任何常數值都可以做到,但是你必須同意一個值(所以當你切換到不同的聲音時,你不會得到流行音樂),並且在一個理智的世界中,你想要在樣本中心選擇一個值值範圍。

所以,如果你碰巧使用一個無符號格式爲你的樣本值範圍爲0..whatever,你的沉默值將是(無論/ 2)。

編輯 - 在下面插入「無符號」以避免混淆。

這一切都很好。但你得到的沉默值是一個無符號的8位整數。如果您想要無符號的16位樣本,那麼這樣做效果不佳 - 0x8000的邏輯靜默值需要兩個不同的字節值,並且它要求它們的順序是正確的。

因此,您從SDL獲得的沉默值似乎沒有太大意義。例如,你不能用它來擦除你的緩衝區,而不會處理額外的複雜問題,並且無論如何都會使得預計的沉默值幾乎沒有意義。

這意味着,當然,我誤解了這一點。

所以 - 如果這不是如何使用沉默值,它應該如何使用應該

+0

Minor nitpick,但是如果您使用的是16位* signed *音頻數據,由於範圍是從-32k到+ 32k,因此無法將正確的靜音值設置爲0x0000?但是,我認爲您對未簽名的音頻數據有效。我對SDL的沉默價值的看法是,它可能只是無用的遺留問題,你應該悄悄地忘記你曾經看到過的,計算你自己的,並且快樂的方式。 :) – cecilkorik 2010-11-30 10:38:59

+0

SDL支持16位有符號和無符號,大小尾數。而且之前的段落建立了使用無符號格式的上下文,無論樣本值爲0。但我可以更明確 - 將解決。 – Steve314 2010-11-30 12:13:09

回答

1

我沒有證據支持這一點,但我認爲這裏的假設是「沉默」可以被解釋爲「沉默的普通聲卡格式」。是的那些:

  1. 無符號8位整數
  2. 符號16位整數
  3. 符號32位整數(24位音頻數據)
  4. 歸一化的32位浮點
  5. 標準化的64位浮點。

在除無符號8位以外的所有情況下,零(0)是「零幅度」值。因此,返回的無符號8位整數包含這些格式的所有可能的「零幅度」值。

相關問題