2011-05-02 67 views
1

使用.NET mscorlib程序集中的System.IO BinaryReader對象,我運行了一個循環,將每個字節值從.wav文件轉儲到Excel電子表格中。爲了簡單起見,我從信號發生器將兩秒鐘的4K信號錄製到軟件音序器中,並保存爲單聲道波形文件。我對音樂進行排序的軟件顯示1ms的分辨率 - 這是44.11個樣本(假設採樣率爲44.1K)。我感到好奇的是,通過ReadInt16()方法(從.wav文件的第44位開始)提取的數據顯示了隨整數切換符號的不同數字,這些符號似乎是隨機的 - 而順序器內的可視正弦波相對於幅度是完全一致的,頻率。在16位分辨率下,我確定每個採樣的第一個字節是頻率分辨率,第二個幅度是正確的?C#中的音頻節拍檢測#

問題:如何智能地解釋從波形文件中拉出的整數以確定節奏跳動的最終目的?

非常感謝...........米奇

+0

謝謝Heandel我會檢查文檔。要回答你的問題,是的,我只是調用ReadInt16方法來提取一個十進制整數值。 – Mickey 2011-05-02 18:01:47

回答

3

對於每個採樣16個比特的WAV文件,它是不樣品的第一個字節是頻率分辨率和時第二個字節是幅度。兩個字節一起表示在該特定時間點的樣本振幅。這兩個字節被解釋爲一個2字節的整數,所以這些值的範圍是從-32768到+32767。

我不知道你的音序器是如何工作的或它顯示的是什麼。從您的描述中,聽起來好像您的音序器正在使用FFT將音頻從時域(這是WAV文件所在的位置)轉換爲頻域(這是一個頻率沿x軸和頻率幅度沿y軸)。 WAV文件不包含頻率信息。

+0

好吧,我明白了。從2個字節的輸出分組中,第一個字節值通常遠遠高於2個字節的值,因此我得出了錯誤的結論,即它是一個頻率/幅度標識。那麼是否有某種解釋邏輯的圖例或映射文檔?如果二進制閱讀器輸出數據的範圍從-32768到32767(對於位置1,即字節1),那麼字節2的目的是什麼? – Mickey 2011-05-02 17:56:35

+0

@Mickey:否,每個樣本2個字節表示每個樣本的值(每秒44,100個樣本)存儲爲一個雙字節整數(又名'Int16')。 「Int16」的可能值範圍是-32768到+32767。您似乎認爲樣本中的兩個字節中的每一個都存儲了不同的數量,而他們不是。這兩個字節從根本上作爲一個「Int16」綁定在一起。 – MusiGenesis 2011-05-02 18:10:28

+0

所以我創建了一個1秒的單聲道.wav文件,音頻數據塊包含88200字節。當我向下滾動這個88200輸出列表時,我看到了整數值,例如...... 29570,750,-29658,1305 ......在這種類型的高/低序列中。如果每個88200位置是1個字節的數據,則需要兩個位置來組成採樣分辨率。或者我在這裏錯過了什麼?如果是這樣,那麼在這個雙序列的每個實例中,第二個字節的意義是什麼? – Mickey 2011-05-02 20:38:16