Приветик!
Я тут поковырялся в ALSA, и пришёл к печальному выводу, что ихнее API тот еще кал, а как его использовать знает ограниченное кол-во лиц, на слова которых где-то в дебрях ссылаются многие гуглимые источники.
И/или порог вхождения там слишком высок, что понять всё волшебство и красоту мне не по силам.
Короче, решил взять какое-то кроссплатформенное API. Остановился на portaudio. Там сразу рекомендуют для non-glitchy playback/capture использовать callback. Неплохо. Пусть будет callback. Тем более, судя по современным тенденциям, это более удобный и безглючный способ передавать данные в/из DSP (DAC/ADC).
У меня пара вопросов:
1) В какой момент времени выполняется callback? Документация гласит, что «как только аудио API понадобились новые данные». Когда этот момент наступает? Когда все данные (читай - сэмплы) уже проиграны, и брать новые неоткуда? Но ведь в таком случае времени на «предоставление» этих данных и/или генерацию новых в callback-функции крайне мало, и каждая миллисекунда грозит «разрыву» в проигрывавнии.
Или API обычно просит новые данные как только прошлая порция данных начала проигрываться, и времени у нас на генерацию новой порции ровно столько, сколько длится проигрывание (в реальном времени) этой порции (т.е. эквивалентно размеру буффера)?
2) Что случается, если времени будет недостаточно? Например, из-за объемности выполняемого кода (сложности алгоримта?), недостаточному кол-ву процессорного времени (CPU жрут другие процессы, после вызова callback-а тело функции не выполняется, а время отдаётся другим процессам), отсутствию/недостаче данных для выдачи (read() из файла не вернул достаточно байт или вообще не вернул управление и/или аналогичная ситуация с сокетами)? Можно ли просто «дропнуть» недостающую часть пустотой?
3) callback вызывается в отдельном треде?
Буду рад если поделитесь опытом. Буду неистово и искренне рад комментариям waker, i-rinat.
З.Ы. pulseaudio API не предлагать - отличие от portaudio там нет кроссплатформенности
Ответ на:
комментарий
от waker
Ответ на:
комментарий
от i-rinat
Ответ на:
комментарий
от I-Love-Microsoft
Ответ на:
комментарий
от Harald
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от Harald
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от I-Love-Microsoft
Ответ на:
комментарий
от Harald
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от waker
Ответ на:
комментарий
от reprimand
Ответ на:
комментарий
от mittorn
Ответ на:
комментарий
от reprimand
Ответ на:
комментарий
от mittorn
Ответ на:
комментарий
от reprimand
Ответ на:
комментарий
от reprimand
Ответ на:
комментарий
от waker
Ответ на:
комментарий
от reprimand
Ответ на:
комментарий
от waker
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.