在扬声器和耳机中播放声音wpf

时间:2014-03-04 13:28:00

标签: c# wpf speaker soundplayer headphones

我有一个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 :(得分:3)

我的回答是假设您使用的是计算机中的多个输出设备,而不仅仅是扬声器上的耳机插孔。

SoundPlayer始终使用默认输出设备播放而无法更改它。另一种方法是使用诸如NAudio之类的库,它提供了更多选项。

This article提供了如何使用NAudio更改音频输出设备的代码示例。

通过使用多个WaveOut实例可以满足您的问题。

var waveOut1 = new WaveOut();
waveOut1.DeviceNumber = 0; // First device

var waveOut2 = new WaveOut();
waveOut2.DeviceNumber = 1; // Second device

可以从WaveOut.DeviceCount检索设备总数。