簡體   English   中英

Wave File 原始數據 16bits 樣本值

[英]Wave File raw data 16bits Sample values

我正在嘗試生成一個顯示波形文件幅度的圖表。

我已讀取文件字節,然后通過 little endian 轉換為十六進制,然后將值轉換為小數。

但是即使聲音是 16 位的,因此值應該在 (-32768, 32768) 之間,但是我得到的十進制值會超過這個值並達到 65000;

一個例子可以更好地解釋我的情況:

來自文件的字節:(121, -2) 自 mono 起取兩個值,即 numChannels = 1,因此 blockAlign = 2

小端值:87 FE

十六進制值(大端):FE87

十進制:65159

我什至考慮將 Hex 設為 -FE87,因為字節具有負值,但我認為它們不會那樣工作。

我認為這句話是罪魁禍首,但我無法弄清楚。 “16 位樣本存儲為 2 的補碼有符號整數,范圍從 -32768 到 32767。” http://soundfile.sapp.org/doc/WaveFormat/

有人可以幫我解決我做錯了什么嗎,我花了幾個小時試圖弄清楚。

在二進制補碼中(順便說一句,Java 本機使用),數字的符號由最左邊的位確定。

當您解析該十六進制值 FE87 並將結果存儲在int中時,最左邊的位為零,因此結果為正。

你想要做的是砍掉除了 16 個最低有效位之外的所有位。 您可以通過將int轉換為short來做到這一點。 現在短的最左邊的位是一,這意味着數字是負數。

int i = Integer.parseInt("FE87", 16);
System.out.println(i);
short sample = (short) i;
System.out.println(sample);

Output:

65159
-377

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM