0

如何在 C# 中从 Win XP 或更高版本的 WMA 文件中读取命名属性,例如标题?

4

2 回答 2

1

读取(和修改/写入)WMA 元数据属性的一种方法是使用Windows Media Format SDK。特别是 IWMHeaderInfo 接口具有您想要的功能:GetAttributeByNameGetAttributeCountGetAttributeByIndex。您必须在 C# 中编写 P/Invoke 代码才能使用这个基于 COM 的 API。

另一个可能更容易的选择是使用诸如 NAudio 之类的库,它具有用于读取和写入 WMA 文件的 WindowsMediaFormat 程序集。使用 NAudio,读取属性的任务变得非常简单。

using (var wmaStream = new NAudio.WindowsMediaFormat.WmaStream(fileName))
{
    titleAttribute = wmaStream["Title"];
    authorAttribute = wmaStream["Author"];
    //  ...
    // read other meta tag attributes
}

您可以在我写的一篇文章中找到有关使用 NAudio 读取和写入 WMA 元标记的更多详细信息。

于 2014-01-14T20:22:12.070 回答
1

有一个简单的解决方案,没有使用任何奇怪的框架。所以我建议只使用纯本机.Net 逐字节读取文件:

using System.IO;    
...
string metaStr = string.Empty;

            using (FileStream fs = File.OpenRead(wmaUrl))
            {
                byte[] b = new byte[3000];

                fs.Read(b, 0, b.Length);

                metaStr = Encoding.UTF8.GetString(b, 0, 3000);                
                metaStr = metaStr.Replace("\0", "");

                int metaStart = metaStr.IndexOf("<?xml version");
                metaStr = metaStr.Substring(metaStart);

                int metaEnd = metaStr.IndexOf("</recordingDetails>");
                metaStr = metaStr.Substring(0, metaEnd) + "</recordingDetails>";               
            }

现在 metaStr 包含 WMA 文件描述的 Comments 字段,通常称为音频文件 MetaData。

请记住,此 Comment 字段可以由其他用户更新,并且可以包含其他标签(不是上面显示的“recordingDetails”),因此您应该使用自己的自定义子字符串来定义必要的 MetaData 边框。

于 2014-01-22T06:48:05.957 回答