2012-11-29 48 views
0

我很困惑。我需要從MIC Android中錄製聲音,所以我用下面的代碼:在Android上的8位字節數組上存儲16Bit音頻

recorder = new AudioRecord(AudioSource.MIC, 44100, 
       AudioFormat.CHANNEL_IN_MONO, 
       AudioFormat.ENCODING_PCM_16BIT, N); 
buffer = new byte[N]; 
//... 
recorder.read(buffer, 0, N); 

我們知道,一個字節數組可以-128之間,而16位的聲音需要更多的存儲存儲值+128(如short和int),但令人驚訝的是,Java和Android有一個record方法,它將記錄的數據保存到字節數組中。

這怎麼可能?我錯過了什麼?

+0

*而16Bit的聲音需要更多的存儲空間(「* 2字節,而不是'我'定義的'很多'。' –

+0

」當你有16位序列時,有65,536個可能的級別「在這個url中:[link](http://whatis.techtarget.com/definition/bit-depth)假設16666是一個幀值,如何將16666存儲在一個字節數組中?最大可存儲值爲128.幫助我瞭解 –

+0

*「一個16位序列」*可以存儲在兩個字節中,我不知道如何使它變得更簡單,可以試試這個,而不是將它看作一個值爲-128到128的字節,假設它是0到255.這是256個單獨的值。有了兩個字節,我們可以表示256 ** x ** 256個值或65,536個值中的任何一個。 –

回答

0

你正在考慮字節作爲一個鏡頭整數。它只有8位。你需要存儲1000111011100000(16位)?第一個字節是10001110,第二個字節是11100000.您可以將這些位解釋爲數字在這裏不相關。用更通用的方式,byte []通常是如何處理二進制「原始數據」(讓它成爲音頻流或加密內容或其他任何您視爲比特流的東西)。

如果您有16位的n個「單詞」,那麼您將需要2n個字節來存儲它。字節0將成爲字0的較低(或更高)部分,字節1將成爲字0的其餘部分,字節0將成爲字1的較低(或更高)部分... - SJuan76 11小時前

+0

我得到了你想要說的一句話:「一個16位音頻是由2個字節組成的。」但是如何將「2個字節」存儲在單個JAVA字節數組中?byte [] byteArray = new byte [] {87,79 ,87,46,46,46};'byteArray [0]只有一個字節而不是2個字節。爲了存儲2字節,我們需要將陣列大小加倍。我對嗎? –

+0

如果你有16位的n個「單詞」,那麼你需要2n個字節來存儲它。字節0將成爲字0的較低(或更高)部分,字節1將成爲字0的其餘部分,字節0將成爲字1的較低(或更高)部分...... – SJuan76

+0

感謝您回答我。請考慮在答案中添加你的評論。所以我可以將其標記爲已接受。你是否知道一本逐步解釋這些概念的書? –

相關問題