2016-10-10 3 views
0

Я не могу записать звук с аудиоустройства по умолчанию и воспроизвести его на другом аудиоустройстве. Я не хочу записывать микрофон, но звук устройство ..Как записывать и воспроизводить звук с аудиоустройства по умолчанию

Когда я играю в кино, я могу слышать звук через мои наушники, я хочу, чтобы скопировать этот звук любого аудио устройства я выбираю ..

Если у вас есть какие-либо предложения, оно не должны быть с NAudio ..

Насколько я могу судить, NAudio не может этого сделать.

Это код, я использую для выполнения этой задачи в настоящее время, но он принимает только входной сигнал от моего микрофона: Фрагмент кода с NAudio ..

void playSoundCopy(int dv0) 
{ 
    disposeWave0();// stop previous sounds before starting 
    var waveOut0 = new WaveOut(); 
    waveOut0.DeviceNumber = dv0; 
    wave0 = waveOut0; 

    Defaultwave0 = new WaveIn(); 
    Defaultwave0.DeviceNumber = (int)GetDefaultDevice(Defaultdevice.FriendlyName); 
    var waveinReader0 = new WaveInProvider(Defaultwave0); 
    wave0.Init(waveinReader0); 

    play0 = false; 
    Thread.Sleep(1000); 

    play0 = true; 
    t0 = new Thread(() => { timeline0(); }); 
    t0.IsBackground = true; 
    t0.Start(); 

    Defaultwave0.StartRecording(); 
    wave0.Play(); 
} 

Реальная проблема заключается в самом деле, что я не могу записывать с WaveOut устройство, только WaveIn ..

Работа Результат:

void playSoundCopy(int dv0) 
{ 
    disposeWave0();// stop previous sounds before starting 
    var waveOut0 = new WaveOut(); 
    waveOut0.DeviceNumber = dv0; 
    wave0 = waveOut0; 

    var format0 = Defaultdevice.AudioClient.MixFormat; 
    buffer0 = new BufferedWaveProvider(format0); 
    wave0.Init(buffer0); 

    capture = new WasapiLoopbackCapture(Defaultdevice); 
    capture.ShareMode = AudioClientShareMode.Shared; 
    capture.DataAvailable += CaptureOnDataAvailable; 

    play0 = false; 
    Thread.Sleep(1000); 

    play0 = true; 
    t0 = new Thread(() => { timeline0(); }); 
    t0.IsBackground = true; 
    t0.Start(); 

    capture.StartRecording(); 
    wave0.Play(); 
} 
void CaptureOnDataAvailable(object sender, WaveInEventArgs waveInEventArgs) 
{ 
    try 
    { 
     var itm = new byte[waveInEventArgs.BytesRecorded]; 
     Array.Copy(waveInEventArgs.Buffer, itm, waveInEventArgs.BytesRecorded); 
     buffer0.AddSamples(itm, 0, itm.Length); 
    } 
    catch { } 
} 
+0

С этой небольшой информацией, я думаю, никто не сможет вам помочь. Пожалуйста, объясните подробнее и добавьте в случае необходимости какой-то код/​​больше контекста. –

+0

Я прошу предложений, а не фактического кода, если это не фрагмент кода. – ArchAngel

+0

Возможно, вам сначала нужно включить записывающее устройство, необходимое для этого. См. Эту страницу от смелости, например: http://manual.audacityteam.org/man/tutorial_recording_computer_playback_on_windows.html –

ответ

1

Вы можете записывать звук, отправленное на устройство с помощью WasapiLoopbackCapture. Затем вы можете подключить это к BufferedWaveProvider и использовать это для подачи другого устройства вывода. В то же время будет некоторое время ожидания, поэтому не ожидайте синхронизации двух устройств.

+0

Звучит неплохо, но WasapiLoopbackCapture, это работает с моим аудиоустройством, а не с моим микрофоном? Фрагмент кода будет приятным. – ArchAngel

+0

yes WasapiLoopbackCapture будет записывать выходные данные с звуковой карты. Вы можете найти образец кода в демонстрационном проекте NAudio WPF. –

+0

Возможно ли, чтобы вы дали мне ссылку? – ArchAngel