如何在C#中读取命名属性,例如Win XP或更高版本的WMA文件的标题?
答案 0 :(得分:1)
读取(和修改/写入)WMA元数据属性的一种方法是使用the Windows Media Format SDK。特别是IWMHeaderInfo接口具有您想要的功能:GetAttributeByName,GetAttributeCount和GetAttributeByIndex。您必须在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。
请记住,此评论字段可以由其他用户更新,并且可以包含其他标记(不是“记录详细信息”,如上所示),因此您应该使用自己的自定义子字符串来定义必要的元数据边框。