簡體   English   中英

Mp3文件的PCM數據的存儲是否取決於Big Endian和Little Endian?

[英]Does the storage of PCM data of Mp3 File depends on Big Endian and little Endian?

我作為初學者正在研究 PCM,我正在使用 Naudio 庫。 所以我想知道 PCM 數據的存儲是否取決於 Little Endian 和 Big Endian 或者如果不是存儲取決於那么內存尋址是否取決於這個 Big Endian 和 Little Endian,因為 PCM 數據得到了最低有效字節,當然還有最高有效字節據我所知,Little Endian 和 Big Endian 將這些字節存儲到內存中的方式不同,因此將數據從磁盤讀取到內存中可能會產生錯誤的值,直到我反轉數組然后將其轉換為short值。

為了讓你明白我在說什么,這里有一個簡短的例子:

一個非常短的 PCM 數據,只有 4 個字節:

Address Value
1000    90
1001    AB
1002    12
1003    CD

這是在大端的存儲。 以下是little Endian中的存儲

Address Value
1000    CD
1001    12
1002    AB
1003    90

那么當您使用 Naudio 讀取 PCM 時會發生這種字節反轉嗎? 因為我檢查了 BitConverter 是否是 Little Endian,據此我反轉了我的字節數組,有點像這樣:

                    Int16 Left_Sample = BitConverter.ToInt16(Buffer, i);
                    Int16 Right_Sample = BitConverter.ToInt16(Buffer, i + 2);
                    Int16 Final_Sample = (Int16)(0.5f * ((float)Left_Sample + (float)Right_Sample));
                    byte[] Final_Byte = BitConverter.GetBytes(Final_Sample);
                    if (BitConverter.IsLittleEndian){ Array.Reverse(Final_Byte); }

所以總結一下:

問:Big Endian 和 Little Endian 會影響字節存儲嗎?

問:是否需要使用if(BitConverter.IsLittleEndian)語句來反轉數組?

在 WAV 文件中,PCM 樣本存儲為小端。

MP3 文件是一種壓縮音頻格式,所以說它使用什么字節序並沒有什么意義,但是當 NAudio 轉換為 PCM 時,它又會是小字節序。

AIFF 文件通常將樣本存儲為 big-endian,但同樣,NAudio 會為您處理此問題。

沒有看到更多代碼很難說,但我懷疑如果您正常使用 NAudio,您是否需要自己進行任何字節順序交換。

暫無
暫無

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

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