我正在使用我的C# Win窗体应用程序中的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,但这显然不是正确的语法。我得到了这个编译器错误:
Error CS1061 'object‘不包含'ChannelMode’的定义,也找不到接受'object‘类型的第一个参数的扩展方法'ChannelMode’(您缺少使用指令还是程序集引用?)
我做错了什么?
提前谢谢你,
麦克。
发布于 2017-10-26 03:34:33
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)
...https://stackoverflow.com/questions/46944478
复制相似问题