naudio waveProvider.AddSamples, вызывающий сбой - PullRequest
1 голос
/ 21 июля 2011
private unsafe static void AudioStreamCallback(IntPtr buff, Int32 size) 
{
    byte[] samples = new byte[size];
    Marshal.Copy(buff, samples, 0, size);

    waveProvider.AddSamples(samples, 0, size);
    bytes_played += size;
}

В приведенном выше коде buff возвращается из нативной библиотеки DLL, написанной в C.Для регистрации я напечатал количество байтов, добавленных к образцу.Основываясь на этом журнале, я получаю указанную ниже ошибку после воспроизведения около 2,4 Мб сэмплов.

Необработанное исключение: System.InvalidOperationException: полный буфер в NAudio.Wave.BufferedWaveProvider.AddSamples (Byte []), Смещение Int32, число Int32)

Нужно ли освободить некоторый буфер или обязательно очистить старые записи перед добавлением новых образцов?Я посмотрел на исходный код, но не нашел ничего, связанного с размером буфера.Я что-то упускаю.

Спасибо за вашу помощь.

1 Ответ

3 голосов
/ 22 июля 2011

BufferedWaveProvider поддерживается кольцевым буфером фиксированного размера. Как только он заполнен, он генерирует исключение (более новые версии NAudio позволяют вам настроить, будет ли выброшено исключение или аудио отбрасывается). Последний код также позволяет вам установить BufferDuration перед вашим первым вызовом на AddSamples, чтобы увеличить размер буфера со значения по умолчанию для аудио на 5 секунд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...