使用Naudio同时在两个不同的audiodevice上播放音频
本文关键字:audiodevice 播放 音频 两个 Naudio 使用 | 更新日期: 2023-09-27 17:54:31
我的问题类似于这里的一个:使用Naudio
同时播放音频到两个不同的audiodevice但我在这里再问一遍,因为上面的链接没有明确回答。
我也有它在:在扬声器和耳机中播放声音wpf
灵感来源:使用c#
在特定设备上播放声音我在这里添加源代码和添加NAudio标签。
我有一个wpf应用程序,我正在使用soundPlayer类播放声音(例如铃声)。目前,该声音在扬声器或耳机上播放(如果插入)。我想应用程序播放扬声器上的音调,即使当耳机被插入。我知道在android中有办法做到这一点,但在wpf中找不到任何方法。我还想让用户选择他想听到声音的设备的UI。任何帮助都是感激的。谢谢!
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();
使用上面的代码,我仍然只在一个设备(耳机或扬声器)上听到铃声。
您需要两个WaveOut实例,每个声卡一个。最简单的方法是如果你从文件播放,也有两个WaveFileReader实例。恐怕你不能轻易地同步它们,你只能让它们一起玩,然后期待最好的结果。
上面代码中的wave1, wave2和wave3类完全不做任何事情。音频将使用你在playSound中创建的WaveOut设备播放。您似乎有一个单独的类属性称为output,另一个称为waveReader,当您需要两个时。