41 lines
936 B
C#
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();
|
|
}
|
|
} |