0

私の質問はここに似ています: Naudioで同時に2つの異なるオーディオデバイスにオーディオを再生する

しかし、上記のリンクで明確に回答されていないため、ここでもう一度質問します。

私もそれを持っています: スピーカーとヘッドセットの両方でサウンドを再生しますwpf

インスピレーション : C# を使用して特定のデバイスでサウンドを再生する

ソース コードを追加し、ここにも NAudio タグを追加します。

私はwpfアプリケーションを持っており、soundPlayerクラスを使用してサウンドを再生しています(着信音など)。現在、トーンはスピーカーまたはヘッドセット (プラグインされている場合) で再生されます。ヘッドセットが接続されている場合でも、アプリケーションがスピーカーでトーンを再生するようにしたいと思います。アンドロイドでこれを行う方法があることは知っていますが、wpf では見つかりませんでした。また、ユーザーがサウンドを聞きたいデバイスを選択するための UI も必要です。どんな助けでも大歓迎です。ありがとう !

public void detectDevices()
{
    int waveOutDevices = WaveOut.DeviceCount;
    switch (waveOutDevices)
    {
        case 1:
            var wave1 = new WaveOut();
            wave1.DeviceNumber = 0;
            playSound(0); 

            break;
        case 2:
            var wave2 = new WaveOut();
            wave2.DeviceNumber = 0;
            playSound(0);

            var wave3 = new WaveOut();
            wave3.DeviceNumber = 1;
            playSound(1); 

            break;

    }
}

public void playSound(int deviceNumber)
{
    disposeWave();// stop previous sounds before starting
    waveReader = new NAudio.Wave.WaveFileReader(fileName);
    var waveOut = new NAudio.Wave.WaveOut();
    waveOut.DeviceNumber = deviceNumber;
    output = waveOut;
    output.Init(waveReader);
    output.Play();
}

public void disposeWave()
{
    if (output != null)
    {
        if (output.PlaybackState == NAudio.Wave.PlaybackState.Playing)
        {
            output.Stop();
            output.Dispose();
            output = null;
        }
    }
    if (wave != null)
    {
        wave.Dispose();
        wave = null;
    }
}

case eSelector.startIncomingRinging:

            fileName = ("Ring.wav");
            detectDevices();

上記のコードを使用すると、まだ 1 つのデバイス (ヘッドセットまたはスピーカー) で着信音が聞こえます。

4

1 に答える 1

1

サウンドカードごとに 1 つずつ、WaveOut の 2 つのインスタンスが必要です。ファイルから再生する場合の最も簡単な方法は、WaveFileReader の 2 つのインスタンスも用意することです。残念ながら、それらを簡単に同期することはできません。両方を一緒にプレイして、最善を尽くす必要があります。

上記のコードの wave1、wave2、および wave3 クラスは、絶対に何もしません。オーディオは、playSound で作成した WaveOut デバイスで再生されます。それぞれ2つ必要な場合、outputと呼ばれる1つのクラスプロパティとwaveReaderと呼ばれる別のクラスプロパティがあるようです。

于 2014-03-28T09:28:12.603 に答える