如何将系统麦克风音频流传输到连接的设备麦克风音频流

问题描述:

我试图附加用于长途电话的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#操作的电话,通过发送命令到我的设备工作完美。如果我将耳机直接连接到我的设备上,它的工作原理非常完美但我想通过连接到系统的耳机交换声音。所以我可以从我的外部硬件中取出麦克风和扬声器插孔。 –

实际上,如果不编写任何自定义驱动程序,就没有办法做到这一点。您无法将音频数据呈现给输入设备。输入设备是为了读取数据。输出设备(扬声器)用于写入数据。

有类似虚拟音频电缆的程序,它们使用自定义驱动程序来绕过这些限制。

+0

任何开源的虚拟驱动程序,可以帮助我.. –

+0

WinDDK包含一些示例。 –