2010-08-09 75 views

回答

0

如果您檢查wave file spec,您會看到似乎沒有任何註釋的空間。一個選項是用你自己的格式打包wave文件,其中包含自定義信息,但實際上你會創建一個全新的格式,而沒有你的應用程序的用戶將無法讀取它。但你可能會確定。

+1

從我讀過,我可以嵌入它作爲RIFF結構的一部分,我只是想不通要使用的結構和標籤。 – Curtis 2010-08-09 21:30:30

0

也許NIST的文件格式會給你想要的東西: NIST

這裏是一個lib,可以幫助,但恐怕它看起來老了。 NIST Lib

無法找到更多有用的信息,現在該如何使用它,恐怕我公司的信息文件必須留在那裏。 :L/

1

一個選項是添加您自己的塊與唯一的ID。大多數WAV玩家都會忽略它。

另一個想法是使用一個labl塊,與在文件的開始或結尾處設置的一個que相關聯。您還需要一個que塊。 See here for a reference

如何寫入數據是簡單

  1. "RIFF"
  2. 保存文件位置。
  3. 寫入0個字節的4個字節
  4. 寫入所有現有的塊。保持寫入的字節數。
  5. 添加你的大塊。一定要得到大塊的權利。保持 寫入的字節數。
  6. 倒回到保存的位置。寫入新的大小(作爲32位 數字)。
  7. 關閉文件。

如果您將某些東西添加到現有的list塊中,但這一點稍微複雜一些,但同樣的原則適用。下面

private void WaveTag() 
{ 
    string fileName = "in.wav"; 
    WaveReadWriter wrw = new WaveReadWriter(File.Open(fileName, FileMode.Open, FileAccess.ReadWrite)); 
    //removes INFO tags from audio stream 
    wrw.WriteInfoTag(null); 
    //writes INFO tags into audio stream 
    Dictionary<WaveInfo, string> tag = new Dictionary<WaveInfo, string>(); 
    tag[WaveInfo.Comments] = "Comments..."; 
    wrw.WriteInfoTag(tag); 
    wrw.Close(); 
    //reads INFO tags from audio stream 
    WaveReader wr = new WaveReader(File.OpenRead(fileName)); 
    Dictionary<WaveInfo, string> dir = wr.ReadInfoTag(); 
    wr.Close(); 
    if (dir.Count > 0) 
    { 
     foreach (string val in dir.Values) 
     { 
      Console.WriteLine(val); 
     } 
    } 
} 

+0

請注意,所有塊必須有偶數個字節。如果需要填充NULL! – mivk 2012-04-26 07:19:00