如何将元数据添加到WAV文件?

问题描述:

我正在寻找一些示例代码来向我展示如何将元数据添加到我们创建的wav文件。 有人吗?如何将元数据添加到WAV文件?

如果您检查wave file spec,您会看到似乎没有任何注释的空间。一个选项是用你自己的格式打包wave文件,其中包含自定义信息,但实际上你会创建一个全新的格式,而没有你的应用程序的用户将无法读取它。但你可能会确定。

+1

从我读过,我可以嵌入它作为RIFF结构的一部分,我只是想不通要使用的结构和标签。 – Curtis 2010-08-09 21:30:30

也许NIST的文件格式会给你想要的东西: NIST

这里是一个lib,可以帮助,但恐怕它看起来老了。 NIST Lib

无法找到更多有用的信息,现在该如何使用它,恐怕我公司的信息文件必须留在那里。 :L/

一个选项是添加您自己的块与唯一的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

+2

如果没有“Alvas Audio”许可证,此代码无法使用,则需要至少500美元的许可证...... – 2015-04-06 14:13:07