Воспроизведение звука как в динамике, так и в гарнитуре wpf

У меня есть приложение 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();

person user2054702    schedule 04.03.2014    source источник


Ответы (1)


Мой ответ предполагает, что вы используете несколько устройств вывода с вашего компьютера, а не только разъем для наушников, доступный на ваших динамиках.

SoundPlayer всегда воспроизводится с использованием устройства вывода по умолчанию без возможности его изменить. Одной из альтернатив может быть использование библиотеки, такой как NAudio, которая предлагает больше возможностей.

Эта статья предлагает примеры кода о том, как изменить устройство вывода звука с помощью NAudio.

Ваш вопрос можно решить, используя несколько экземпляров WaveOut.

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

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

Общее количество устройств можно получить из WaveOut.DeviceCount.

person Lukazoid    schedule 04.03.2014
comment
Спасибо, Lukazoid, за предложение Naudio, но я думаю, что я в шаге от того, чтобы заставить его работать. Пожалуйста, взгляните на отредактированный вопрос. Предложения приветствуются. - person user2054702; 27.03.2014