LINUX.ORG.RU

ALSA -EPIPE


0

0

Такая ошибка вылезает, через какое-то время, при захвате аудиоданных в блокируещем режиме и потом звук перестаёт захватываться. Дока говорит, что - «an overrun occurred». Как понимаю моя программа не успевает захватить вовремя. Но как с этим бороться?

★★

Сделать больше буфер? Не обрабатывать данные между чтениями в одном треде?

mv ★★★★★
()
Ответ на: комментарий от mv

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

Booster ★★
() автор топика
Ответ на: комментарий от mv

>Используй aio_read или обычный read в сочетании с hrtimer.
Это как? В принципе отдельный поток сделать можно, но у меня нет уверенности, что он всегда будет вовремя снимать данные. Попробую неблокирующий режим.

Booster ★★
() автор топика
Ответ на: комментарий от mv

Пока решил проблему тупо переинициализировав алсу в случае ошибки. Для моей проги не критично, что иногда происходит сбой. Прога для светоиндикации уровня звука, через lpt порт.

Booster ★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.