在SDL中,當您設置音頻輸出設備時,您和SDL必須就音頻格式達成一致 - 例如, 44.1KHz立體聲16位有符號小端。沒關係。但是,除了最終商定的格式之外,您還可以得到一個似乎沒有很好記錄的計算「沉默」值。SDL音頻API中「沉默」值的確切含義是什麼?
一個沉默的聲音樣本顯然包含一遍又一遍重複的相同樣本值,並且您希望它處於「零」水平。從某種意義上講,任何常數值都可以做到,但是你必須同意一個值(所以當你切換到不同的聲音時,你不會得到流行音樂),並且在一個理智的世界中,你想要在樣本中心選擇一個值值範圍。
所以,如果你碰巧使用一個無符號格式爲你的樣本值範圍爲0..whatever,你的沉默值將是(無論/ 2)。
編輯 - 在下面插入「無符號」以避免混淆。
這一切都很好。但你得到的沉默值是一個無符號的8位整數。如果您想要無符號的16位樣本,那麼這樣做效果不佳 - 0x8000的邏輯靜默值需要兩個不同的字節值,並且它要求它們的順序是正確的。
因此,您從SDL獲得的沉默值似乎沒有太大意義。例如,你不能用它來擦除你的緩衝區,而不會處理額外的複雜問題,並且無論如何都會使得預計的沉默值幾乎沒有意義。
這意味着,當然,我誤解了這一點。
所以 - 如果這不是如何使用沉默值,它應該如何使用應該?
Minor nitpick,但是如果您使用的是16位* signed *音頻數據,由於範圍是從-32k到+ 32k,因此無法將正確的靜音值設置爲0x0000?但是,我認爲您對未簽名的音頻數據有效。我對SDL的沉默價值的看法是,它可能只是無用的遺留問題,你應該悄悄地忘記你曾經看到過的,計算你自己的,並且快樂的方式。 :) – cecilkorik 2010-11-30 10:38:59
SDL支持16位有符號和無符號,大小尾數。而且之前的段落建立了使用無符號格式的上下文,無論樣本值爲0。但我可以更明確 - 將解決。 – Steve314 2010-11-30 12:13:09