這是我的第一篇文章,所以我希望有人可以幫忙!將16位PCM值轉換爲-1到1的值
我正在使用AudioFileReadPackets函數讀取音頻數據(在CoreAudio中),此代碼正常工作並將16位PCM值加載到緩衝區中。
第一個樣本值是這樣的:'65491'(在此音頻開始處有沉默)。我知道這是一個無符號整數,所以我的問題是,如何將此值轉換爲-1到1的範圍。
目前,我將樣本值除以32768.0爲浮點變量,就像這樣.. 。
for (UInt32 i = 0; i < packetCount; i++){
sample = *(audioData + i);
//turn it into the range -1.0 - 1.0
monoFloatDataLeft[i] = (float)sample/32768.0;
}
然而,對於樣品上面給出(如實施例),這導致的「1.998626709」的輸出不爲0(因爲它應該是爲沉默)?
說了這麼多,當我在文件的很多後面看樣本時,我知道它的值在'0.3'附近,算法的結果出來在'0.311584473',我相信正確嗎?
那麼爲什麼第一個樣本不會被讀爲零,因爲我知道他們是?
如果有人能幫助我,我將不勝感激!
山姆
一般來說+1.0不是浮點的有效樣本值。這允許通過簡單的乘法或除法無損地轉換/從浮點數轉換。 – sbooth 2011-03-09 16:46:48
嗨sbooth,謝謝,是的,我有一個進一步的子程序,在任何進一步處理之前,將+1.0值改爲+0.999。 – Sammio2 2011-03-18 20:41:39
另請參閱:http://stackoverflow.com/questions/15087668/how-to-convert-pcm-samples-in-byte-array-as-floating-point-numbers-in-the-range – Brad 2013-12-27 05:03:38