2016-07-07 173 views
6

我試圖附加用於長途電話的USB設備,這些設備具有用於麥克風和揚聲器的pnp聲音控制器。現在我有兩個揚聲器和兩個麥克風用於輸入輸出,如下圖所示。 <code>Speaker</code>mic。現在我的動機是將音頻流從系統麥克風傳輸到USB麥克風,從USB揚聲器傳輸到系統揚聲器。如何將系統麥克風音頻流傳輸到連接的設備麥克風音頻流

我試圖用虛擬有線軟件來解決這個問題,但是這個我需要依靠第三方。什麼可以是可以使用C#獲得的解決方案。

我沒有這方面的知識,所以不知道如何開始。谷歌搜索後,我發現

  1. CS Core
  2. N Audio

能幫助我,我不知道怎麼辦。

public partial class Form1 : Form 
{ 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void button1_Click(object sender, EventArgs e) 
    { 
     List<NAudio.Wave.WaveInCapabilities> sources = new List<NAudio.Wave.WaveInCapabilities>(); 

     for (int i = 0; i < NAudio.Wave.WaveIn.DeviceCount; i++) 
     { 
      sources.Add(NAudio.Wave.WaveIn.GetCapabilities(i)); 
     } 

     sourceList.Items.Clear(); 

     foreach (var source in sources) 
     { 
      ListViewItem item = new ListViewItem(source.ProductName); 
      item.SubItems.Add(new ListViewItem.ListViewSubItem(item, source.Channels.ToString())); 
      sourceList.Items.Add(item); 
     } 
    } 

    NAudio.Wave.WaveIn sourceStream,sourceStream1 = null; 
    NAudio.Wave.DirectSoundOut waveOut = null; 

    private void button2_Click(object sender, EventArgs e) 
    { 
     if (sourceList.SelectedItems.Count == 0) return; 

     int deviceNumber = sourceList.SelectedItems[0].Index; 

     sourceStream = new NAudio.Wave.WaveIn(); 
     sourceStream.DeviceNumber = 0; 
     sourceStream.WaveFormat = new NAudio.Wave.WaveFormat(44100, NAudio.Wave.WaveIn.GetCapabilities(deviceNumber).Channels); 



     NAudio.Wave.WaveInProvider waveIn = new NAudio.Wave.WaveInProvider(sourceStream1); 
     sourceStream. 
     waveOut = new NAudio.Wave.DirectSoundOut(); 
     waveOut.Init(waveIn); 

     sourceStream1.StartRecording(); 
     waveOut.Play(); 
    } 

    private void button3_Click(object sender, EventArgs e) 
    { 
     if (waveOut != null) 
     { 
      waveOut.Stop(); 
      waveOut.Dispose(); 
      waveOut = null; 
     } 
     if (sourceStream != null) 
     { 
      sourceStream.StopRecording(); 
      sourceStream.Dispose(); 
      sourceStream = null; 
     } 
    } 

    private void button4_Click(object sender, EventArgs e) 
    { 
     button3_Click(sender, e); 
     this.Close(); 
    } 
} 

使用此代碼我可以發送麥克風音頻揚聲器,但我怎樣才能實現我的任務使用此。

+0

這不是答案,但它會給你一個提示http://www.daveamenta.com/2011-05/programmatically-or-command-line-change-the-default-sound-playback-device-in -windows-7 /它在C++中,但你可以將它編譯成DLL或EXE,並從你的C#代碼中調用它。 –

+0

你能否詳細說明一下,爲什麼你想這麼做?目標是什麼?對我來說,看起來你想同時使用系統麥克風和USB麥克風 - 對吧?也許你可以用兩個設備來分辨問題,可能會有更好的解決方案。 –

+0

@DanielGilbert usb麥克風只能輸入端口,沒有用於聲音輸入的物理麥克風(連接到外部聲卡)。我的目標是開發使用c#操作的電話,通過發送命令到我的設備工作完美。如果我將耳機直接連接到我的設備上,它的工作原理非常完美但我想通過連接到系統的耳機交換聲音。所以我可以從我的外部硬件中取出麥克風和揚聲器插孔。 –

回答

2

實際上,如果不編寫任何自定義驅動程序,就沒有辦法做到這一點。您無法將音頻數據呈現給輸入設備。輸入設備是爲了讀取數據。輸出設備(揚聲器)用於寫入數據。

有類似虛擬音頻電纜的程序,它們使用自定義驅動程序來繞過這些限制。

+0

任何開源的虛擬驅動程序,可以幫助我.. –

+0

WinDDK包含一些示例。 –