【问题标题】:System audio to Skype using Naudio使用 Nadio 将系统音频传输到 Skype
【发布时间】:2014-12-27 12:23:59
【问题描述】:

我在这方面已经有一段时间了,但没有取得任何进展。所以这是我最后的手段! 我正在尝试将系统音频(我在耳机中听到的音频)发送到 Skype(让我通话中的人基本上听到我听到的内容)。我想我会使用 Skype4comlib 和 naudio 来做到这一点。

我所做的是创建一个使用WasapiLoopbackCaptureWaveFileWriter 将临时数据写入.wav 文件的类,并使用SkypeSystemAudio.set_InputDevice 方法重定向音频。但是当我和某人说话并且我试图开始录音时,那个人不再听到我的声音了。我只是完全安静下来,没有向那个人播放任何声音。

我认为最好把全班都贴出来,因为这样更容易理解所有内容。

public class SkypeSystemAudio
{
    public NAudio.Wave.WasapiLoopbackCapture capture;
    NAudio.CoreAudioApi.MMDevice device;
    NAudio.Wave.WaveFileWriter writer;
    private Call CurrentCall = null;
    private Skype SkypeApplet;
    private const int SkypeProtocol = 9;
    private bool IsRecording = false;
    public string tempfilepath = System.IO.Directory.GetCurrentDirectory() + @"\temp.wav";
    #region Public
    public void Initialize()
    {
        device = NAudio.Wave.WasapiLoopbackCapture.GetDefaultLoopbackCaptureDevice();
        Init();
    }
    public void Initialize(NAudio.CoreAudioApi.MMDevice device)
    {
        this.device = device;
        Init();
    }
    public void StartRecording()
    {
        capture.StartRecording();
        if (CurrentCall != null)
        {

            CurrentCall.set_OutputDevice(TCallIoDeviceType.callIoDeviceTypeFile, tempfilepath);
            IsRecording = true;
        }

    }
    public void StopRecording()
    {
        capture.StopRecording();
        if (CurrentCall != null)
        {

            CurrentCall.set_OutputDevice(TCallIoDeviceType.callIoDeviceTypeFile, "");

        }
    }
    #endregion


    private void Init()
    {
        capture = new WasapiLoopbackCapture(device);
        capture.ShareMode = NAudio.CoreAudioApi.AudioClientShareMode.Shared;
        capture.DataAvailable += capture_DataAvailable;
        capture.RecordingStopped += capture_RecordingStopped;

        WaveFormat format = new WaveFormat(16000, 1); // skype wants 16 Bit samples, 16khz, mono WAV file
        //tried using the standard waveformat in the device object too. Didn't work though.

        writer = new WaveFileWriter(tempfilepath, format );

        SkypeApplet = new Skype();
        SkypeApplet.Attach(SkypeProtocol, true);
        SkypeApplet.CallStatus += SkypeApplet_CallStatus;

    }

    void SkypeApplet_CallStatus(Call pCall, TCallStatus Status)
    {
        if (Status == TCallStatus.clsRinging)
        {
            CurrentCall = pCall;
            pCall.Answer();
        }
    }

    void capture_DataAvailable(object sender, WaveInEventArgs e)
    {
        if (writer != null)
            writer.Write(e.Buffer, 0, e.BytesRecorded);
    }

    void capture_RecordingStopped(object sender, StoppedEventArgs e)
    {
        IsRecording = false;
    }


}

有谁知道为什么这不起作用?我不知道下一步该做什么了。

任何帮助将不胜感激!

【问题讨论】:

  • 无法解析符号 NAudio。我在哪里可以买到?
  • @YuraZaletskyy naudio.codeplex.com 如果这就是你的要求 =)
  • 我在编译您的课程时遇到的另一个问题是 Call 和 Skype 课程。也给出他们的声明
  • @YuraZaletskyy Google Skype4COM 并下载 .dll 文件。现在好像没有官方下载链接了。要么尝试 Nuget,要么正如我所说的谷歌的 dll
  • 还有一个问题。你如何使用你的班级?我创建了 windows 应用程序,并编译了你的类。你如何创建你的类的实例,你如何将它加入到 Skype 中?

标签: c# audio naudio skype4com


【解决方案1】:

我实际上做过一些类似的事情,但没有使用 Skype4COM。

我所做的是使用“虚拟电缆”,就像 Sebastian L 建议的那样,这样您就可以控制进出 Skype 的内容,缺点是您需要安装虚拟电缆并配置 Skype 以使用它们。

电缆将作为标准输入/输出出现在音频设备中。

我用过VACVB cable这些电缆

希望对你有帮助。

【讨论】:

  • 这是要走的路。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-05-26
  • 1970-01-01
  • 2018-07-30
  • 1970-01-01
  • 1970-01-01
  • 2014-09-21
  • 1970-01-01
  • 2019-09-05
相关资源
最近更新 更多