我有一个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();
答案 0 :(得分:3)
我的回答是假设您使用的是计算机中的多个输出设备,而不仅仅是扬声器上的耳机插孔。
SoundPlayer
始终使用默认输出设备播放而无法更改它。另一种方法是使用诸如NAudio
之类的库,它提供了更多选项。
This article提供了如何使用NAudio更改音频输出设备的代码示例。
通过使用多个WaveOut
实例可以满足您的问题。
var waveOut1 = new WaveOut();
waveOut1.DeviceNumber = 0; // First device
var waveOut2 = new WaveOut();
waveOut2.DeviceNumber = 1; // Second device
可以从WaveOut.DeviceCount
检索设备总数。