Мой вопрос похож на один здесь: Воспроизведение аудио на двух разных аудиоустройствах одновременно с Наудио
Но я спрашиваю это здесь снова, так как на него нет четкого ответа в приведенной выше ссылке.
У меня также есть это по адресу: Воспроизведение звука как в динамике, так и в гарнитуре wpf а>
Источник вдохновения: Воспроизведение звука на определенном устройстве с помощью 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();
Я по-прежнему слышу рингтон только на одном устройстве (в гарнитуре или динамиках), используя приведенный выше код.