如何将系统麦克风音频流传输到连接的设备麦克风音频流
我试图附加用于长途电话的USB设备,这些设备具有用于麦克风和扬声器的pnp声音控制器。现在我有两个扬声器和两个麦克风用于输入输出,如下图所示。 。现在我的动机是将音频流从系统麦克风传输到USB麦克风,从USB扬声器传输到系统扬声器。如何将系统麦克风音频流传输到连接的设备麦克风音频流
我试图用虚拟有线软件来解决这个问题,但是这个我需要依靠第三方。什么可以是可以使用C#获得的解决方案。
我没有这方面的知识,所以不知道如何开始。谷歌搜索后,我发现
能帮助我,我不知道怎么办。
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();
}
}
使用此代码我可以发送麦克风音频扬声器,但我怎样才能实现我的任务使用此。
实际上,如果不编写任何自定义驱动程序,就没有办法做到这一点。您无法将音频数据呈现给输入设备。输入设备是为了读取数据。输出设备(扬声器)用于写入数据。
有类似虚拟音频电缆的程序,它们使用自定义驱动程序来绕过这些限制。
任何开源的虚拟驱动程序,可以帮助我.. –
WinDDK包含一些示例。 –
这不是答案,但它会给你一个提示http://www.daveamenta.com/2011-05/programmatically-or-command-line-change-the-default-sound-playback-device-in -windows-7 /它在C++中,但你可以将它编译成DLL或EXE,并从你的C#代码中调用它。 –
你能否详细说明一下,为什么你想这么做?目标是什么?对我来说,看起来你想同时使用系统麦克风和USB麦克风 - 对吧?也许你可以用两个设备来分辨问题,可能会有更好的解决方案。 –
@DanielGilbert usb麦克风只能输入端口,没有用于声音输入的物理麦克风(连接到外部声卡)。我的目标是开发使用c#操作的电话,通过发送命令到我的设备工作完美。如果我将耳机直接连接到我的设备上,它的工作原理非常完美但我想通过连接到系统的耳机交换声音。所以我可以从我的外部硬件中取出麦克风和扬声器插孔。 –