我也碰到過這個MSDN鏈接: Intro to Audio Programming, Part 2: Demystifying the WAV Format。 的交說:16bit的WAVE值範圍
16位採樣的範圍從-32760到32760
這是不+/-由於(2^16)/ 2
一些瘋狂的業務涉及字節順序和2的補
有在這篇文章中多次失誤,但是這部分我惱火最。如果有的話有多少是真的?
我也碰到過這個MSDN鏈接: Intro to Audio Programming, Part 2: Demystifying the WAV Format。 的交說:16bit的WAVE值範圍
16位採樣的範圍從-32760到32760
這是不+/-由於(2^16)/ 2
一些瘋狂的業務涉及字節順序和2的補
有在這篇文章中多次失誤,但是這部分我惱火最。如果有的話有多少是真的?
的職位是錯誤的在這方面。首先,排序與任何事情完全沒有任何關係。但是2s補碼存在一個問題,那就是負值比正值多。通常在執行信號處理時,值將被轉換爲-1.0至1.0範圍內的雙精度值,以便稍後轉換爲所需的輸出位分辨率。如果你乘以32768並轉換爲一個整數,那麼你肯定會在正數1.0上溢出。所以最好乘以32767.我不知道這是否以任何方式形式化,但以我的經驗來看,就是這樣。如果你遵循這個假設,你會遇到遇到一個-32768的波形文件的小風險,當轉換爲浮點數時,你會得到一個小於-1.0的數字。
我做了一些測試,看起來可以安全地將所有內容除以32768。由於從float轉換爲short int時截斷的工作原理。如果修改浮點數,則無論如何都需要在-32768和32767之間進行鉗位。換句話說,確保最大值<1.0f; – user1146657
如果這是在任何正式的方式,我不知道。
是的!它是!這兩個似乎是official RIFF spec和Broadcast WAVE format spec(這應該是由WAVE兼容的應用程序消耗品)斷言的-32768很清楚16位採樣範圍爲32767假定JAKET。
我發現我經常需要採取MSDN文章用一粒鹽,但他們有時很難忽視,因爲他們是權威提出。搜索「網絡」wav 32760「將會發現本文所做的一些損害。
作爲另一個超集的規範可能很容易擁有比它所基於的更大的數據範圍。 –
@MarkRansom通常這是一個公平點。我已經更新了參考看似正式的RIFF規範,並更加仔細地指出了爲什麼必須使用BWF--無論你如何看待它,32760似乎都是一個虛假數字。 – Kaganar
很好找到那個RIFF規格!它確實給出了明確的-32768到32767範圍。請參閱我對這個問題的評論,以瞭解我自己的理論如何限制範圍的存在。 –
一些非常早期的過採樣轉換器在採樣值一直存在問題時遇到了問題;一些CD不能在早期的CD播放器上播放而不會嚴重扭曲。這些問題在很久以前就已經解決了,但是數據範圍限制可能基於對兼容性的需求。令人懷疑的是,排序或2的補碼與它有什麼關係。 –
@MarkRansom有趣的理論,感謝您的洞察力。 – Kaganar