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 +では、設計によるインタラクティブなユーザーアクションなしでは不可能です。

こちらのラリーの回答も参照してください:デフォルトのサウンド再生デバイスをプログラムで変更するにはどうすればよいですか?

更新:上記は、デフォルトのオーディオ出力デバイスを変更しようとするシステム構成の変更を指します。ただし、アプリケーションはデフォルトのデバイスのみに限定されません。代わりに、使用可能なデバイスを列挙し(System Device Enumerator +の使用を参照CLSID_AudioRendererCategory)、呼び出しを使用して特定のデバイスのレンダラーのインスタンスを作成できますBindToObject。そこから、それは通常のフィルターであり、対象のデバイスに内部的にバインドされます。

于 2012-07-01T13:52:55.863 に答える