Audio 使用DirectShow确定音频文件的长度

Audio 使用DirectShow确定音频文件的长度,audio,directshow,directshow.net,Audio,Directshow,Directshow.net,我刚刚开始使用DirectShow.NET,我正在尝试获取音频文件的长度(以秒为单位)。音频可以是.mp3、.wav、.aac或.m4a 我可以使用DirectShow获取此信息,还是需要其他API?是的,您可以使用DirectShow进行此操作。有多种方法可以做到这一点。一种方法是在图形对象上查询接口,然后在此接口上调用方法 GetDuration返回播放文件所需时间的64位整数值 您需要调用GetTimeFormat方法来找出持续时间的单位。最有可能的默认值是时间\格式\媒体\时间,即10分

我刚刚开始使用DirectShow.NET,我正在尝试获取音频文件的长度(以秒为单位)。音频可以是.mp3、.wav、.aac或.m4a


我可以使用DirectShow获取此信息,还是需要其他API?

是的,您可以使用DirectShow进行此操作。有多种方法可以做到这一点。一种方法是在图形对象上查询接口,然后在此接口上调用方法

GetDuration返回播放文件所需时间的64位整数值

您需要调用
GetTimeFormat
方法来找出持续时间的单位。最有可能的默认值是时间\格式\媒体\时间,即10分之一微秒

在这种情况下,将持续时间除以10*1000*1000,得到秒数


如果要强制使用单位,也可以在调用
GetDuration
之前调用
SetTimeFormat

您还可以从IMediposition界面使用get_Duration()

这将返回以秒为单位的视频持续时间的双倍值

    Double Lenght;

    m_FilterGraph = new FilterGraph()

//Configure the FilterGraph()

    m_mediaPosition = m_FilterGraph as IMediaPosition;
    m_mediaPosition.get_Duration(out Length);

我试试看。谢谢。我试过这个,但一开始不起作用。如果我先调用graph.RenderFile,然后调用GetDuraction,它就可以工作了。谢谢你的帮助@犹大:是的,图形必须知道哪个文件才能告诉您多长时间。回想起来,这是有道理的,但我没有想到我需要先调用RenderFile,因为我们已经在DShow API的其他地方处理了这个特定的文件。无论如何,谢谢你的帮助。@juda:没问题。当我们不实际查看代码时,很难知道您已经知道了什么。