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

时间:2016-07-07 08:16:34

标签: c# .net audio-streaming naudio cscore

我正在尝试连接用于远程呼叫的USB设备,它具有用于麦克风和扬声器的pnp声音控制器。现在我有两个扬声器和两个麦克风用于输入输出,如下图所示。<code>Speaker</code> mic。现在我的动机是将音频流从系统麦克风传输到USB麦克风,从USB扬声器传输到系统扬声器。

我试图用虚拟有线电视软件解决这个问题但是我需要依赖第三方。使用c#可以获得什么样的解决方案。

我对此并不了解,所以不知道如何开始。谷歌搜索后我找到了

  1. CS Core
  2. N Audio
  3. 可以帮助我,我不知道如何。

     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();
        }
    }
    

    使用此代码我可以将麦克风音频发送给扬声器但是如何使用它来实现我的任务。

1 个答案:

答案 0 :(得分:2)

实际上没有编写任何自定义驱动程序就无法做到这一点。您无法将音频数据渲染到输入设备。输入设备用于读取数据。输出设备(扬声器)用于写入数据。

有一些程序,如虚拟音频线,它们使用自定义驱动程序来绕过这些限制。