【发布时间】:2014-12-27 12:23:59
【问题描述】:
我在这方面已经有一段时间了,但没有取得任何进展。所以这是我最后的手段! 我正在尝试将系统音频(我在耳机中听到的音频)发送到 Skype(让我通话中的人基本上听到我听到的内容)。我想我会使用 Skype4comlib 和 naudio 来做到这一点。
我所做的是创建一个使用WasapiLoopbackCapture 和WaveFileWriter 将临时数据写入.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 中?