2010-05-18 37 views

回答

2

這是在C#中的讀取和寫入WAV文件的一個很好的示例項目:

http://www.codeproject.com/KB/audio-video/Concatenation%5FWave%5FFiles.aspx

假設你的「原始音頻」是短(2字節)整數數組,這是一個簡單的任務。 WAV文件的標題爲44個字節(請參閱註釋),因此您先寫出標題(使用示例中的代碼),然後再寫入數據。

注意:並非所有的WAV文件都是「規範的」,這意味着它們並不都具有44字節的標頭,後面跟着數據。 WAV格式實際上是一種RIFF格式,這意味着它們可以包含各種不同的數據,並且標題不一定在開頭。然而,這些都不重要,因爲你只是 WAV文件。

更新:如果語音識別程序期待一個流(而不是一個文件路徑),可以很容易地創建一個MemoryStream這樣的:

byte[] bytes = System.IO.File.ReadAllBytes("c:\whatever.wav"); 
System.IO.MemoryStream stream = new System.IO.MemoryStream(bytes); 

或者你能避免文件I/O總而言之,首先創建您的WAV文件作爲內存中的字節數組,然後從中創建MemoryStream

+0

非常感謝您的回答! 我曾閱讀過關於規範的WAV文件格式等。 鏈接中的代碼/項目對此很有幫助。 流怎麼樣,你可以告訴一些關於流的東西嗎? 另外,這個文件(如果最後是文件而不是流?!)將被語音識別程序讀取 - 所以頭文件等無所謂。 – refugee 2010-05-19 13:12:03

+0

@refugee:我假設語音識別程序將一個流作爲輸入,並持續監視流中的新數據。您可能需要包含有關此程序的更多詳細信息以及它期望的輸入類型。 WAV *文件頭*包含一個值,表示後面數據的大小 - 如果程序期望開放式流,則不適用。這可能是因爲您的語音識別程序需要一個初始調用,告訴它它將使用什麼格式的流數據,然後是實際的數據流。 – MusiGenesis 2010-05-19 13:31:40

相關問題