2011-03-11 134 views
2

我想使用fread從文件中讀取pcm樣本,並希望確定樣本的信號強度。我該如何處理它?如何使用fread和fwrite從文件讀取pcm樣本?

對於閱讀,多少字節構成1 pcm樣本?我可以一次讀取超過1 pcm的樣本嗎? 這是用於WAV和AAC文件。

+0

什麼樣的文件? WAV? MP3? AAC? – selbie 2011-03-11 05:27:23

回答

1

你必須明白,WAV文件(甚至更多的AAC文件)並不完全相同。我只會解釋有關WAV文件的內容,然後希望瞭解它是如何與AAC文件相關的。正如您所指出的,WAV文件具有PCM編碼數據。然而,這可能是:8位,16位,32位,...單聲道,立體聲,5.1,...,8kHz,16kHz,44.1kHz等。根據這些值,您必須解釋數據例如,當用fread()函數讀取它時)不同。因此WAV文件有一個標題。您必須先以標準方式閱讀該標題(我不知道詳情)。然後你知道如何讀取實際數據。由於它不那麼容易,我建議你使用那裏的庫,爲你讀取WAV文件,例如http://www.mega-nerd.com/libsndfile/。當然,你也可以谷歌或使用它來找到其他人。或者你這樣做很難,並找出WAV文件頭的樣子,然後解碼這些數據,然後轉到實際的PCM編碼數據。

0

我沒有經驗處理WAV文件,但一旦從MP3文件中讀取數據。至於mp3文件,每個576 pcm樣本被編碼成一個幀。所有的幀都直接存儲在一個文件中,並附帶一些輔助信息。處理編碼數據時,我從mp3文件中讀取二進制數據並存儲在緩衝區中,解碼緩衝的數據並提取對我有意義的內容。

我認爲處理wav文件(根據我的理解存儲pcm樣本)沒有什麼不同。您可以直接從文件讀取二進制數據,並根據wav編碼規範進行一些轉換。

文件本身並不知道什麼樣的數據,甚至數據的格式。您可以將文件中的所有內容作爲字節(甚至是純文本)讀取,從文件中讀取自己解釋二進制數據的字節。