如何在 C# 中从 Win XP 或更高版本的 WMA 文件中读取命名属性,例如标题?
问问题
363 次
2 回答
1
读取(和修改/写入)WMA 元数据属性的一种方法是使用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
}
您可以在我写的一篇文章中找到有关使用 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 回答