taglib-sharp:检索MP3文件的ChannelMode

时间:2017-10-26 01:31:45

标签: c# taglib taglib-sharp

我在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 = Stereo,1 = JointStereo,2 = DualChannel,3 = SingleChannel)。唯一的问题是我不知道如何访问它。当我调试代码时,我可以看到ChannelMode in the watch window

然而,访问它证明是困难的。我只有这么远:

var codec = (((TagLib.ICodec[])tagFile.Properties.Codecs).GetValue(0));

当我运行此功能时,我可以看到codec in the debugger's watch window,其下面是 ChannelMode

我倾向于认为我此时应该能够阅读 codec.ChannelMode ,但这显然不是正确的语法。我得到这个编译器错误:

  

错误CS1061'对象'不包含' ChannelMode'的定义没有扩展方法' ChannelMode'接受类型'对象'的第一个参数。可以找到(你错过了使用指令或程序集引用吗?)

我做错了什么?

提前致谢,

麦克

1 个答案:

答案 0 :(得分:1)

GetValue(0)会返回object类型。您需要将返回值强制转换为适当的类型。在这种情况下,可能是具有AudioHeader属性的ICodec(实现ChannelMode)。像这样

var codec = (AudioHeader)(((TagLib.ICodec[])tagFile.Properties.Codecs).GetValue(0));

或更安全

var codec = (((TagLib.ICodec[])tagFile.Properties.Codecs).GetValue(0)) as AudioHeader?;
if (codec != null)
    ...