我一直在這一段時間,但沒有取得任何進展。所以這是我的最後一招! 我正在嘗試向Skype發送系統音頻(我在耳機中聽到的音頻)(讓我的電話中的人聽到我基本聽到的聲音)。我想我會使用Skype4comlib和naudio來做到這一點。使用Naudio系統音頻到Skype
我所做的是創建一個類,它使用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 http://naudio.codeplex.com/如果這就是你要求的=) – Tokfrans
我編譯你的課程時遇到的另一個問題是類Call和Skype。給他們的聲明 –