Как записывать и воспроизводить аудио с аудиоустройства по умолчанию

#c# #wpf #naudio

#c# #wpf #naudio

Вопрос:

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

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

Если у вас есть какие-либо предложения, это не обязательно должно быть с 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 { }
}
  

Комментарии:

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

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

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

4. Извините, но этот пример не работает .. Нулевой звук…

Ответ №1:

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

Комментарии:

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

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

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