I'm looking for some sample code to show me how to add metadata to the wav files we create. Anyone?
Try code below
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);
}
}
}
from http://alvas.net/alvas.audio,articles.aspx#id3-tags-for-wave-files
One option is to add your own chunk with a unique id. Most WAV players will ignore it.
Another idea would to be use a labl
chunk, associated with a que set at the beginning or end of the file. You'd also need a que
chunk. See here for a reference
How to write the data is simple
- Write
"RIFF"
. - save the file position.
- Write 4 bytes of 0's
- Write all the existing chunks. Keep count of bytes written.
- Add your chunk. Be sure to get the chunksize right. Keep count of bytes written.
- rewind to the saved position. Write the new size (as a 32-bit number).
- Close the file.
It's slightly more complicated if you are adding things to an existing list
chunk, but the same principle applies.
If you examine the wave file spec you'll see that there does not seem to be room for annotations of any kind. An option would be to wrap the wave file with your own format that includes custom information but you would in effect be creating a whole new format that would not be readable by users who do not have your app. But you might be ok with that.
来源:https://stackoverflow.com/questions/3444323/how-to-add-metadata-to-wav-file