Библиотека Naudio - преобразование SignalGenerator в StreamPlayer
Я создаю в Naudio звуковую волну через SignalGenerator:
var beep1 = (new SignalGenerator() { Frequency = 800, Gain = 0.2 }).Take(TimeSpan.FromSeconds(1));
using (var wo = new WaveOutEvent())
{
wo.Init(beep1 );
wo.Play();
while (wo.PlaybackState == PlaybackState.Playing)
{
Thread.Sleep(500);
}
}
При этом, хочу воспроизвести этот сигнал через StreamPlayer (для постоянного потокового воспроизведения):
public class StreamPlayer : IDisposable
{
private SoundStream stream;
private WaveOutEvent waveOut;
private WaveFileReader reader;
public StreamPlayer(int sampleRate = 8000)
{
stream = new SoundStream(sampleRate);
waveOut = new WaveOutEvent();
}
/// <summary>
/// Write audio samples into stream
/// </summary>
public void Write(params short[] samples)
{
stream.Write(samples);
}
/// <summary>
/// Write audio samples into stream
/// </summary>
public void Write(IEnumerable<short> samples)
{
stream.Write(samples);
}
/// <summary>
/// Plays sound
/// </summary>
public void PlayAsync()
{
ThreadPool.QueueUserWorkItem((_) =>
{
reader = new WaveFileReader(stream);
waveOut.Init(reader);
waveOut.Play();
});
}
/// <summary>
/// Stop playing
/// </summary>
public void Stop()
{
waveOut.Stop();
}
/// <summary>
/// Volume
/// </summary>
public float Volume
{
get { return waveOut.Volume; }
set { waveOut.Volume = value; }
}
/// <summary>
/// Count of unread bytes in buffer
/// </summary>
public int Buffered
{
get { return stream.Buffered; }
}
public void Dispose()
{
waveOut.Dispose();
reader.Dispose();
stream.Dispose();
}
}
Как мне запихать SignalGenerator в StreamPlayer? Получить из SignalGenerator short?