[英]How to read XingHeaders and VBRIHeaders from MP3 files using TagLib-Sharp
[英]taglib-sharp: Retrieving the ChannelMode of an MP3 File
我在C#Win Forms应用程序中使用taglib-sharp库来检索MP3文件的持续时间和比特率。 一个代码片段如下:
TagLib.File tagFile = TagLib.File.Create(myMp3FileName);
int bitrate = tagFile.Properties.AudioBitrate;
string duration = tagFile.Properties.Duration.Hours.ToString("D2") + ":" +
tagFile.Properties.Duration.Minutes.ToString("D2") + ":" +
tagFile.Properties.Duration.Seconds.ToString("D2");
我现在还要确定文件是Mono还是Stereo。 为此,我认为我需要阅读ChannelMode(0 =立体声,1 = JointStereo,2 = DualChannel,3 = SingleChannel)。 唯一的问题是我不知道如何访问它。 调试代码时,可以在监视窗口中看到ChannelMode 。
但是事实证明,访问它很困难。 我只有这么远:
var codec = (((TagLib.ICodec[])tagFile.Properties.Codecs).GetValue(0));
运行此命令时,我可以在调试器的监视窗口中看到编解码器 ,并且在其下方是ChannelMode 。
我倾向于认为我现在应该只能阅读codec.ChannelMode ,但这显然不是正确的语法。 我收到此编译器错误:
错误CS1061'对象'不包含'ChannelMode'的定义,并且找不到扩展方法'ChannelMode'接受类型为'object'的第一个参数(您是否缺少using指令或程序集引用?)
我究竟做错了什么?
提前致谢,
麦克风。
GetValue(0)
返回object
的类型。 您将需要将返回值转换为适当的类型。 在这种情况下,可能是具有ChannelMode
属性的AudioHeader
(实现ICodec
)。 像这样
var codec = (AudioHeader)(((TagLib.ICodec[])tagFile.Properties.Codecs).GetValue(0));
或更安全
var codec = (((TagLib.ICodec[])tagFile.Properties.Codecs).GetValue(0)) as AudioHeader?;
if (codec != null)
...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.