2014-12-27 4 views
4

Я был на это некоторое время, но ничего не сделал. Так что это мое последнее средство! Я пытаюсь отправить системный звук (звук, который слышу в наушниках) в Skype (при этом люди в моем разговоре слышат, что я слышу в основном). И я думал, что сделаю это с помощью Skype4comlib и naudio.Системный звук для Skype с использованием 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; 
    } 


} 

Кто-нибудь знает, почему это не работает? У меня больше нет подсказок, что делать дальше.

Любая помощь будет очень признательна!

+0

Невозможно разрешить символ NAudio. Где я могу получить это? –

+1

@YuraZaletskyy http://naudio.codeplex.com/ Если это то, что вы спрашиваете =) – Tokfrans

+0

Другой проблемой, с которой я сталкиваюсь с компиляцией вашего класса, являются классы Call and Skype. Дайте свои объявления также –

ответ

2

Я действительно что-то сделал, но не использовал Skype4COM.

То, что я делал, использовало «Виртуальные кабели» так же, как предлагал Себастьян L, таким образом вы можете контролировать, что происходит и выходит из скайпа. Недостатком является то, что вам нужно установить виртуальные кабели и настроить Skype для их использования.

enter image description here

enter image description here

Кабели будут появляться в аудио устройств в качестве стандартного ввода/вывода.

enter image description here

Я использовал эти кабели VAC и VB cable

Надеется, что это помогает.

+0

Это путь. Спасибо! – Tokfrans

+0

Рад помочь;) –