如何向 WAV 文件添加元数据?

发布于 2024-09-13 05:31:11 字数 51 浏览 4 评论 0原文

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

I'm looking for some sample code to show me how to add metadata to the wav files we create.
Anyone?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

鹤舞 2024-09-20 05:31:11

一种选择是添加您自己的具有唯一 ID 的块。大多数 WAV 播放器都会忽略它。

另一个想法是使用一个 labl 块,与文件开头或结尾处的 que 集关联。您还需要一个 que 块。 请参阅此处参考

数据写入方法很简单

  1. 写入 "RIFF “
  2. 保存文件位置。
  3. 写入 4 个字节的 0
  4. 写入所有现有块。保留写入的字节数。
  5. 添加你的块。确保块大小正确。保持
    写入的字节数。
  6. 快退到保存的位置。写入新的大小(作为 32 位
    数字)。
  7. 关闭文件。

如果您要将内容添加到现有的 list 块中,情况会稍微复杂一些,但同样的原则也适用。

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

  1. Write "RIFF".
  2. save the file position.
  3. Write 4 bytes of 0's
  4. Write all the existing chunks. Keep count of bytes written.
  5. Add your chunk. Be sure to get the chunksize right. Keep
    count of bytes written.
  6. rewind to the saved position. Write the new size (as a 32-bit
    number).
  7. Close the file.

It's slightly more complicated if you are adding things to an existing list chunk, but the same principle applies.

风筝有风,海豚有海 2024-09-20 05:31:11

如果您检查 wave 文件规范,您会发现没有似乎有空间进行任何类型的注释。一种选择是使用您自己的格式包装波形文件,其中包括自定义信息,但您实际上会创建一种全新的格式,没有您的应用程序的用户将无法读取该格式。但你可能对此没意见。

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.

陪你到最终 2024-09-20 05:31:11

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

这是一个可以提供帮助的库,但恐怕它看起来老的。 NIST Lib

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

Maybe the nist file format will give you what you want:
NIST

Here is a lib that could help, but im afraid it looks old. NIST Lib

Cant find more useful information right now how exactly to use it, and im afraid the information papers from my company must stay there. :L/

清风夜微凉 2024-09-20 05:31:11

尝试下面的代码

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);
        }
    }
}

http://alvas.net/alvas .audio,articles.aspx#id3-tags-for-wave-files

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文