2014-03-04 60 views
0

我有一个wpf应用程序,我使用soundPlayer类播放声音(例如铃声)。目前,音调可以在扬声器或耳机上播放(如果插入的话)。 我希望应用程序能够在扬声器上播放音频,即使在插入耳机时也是如此。我知道有些方法可以在android中执行此操作,但在wpf中找不到任何方法。任何帮助表示赞赏。谢谢 !在扬声器和耳机中播放声音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(); 

回答

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中检索到。

+0

谢谢Lukazoid建议Naudio,但我认为我离开它的工作一步之遥。请看看编辑过的问题。建议欢迎。 – user2054702

相关问题