Я хочу использовать NAudio для потоковой передачи аудиоданных. Я понял, что вы можете использовать IWaveProvider следующим образом:
public abstract class WaveProviderFloat : IWaveProvider
{
private WaveFormat m_WaveFormat;
protected WaveProviderFloat()
{
SetWaveFormat(48000, 2);
}
protected WaveProviderFloat(int aSampleRate, int aChannels)
{
SetWaveFormat(aSampleRate, aChannels);
}
public void SetWaveFormat(int aSampleRate, int aChannels)
{
this.m_WaveFormat = WaveFormat.CreateIeeeFloatWaveFormat(aSampleRate, aChannels);
}
public int Read(byte[] aBuffer, int aOffset, int aCount)
{
WaveBuffer waveBuffer = new WaveBuffer(aBuffer);
int samplesRequired = aCount / 4;
int samplesRead = Read(waveBuffer.FloatBuffer, aOffset / 4, samplesRequired);
return samplesRead * 4;
}
public abstract int Read(float[] aBuffer, int aOffset, int aSampleCount);
public WaveFormat WaveFormat => m_WaveFormat;
}
И в вашей программе вы можете инициализировать его так:
var testFloatProvider = new TestFloatProvider();
var waveOut = new WaveOut();
waveOut.Init(testFloatProvider);
waveOut.Play();
Это пока правильно? У меня есть только одна проблема с блоком чтения, где всегда создается новый WaveBuffer:
WaveBuffer waveBuffer = new WaveBuffer(aBuffer);
Я не совсем понимаю, почему я должен делать это таким образом. Как насчет производительности и сбора мусора здесь? Спасибо за ответы.