我刚开始使用DirectShow.NET,并试图获取音频文件的长度(以秒为单位)。音频可能是.mp3,.wav,.aac或.m4a。使用DirectShow确定音频文件的长度
我可以使用DirectShow获得这些信息,还是我需要其他一些API?
我刚开始使用DirectShow.NET,并试图获取音频文件的长度(以秒为单位)。音频可能是.mp3,.wav,.aac或.m4a。使用DirectShow确定音频文件的长度
我可以使用DirectShow获得这些信息,还是我需要其他一些API?
是的,你可以用DirectShow做到这一点。有很多种方法可以做到这一点。一种方法是查询图形对象上的IMediaSeeking接口,然后在该接口上调用GetDuration方法。
GetDuration将返回一个64位整数值,以表示播放文件需要多长时间。
您需要调用GetTimeFormat
方法来找出持续时间所处的单位。最可能的默认值是TIME_FORMAT_MEDIA_TIME,它是微秒的十分之一秒。
在这种情况下,您会将持续时间除以10 * 1000 * 1000以获得秒数。
如果您要强制设备,您也可以在致电GetDuration
之前致电SetTimeFormat
。
您也可以使用IMediaPosition接口中的get_Duration()。
这会以秒为单位返回一个double值和视频持续时间。
Double Lenght;
m_FilterGraph = new FilterGraph()
//Configure the FilterGraph()
m_mediaPosition = m_FilterGraph as IMediaPosition;
m_mediaPosition.get_Duration(out Length);
我会试试看。谢谢。 – 2010-02-05 14:08:49
我试过了,起初它不起作用。如果我先调用graph.RenderFile,然后调用GetDuraction,它就起作用了。谢谢您的帮助! – 2010-02-07 22:17:10
@Judah:是的,图表必须知道哪个文件可以告诉你多久。 – 2010-02-07 22:23:33