C# 使用Naudio在两个不同的音频设备上同时播放音频
我的问题与这里的问题类似: 但我在这里再次问,因为在上面的链接中没有得到明确的回答 我也有它在: 灵感来自: 我在这里添加源代码和NAudio标记 我有一个wpf应用程序,我使用soundPlayer类来播放声音(例如铃声)。当前,该铃声在扬声器或耳机上播放(如果已插入)。我希望应用程序能够播放扬声器上的音调,即使耳机已插入。我知道在android中有很多方法可以做到这一点,但在wpf中找不到任何方法。我还想要一个用户界面,让用户选择他想要听到声音的设备。感谢您的帮助。谢谢C# 使用Naudio在两个不同的音频设备上同时播放音频,c#,wpf,naudio,speaker,headphones,C#,Wpf,Naudio,Speaker,Headphones,我的问题与这里的问题类似: 但我在这里再次问,因为在上面的链接中没有得到明确的回答 我也有它在: 灵感来自: 我在这里添加源代码和NAudio标记 我有一个wpf应用程序,我使用soundPlayer类来播放声音(例如铃声)。当前,该铃声在扬声器或耳机上播放(如果已插入)。我希望应用程序能够播放扬声器上的音调,即使耳机已插入。我知道在android中有很多方法可以做到这一点,但在wpf中找不到任何方法。我还想要一个用户界面,让用户选择他想要听到声音的设备。感谢您的帮助。谢谢 public
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实例,每个声卡一个。如果您是从文件播放,那么最简单的方法就是同时拥有两个WaveileReader实例。恐怕你无法轻松地同步它们,你只需要让它们一起玩,并希望一切都好起来
上面代码中的wave1、wave2和wave3类根本不起任何作用。音频将使用您在playSound中创建的WaveOut设备播放。您似乎有一个名为output的类属性和另一个名为waveReader的类属性,而您需要每个类的两个属性。谢谢!我让它在两台设备上播放,声音不是完全同步的(这对我来说很好),但声音在其中一台设备上受到干扰。在另一台设备上,它可以正常播放。有什么改进的建议吗?取决于你所说的不安是什么意思。当只在一台设备上播放时,你能再现它吗?我所说的“干扰”是指声音似乎总是在一台设备上被切碎和扭曲,而在另一台设备上播放得很好。我试过不同品牌的USB耳机,而我的电脑扬声器是Realtek。声音在哪个设备上失真并不是恒定不变的。另一个简单的问题。这个解决方案(在两台设备上播放声音)也适用于windows xp吗?因为自windows XP以来,API发生了变化,因此我提出了问题。谢谢