[英]How to convert a .WAV audio data sample into an double type?
我正在處理一個處理音頻數據的應用程序。 我正在使用java(我添加了MP3SPI,Jlayer和Tritonus)。 我正在將.wav文件中的音頻數據提取到字節數組中。 我正在使用的音頻數據樣本是16位立體聲。
根據我所讀到的,一個樣本的格式是:
AABBCCDD
其中AABB代表左通道和CCDD rigth通道(每個通道2個字節)。 我需要將此示例轉換為double值類型。 我正在閱讀有關數據格式的內容。 Java使用Big endian,.wav文件使用little endian。 我有點困惑。 你能幫我轉換一下嗎? 謝謝大家
警告:整數和字節都已簽名。 也許你需要在將它們打包在一起時屏蔽低字節:
for (int i =0; i < length; i += 4) {
double left = (double)((bytes [i] & 0xff) | (bytes[i + 1] << 8));
double right = (double)((bytes [i + 2] & 0xff) | (bytes[i + 3] << 8));
... your code here ...
}
當您使用ByteBuffer( java.nio.ByteBuffer )時,您可以使用方法順序;
[訂購]
公共最終ByteBuffer訂單(ByteOrder bo)
Modifies this buffer's byte order.
Parameters:
bo - The new byte order, either BIG_ENDIAN or LITTLE_ENDIAN
Returns:
This buffer
在此之后,您可以獲得上述值;
getChar()getShort()getInt()getFloat()getDouble()
多么好的語言是Java ;-)
Little Endian表示數據采用BBAA和DDCC格式。 你只需要換掉它。
從框架的開頭:
int left = (bytes[i+1] << 8) + bytes[i];
int right = (bytes[i+3] << 8) + bytes[i+2];
其中i是您的樣本索引。
我個人會尋找一個為您進行字節序交換的庫。 每種音頻文件格式都有關於字節序的假設,並且對於所有位深度/數據類型波形文件支持,獲得此權限都很棘手:
如果要支持大多數常見類型的波形文件,則需要對所有這些數據類型進行字節序轉換。
我會看看ByteSwapper ,它會為你提供上面列出的大多數類型的byteswapping。
它太糟糕的Java在它們的File IO類中沒有endianness字段。 能夠簡單地打開edianness大或小的文件是解決這個問題的一個更容易的解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.