如何在C#中读取一个命名属性,例如WMA文件中的标题,或者更高版本?
发布于 2014-01-14 20:22:12
读取(修改/写入) WMA元数据属性的一种方法是使用Windows媒体格式SDK。特别是,IWMHeaderInfo接口具有所需的功能:GetAttributeByName、GetAttributeCount和GetAttributeByIndex。为了使用这个基于COM的API,您必须在C#中编写P/Invoke代码。
另一个更容易的选择是使用一个库,比如NAudio,它有一个WindowsMediaFormat程序集,用于读取和写入WMA文件。使用NAudio,读取属性的任务变得非常简单。
using (var wmaStream = new NAudio.WindowsMediaFormat.WmaStream(fileName))
{
titleAttribute = wmaStream["Title"];
authorAttribute = wmaStream["Author"];
// ...
// read other meta tag attributes
}你可以在我写的一篇文章中找到更多的使用NAudio读取和写入WMA元标记的详细信息。
发布于 2014-01-22 06:48:05
有一个简单的解决方案,没有任何奇怪的框架使用。因此,我建议使用纯原生.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文件描述的注释字段,该字段通常称为音频文件MetaData。
请记住,这个注释字段可以由其他用户更新,并且可以包含其他标记(而不是上面所示的"recordingDetails“),因此您应该使用您自己的自定义子字符串来定义必要的MetaData边框。
https://stackoverflow.com/questions/19736947
复制相似问题