1

所以我查看了http://channel9.msdn.com/coding4fun/articles/Skype-Voice-Changer。我开始阅读拦截 Skype 音频。

我的理解是,最重要的部分是

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,您可以将 mic-data 从 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 播放时,它反而变慢了。

请给我一条完成此任务的路线。

4

1 回答 1

0

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

于 2012-11-06T10:54:18.767 回答