taglib-sharp:检索 MP3 文件的 ChannelMode
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");
我现在还想确定文件是单声道还是立体声。为此,我想我需要阅读 ChannelMode(0 = 立体声,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,但这显然不是正确的语法。我收到此编译器错误:
Error CS1061 'object' does not contain a definition for 'ChannelMode' and no extension method 'ChannelMode' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
我做错了什么?
提前致谢,
麦克。
GetValue(0)
return 是 object
的一种。您需要将 return 值转换为适当的类型。在这种情况下,可能有一个 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)
...
我在我的 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");
我现在还想确定文件是单声道还是立体声。为此,我想我需要阅读 ChannelMode(0 = 立体声,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,但这显然不是正确的语法。我收到此编译器错误:
Error CS1061 'object' does not contain a definition for 'ChannelMode' and no extension method 'ChannelMode' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
我做错了什么?
提前致谢,
麦克。
GetValue(0)
return 是 object
的一种。您需要将 return 值转换为适当的类型。在这种情况下,可能有一个 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)
...