在 PC 上以流的形式实时捕获音频
Capture Audio on PC as a stream in real-time
在 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();
}
}
我可以做类似这段代码的事情吗?但是我想将我的默认音频设备流式传输到另一个音频设备,而不是语音合成。
您可以通过订阅事件来获取字节块。
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();
}
};
在 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();
}
}
我可以做类似这段代码的事情吗?但是我想将我的默认音频设备流式传输到另一个音频设备,而不是语音合成。
您可以通过订阅事件来获取字节块。 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();
}
};