BotSharp/tests/BotSharp.Test.RealtimeVoice/SpeakOutput.cs
2025-04-14 01:25:16 -05:00

41 lines
936 B
C#

using NAudio.Wave;
namespace BotSharp.Test.RealtimeVoice;
public class SpeakerOutput : IDisposable
{
BufferedWaveProvider _waveProvider;
WaveOutEvent _waveOutEvent;
public SpeakerOutput()
{
WaveFormat outputAudioFormat = new(
rate: 24000,
bits: 16,
channels: 1);
_waveProvider = new(outputAudioFormat)
{
BufferDuration = TimeSpan.FromMinutes(5),
DiscardOnBufferOverflow = false
};
_waveOutEvent = new();
_waveOutEvent.Init(_waveProvider);
_waveOutEvent.Play();
}
public void EnqueueForPlayback(byte[] audioData)
{
byte[] buffer = audioData?.ToArray() ?? [];
_waveProvider.AddSamples(buffer, 0, buffer.Length);
}
public void ClearPlayback()
{
_waveProvider.ClearBuffer();
}
public void Dispose()
{
_waveOutEvent?.Dispose();
}
}