0

我有一个 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();
4

1 回答 1

3

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

SoundPlayer始终使用默认输出设备播放,无法更改它。一种选择是使用NAudio提供更多选项的库。

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

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

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

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

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

于 2014-03-04T13:30:36.933 回答