Захват аудио на P C в виде потока в режиме реального времени - PullRequest
3 голосов
/ 28 января 2020

в NAudio вы можете захватывать звук, используя этот код

capture.Start();
Console.ReadKey();
capture.Stop();

, но я не хочу ждать capture.Stop(); я хочу получить доступ к захвату и немедленно передать его на другое аудиоустройство, например в CsCore вы можете передавать синтез речи с помощью этого кода

using (var stream1 = new MemoryStream())
     using (var speechEngine1 = new SpeechSynthesizer())
     {
       speechEngine1.SetOutputToWaveStream(stream1);
       speechEngine1.Speak(text_to_read);
       using (var waveOut1 = new CSCore.SoundOut.WaveOut { 
            Device = new WaveOutDevice(audio_device_id) })
            using (var waveSource1 = new MediaFoundationDecoder(stream1))
                 {
                  waveOut1.Initialize(waveSource1);
                  waveOut1.Play();
                  waveOut1.WaitForStopped();
                  }
      }

Могу ли я сделать что-то похожее на этот код, но вместо синтеза речи я хочу передать потоковое аудиоустройство по умолчанию на другое аудиоустройство.

1 Ответ

3 голосов
/ 28 января 2020

Вы можете получить куски байтов, подписавшись на событие. https://github.com/naudio/NAudio/blob/master/Docs/WasapiLoopbackCapture.md

capture.DataAvailable += (s, a) =>
{
    writer.Write(a.Buffer, 0, a.BytesRecorded);
    if (writer.Position > capture.WaveFormat.AverageBytesPerSecond * 20)
    {
        capture.StopRecording();
    }
};
...