如何将Line-In Live Recording和播放的声音文件混合到一个skype输入流中?

时间:2012-11-05 00:00:14

标签: c# naudio

所以我看了http://channel9.msdn.com/coding4fun/articles/Skype-Voice-Changer。我开始阅读Intercepting Skype Audio。

据我所知,最重要的部分是

void OnMicServerExecute(object sender, DataReceivedEventArgs args)
{
  toolStripStatusLabel1.Text = "Got " + args.Buffer.Length + " bytes";
  if (outStream != null)
  {
    // give the input audio to the beginning of our audio graph
    bufferStream.SetLatestInBuffer(args.Buffer);
    // process it out through the effects
    outputStream.Read(args.Buffer, 0, args.Buffer.Length);
    // play it back
    outStream.Write(args.Buffer, 0, args.Buffer.Length);
  }
}

因此,您设置了一个TCPServer,您可以将Skype数据从Skype流式传输到。然后用修改后的数据替换流,并将其提供给outStream,然后再将其传递到另一端。所以outputStream必须以某种方式包含我的内容。这就是问题所在。我的麦克风连接LINE-IN。我希望LINE-IN流与我正在播放的声音文件混合使用

void abspielen(string Dateiname, float ZielAmplitude)
{
  Klangwiedergabegeraet = new WaveOutEvent();
  Klangwiedergabegeraet.DeviceNumber = cbAusgabegeraete.SelectedIndex;
  timer1.Enabled = true;
  ISampleProvider StueckchenHalter = null;
  try
  {
    StueckchenHalter = CreateInputStreamS(Dateiname,ZielAmplitude);
  }
  catch (Exception createException)
  {
    MessageBox.Show(String.Format("{0}", createException.Message), "Error Loading File");
      return;
  }
  try
  {
    Klangwiedergabegeraet.Init(new SampleToWaveProvider(StueckchenHalter));
  }
  catch (Exception initException)
  {
    MessageBox.Show(String.Format("{0}", initException.Message), "Error Initializing Output");
      return;
  }
  Klangwiedergabegeraet.Play();
}

并转发给Skype。

我在将混合器缠绕在头上时遇到问题,使得可以通过

交付的e.buffer使用了一些东西。
void waveInStream_DataAvailable(object sender, WaveInEventArgs e)

并流式传输。当服务器启动时我没有使用混音器,而是在首先播放时使用波流,音量会减小并且速度会增加。当我听到skype播放时,它会全部变慢。

请给我一条完成此任务的途径。

1 个答案:

答案 0 :(得分:0)

您需要使用BufferedWaveProvider。当您从WaveIn收到数据时,请将收到的数据放入BufferedWaveProvider。然后,您可以将其与来自Skype的输入混合,或者完全替换它。