如何将元数据添加到WAV文件?
如果您检查wave file spec,您会看到似乎没有任何注释的空间。一个选项是用你自己的格式打包wave文件,其中包含自定义信息,但实际上你会创建一个全新的格式,而没有你的应用程序的用户将无法读取它。但你可能会确定。
一个选项是添加您自己的块与唯一的ID。大多数WAV玩家都会忽略它。
另一个想法是使用一个labl
块,与在文件的开始或结尾处设置的一个que相关联。您还需要一个que
块。 See here for a reference
如何写入数据是简单
- 写
"RIFF"
。 - 保存文件位置。
- 写入0个字节的4个字节
- 写入所有现有的块。保持写入的字节数。
- 添加你的大块。一定要得到大块的权利。保持 写入的字节数。
- 倒回到保存的位置。写入新的大小(作为32位 数字)。
- 关闭文件。
如果您将某些东西添加到现有的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);
}
}
}
请注意,所有块必须有偶数个字节。如果需要填充NULL! – mivk 2012-04-26 07:19:00
如果没有“Alvas Audio”许可证,此代码无法使用,则需要至少500美元的许可证...... – 2015-04-06 14:13:07
从我读过,我可以嵌入它作为RIFF结构的一部分,我只是想不通要使用的结构和标签。 – Curtis 2010-08-09 21:30:30