【发布时间】:2011-01-13 09:22:10
【问题描述】:
我刚开始使用 DirectShow.NET,我正在尝试获取音频文件的长度(以秒为单位)。音频可以是 .mp3、.wav、.aac 或 .m4a。
我可以使用 DirectShow 获取此信息,还是需要一些其他 API?
【问题讨论】:
标签: audio directshow directshow.net
我刚开始使用 DirectShow.NET,我正在尝试获取音频文件的长度(以秒为单位)。音频可以是 .mp3、.wav、.aac 或 .m4a。
我可以使用 DirectShow 获取此信息,还是需要一些其他 API?
【问题讨论】:
标签: audio directshow directshow.net
是的,您可以使用 DirectShow 做到这一点。有多种方法可以做到这一点。一种方法是查询graph对象上的IMediaSeeking接口,然后在这个接口上调用GetDuration方法。
GetDuration 返回一个 64 位整数值,表示播放文件所需的时间。
您需要调用GetTimeFormat 方法来找出持续时间的单位。最可能的默认值是TIME_FORMAT_MEDIA_TIME,即十分之一微秒。
在这种情况下,您可以将持续时间除以 10*1000*1000 以获得秒数。
如果你想强制单位,你也可以在调用GetDuration之前调用SetTimeFormat。
【讨论】:
您还可以使用 IMediaPosition 接口中的 get_Duration()。
这会返回一个以秒为单位的视频持续时间的双精度值。
Double Lenght;
m_FilterGraph = new FilterGraph()
//Configure the FilterGraph()
m_mediaPosition = m_FilterGraph as IMediaPosition;
m_mediaPosition.get_Duration(out Length);
【讨论】: