首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从WMA文件中读取WMA或更高版本上的命名属性?

从WMA文件中读取WMA或更高版本上的命名属性?
EN

Stack Overflow用户
提问于 2013-11-01 23:17:22
回答 2查看 368关注 0票数 0

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-14 20:22:12

读取(修改/写入) WMA元数据属性的一种方法是使用Windows媒体格式SDK。特别是,IWMHeaderInfo接口具有所需的功能:GetAttributeByNameGetAttributeCountGetAttributeByIndex。为了使用这个基于COM的API,您必须在C#中编写P/Invoke代码。

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

代码语言:javascript
复制
using (var wmaStream = new NAudio.WindowsMediaFormat.WmaStream(fileName))
{
    titleAttribute = wmaStream["Title"];
    authorAttribute = wmaStream["Author"];
    //  ...
    // read other meta tag attributes
}

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

票数 1
EN

Stack Overflow用户

发布于 2014-01-22 06:48:05

有一个简单的解决方案,没有任何奇怪的框架使用。因此,我建议使用纯原生.Net按顺序读取文件:

代码语言:javascript
复制
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边框。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19736947

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档