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(); } }