与Naudio同时在两个不同的Audiodevices播放音频

时间:2014-03-27 12:53:44

标签: c# wpf naudio speaker headphones

我的问题与此处类似: Play audio to two different Audiodevices simultaneously with Naudio

但我在这里再次提出这个问题,因为在上面的链接中没有清楚地回答。

我也有: Play sound in both speaker and headset wpf

灵感来自: Play a sound in a specific device with C#

我正在添加源代码并在此处添加NAudio标记。

我有一个wpf应用程序,我正在使用soundPlayer类播放声音(例如铃声)。目前,音调可以在扬声器或耳机上播放(如果已插入)。即使插入耳机,我也希望应用程序能够在扬声器上播放音调。我知道在android中有办法做到这一点,但在wpf中无法找到。我还想为用户选择一个用户界面来选择他想要听到声音的设备。任何帮助表示赞赏。谢谢!

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 个答案:

答案 0 :(得分:1)

您需要两个WaveOut实例,每个声卡一个。然后,如果您正在从文件播放,最简单的方法是还有两个WaveFileReader实例。你不能轻易地同步它们我害怕,你只需要让它们一起玩,并希望最好。

上面代码中的wave1,wave2和wave3类绝对没有。音频将使用您在playSound中创建的WaveOut设备播放。当你需要两个属性时,你似乎有一个名为output的类属性和另一个名为waveReader的属性。