Использования BufferedWaveProvider
для воспроизведения аудио образцов, которые хранятся в базе данных double[]
NAudio воспроизведения в образцах памяти приводит к задержкам и неэстетичные пробела в звуке
_bufferedWaveProvider = new BufferedWaveProvider(Format)
{
DiscardOnBufferOverflow = true,
BufferDuration = TimeSpan.FromSeconds(5)
};
public void Consume(double[] samples, int offset, int count)
{
samples.Paginate<double, float>(offset, count)
.ForEach(x =>
{
byte[] consumeBuffer = x.ToBytes(ref _consumeBuffer);
_bufferedWaveProvider.AddSamples(consumeBuffer, 0, _consumeBuffer.Length);
});
}
звука при воспроизведении производят пробела в звуке. Образцы отправляются внутри метода Consume()
на каждые 100 мс. Есть ли проблема, что WaveOut()
играет быстрее, чем мы называем метод Consume()
? Как синхронизировать это чтение и воспроизведение.
API waveOut по умолчанию использует модель pull. Вы и/или NAudio каким-то образом превратили его в модель push, так что да, возможно, что вы не называете 'Consume' достаточно быстрым. Другая возможность заключается в том, что вы вызываете ее быстро, и буфер отбрасывается ('DiscardOnBufferOverflow'). Вы не показали, как это называется, так что невозможно дать надежный ответ. – jaket