3

我想知道如何在 directshow 中选择音频的输出设备。我能够在 directshow 中获得可用的音频输出设备。但是我怎样才能使其中之一成为音频输出设备。它总是使用默认音频设备。我希望能够在我选择的设备上输出音频。我一直在通过谷歌苦苦挣扎,但找不到任何有用的东西。我所能得到的只是这个链接,但它并不能真正解决我的问题。

任何帮助都会对我很有帮助。

4

2 回答 2

4

首先,如果您不使用 DirectShow .NET (DirectShowLib),请在此处获取:它充当非托管 DirectShow 和 C# 之间的(非常完整的)接口

下面是一个非常简单的示例,说明如何将音频文件播放到所需的音频设备

using DirectShowLib;

private IGraphBuilder m_objFilterGraph = null;
private IBasicAudio m_objBasicAudio = null;
private IMediaControl m_objMediaControl = null;

private void playAudioToDevice(string fName, int devIndex)
{
    object source = null;
    DsDevice[] devices;
    devices = DsDevice.GetDevicesOfCat(FilterCategory.AudioRendererCategory);
    DsDevice device = (DsDevice)devices[devIndex];
    Guid iid = typeof(IBaseFilter).GUID;
    device.Mon.BindToObject(null, null, ref iid, out source);

    m_objFilterGraph = (IGraphBuilder)new FilterGraph();
    m_objFilterGraph.AddFilter((IBaseFilter)source, "Audio Render");
    m_objFilterGraph.RenderFile(fName, "");

    m_objBasicAudio = m_objFilterGraph as IBasicAudio;
    m_objMediaControl = m_objFilterGraph as IMediaControl;

    m_objMediaControl.Run();
}
于 2012-12-13T23:01:33.650 回答
3

由用户管理音频设备并选择主要设备(例如通过控制面板小程序)。您可以在 Windows XP 中找到以编程方式切换设备的方法,但是在 Vista+中,如果没有设计上的交互式用户操作,这是不可能的。

另请参阅拉里在此处的回答:如何以编程方式更改默认声音播放设备?

更新:上面提到的是修改系统配置试图改变默认的音频输出设备。然而,应用程序不仅限于默认设备。相反,它可以枚举可用设备(请参阅使用系统设备枚举器+ CLSID_AudioRendererCategory),然后通过BindToObject调用为特定设备创建渲染器实例。从那里开始,它是一个常规过滤器,只是在内部绑定到感兴趣的设备。

于 2012-07-01T13:52:55.863 回答