我想知道如何在 directshow 中选择音频的输出设备。我能够在 directshow 中获得可用的音频输出设备。但是我怎样才能使其中之一成为音频输出设备。它总是使用默认音频设备。我希望能够在我选择的设备上输出音频。我一直在通过谷歌苦苦挣扎,但找不到任何有用的东西。我所能得到的只是这个链接,但它并不能真正解决我的问题。
任何帮助都会对我很有帮助。
我想知道如何在 directshow 中选择音频的输出设备。我能够在 directshow 中获得可用的音频输出设备。但是我怎样才能使其中之一成为音频输出设备。它总是使用默认音频设备。我希望能够在我选择的设备上输出音频。我一直在通过谷歌苦苦挣扎,但找不到任何有用的东西。我所能得到的只是这个链接,但它并不能真正解决我的问题。
任何帮助都会对我很有帮助。
首先,如果您不使用 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();
}
由用户管理音频设备并选择主要设备(例如通过控制面板小程序)。您可以在 Windows XP 中找到以编程方式切换设备的方法,但是在 Vista+中,如果没有设计上的交互式用户操作,这是不可能的。
另请参阅拉里在此处的回答:如何以编程方式更改默认声音播放设备?
更新:上面提到的是修改系统配置试图改变默认的音频输出设备。然而,应用程序不仅限于默认设备。相反,它可以枚举可用设备(请参阅使用系统设备枚举器+ CLSID_AudioRendererCategory
),然后通过BindToObject
调用为特定设备创建渲染器实例。从那里开始,它是一个常规过滤器,只是在内部绑定到感兴趣的设备。