【问题标题】:Determine length of audio file using DirectShow使用 DirectShow 确定音频文件的长度
【发布时间】:2011-01-13 09:22:10
【问题描述】:

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

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

【问题讨论】:

    标签: audio directshow directshow.net


    【解决方案1】:

    是的,您可以使用 DirectShow 做到这一点。有多种方法可以做到这一点。一种方法是查询graph对象上的IMediaSeeking接口,然后在这个接口上调用GetDuration方法。

    GetDuration 返回一个 64 位整数值,表示播放文件所需的时间。

    您需要调用GetTimeFormat 方法来找出持续时间的单位。最可能的默认值是TIME_FORMAT_MEDIA_TIME,即十分之一微秒。

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

    如果你想强制单位,你也可以在调用GetDuration之前调用SetTimeFormat。

    【讨论】:

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

    您还可以使用 IMediaPosition 接口中的 get_Duration()。

    这会返回一个以秒为单位的视频持续时间的双精度值。

        Double Lenght;
    
        m_FilterGraph = new FilterGraph()
    
    //Configure the FilterGraph()
    
        m_mediaPosition = m_FilterGraph as IMediaPosition;
        m_mediaPosition.get_Duration(out Length);
    

    【讨论】:

      猜你喜欢
      • 2010-10-04
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多