Воспроизведение звука в динамике и гарнитуре 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();

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,

Другие вопросы по тегам