我有一個RAW音頻文件,它由幾個連接的較小的WAV文件組成。我可以在Sound Forge中打開並播放該文件爲48,000,8位PCM,帶符號單聲道。刪除幾個WAV文件的頭文件,然後將其餘數據連接成一個RAW文件
我想在C#中做的事情是用程序在文件中用相同或更小長度的新數據覆蓋每個單獨的WAV,我認爲我相當接近能夠做到這一點。我可以在RAW文件上做一個File.ReadAllBytes,遍歷字節數組,並確定每個WAV的開始和結束位置。然後,我在PC上選取新的WAV文件,刪除標題,並將其餘數據寫入我的RAW文件。如果新的WAV比目標小,我用0填充差值。
但是,當我在上面提到的設置中打開Sound Forge中的新文件時,我的所有WAV看起來都比實際的「聖誕樹」形狀更像固體塊,並且它們都會大聲和失真。第一次經歷這個之後,我發現所有新的源WAV都是41,000,16位PCM,有符號立體聲格式。我以這種格式打開了我新創建的RAW文件,它看起來很好。
我想我必須將我所有的新WAV轉換爲48,000,8位PCM,簽名,單聲道,第一,然後運行應用程序將它們複製到RAW文件中。我使用NAudio編寫了一些代碼,用於在將數據複製到RAW文件之前對文件進行轉換,而且我仍然遇到同樣的問題。我也試着先在Sound Forge中手動轉換每個新的WAV,但仍然有同樣的問題。
我在這裏錯過了什麼?謝謝。
你可能意味着44,100而不是41,000。 – 2012-07-29 22:53:10
感謝您的建議。我明白了這一點。這是有符號/無符號音頻文件的區別。我做了一些Google搜索,並且讀取默認情況下8位PCM WAV文件未簽名。爲了解決這個問題,使用NAudio將文件轉換爲8位後,我循環遍歷字節並從每個字節中減去128。我隨心所欲地做了這件事。我相信有更好的方法來做到這一點。 – user1561302 2012-07-30 05:45:26