在Win XP或更高版本上从WMA文件中读取命名属性?

时间:2013-11-01 23:17:22

标签: c# windows-xp

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

2 个答案:

答案 0 :(得分:1)

读取(和修改/写入)WMA元数据属性的一种方法是使用the 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
}

您可以在我写的帖子中找到更多details about reading and writing WMA meta tags using NAudio

答案 1 :(得分: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。

请记住,此评论字段可以由其他用户更新,并且可以包含其他标记(不是“记录详细信息”,如上所示),因此您应该使用自己的自定义子字符串来定义必要的元数据边框。