Я реализую программу, которая считывает аудиопоток с устройства ввода и отправляет его на устройство вывода с помощью NAudio. Для этого я получаю данные из входного потока, используя WaveIn
и его событие DataAvailable
. Для записи данных я собираюсь использовать WaveOut
, что также означает, что мне нужно использовать некоторую реализацию IWaveProvider
. Реализация этого для моих нужд кажется довольно простой с использованием очереди. Кроме одного: что должно произойти, когда очередь пуста и вызывается метод Read()
? Я не нашел ничего об этом в документации. Варианты, которые я думаю, что у меня есть:
- Метод должен блокироваться до тех пор, пока не будут доступны некоторые данные.
- Метод немедленно возвращает 0, указывая, что в настоящее время нет доступных данных.
- Заполните буфер нулями.
Я думал об использовании варианта 1 или 2, но потом обнаружил, что BufferedWaveProvider
(и WaveInProvider
, который использует BufferedWaveProvider
внутри), который использует вариант 3. Из этого я сделал вывод, что вариант 3 предпочтительнее.
Вопрос в том, сделал ли я правильный вывод и должен ли я использовать вариант 3? Что произойдет, если я воспользуюсь вариантами 1 или 2? Это даже сработает?