2016-10-20 4 views
0

Проблема:Portaudio зависает при чтении/записи на одном устройстве

я не могу добиться работы аудио вход и выход одновременно на 32-битной системе Ubuntu с процессором ARM v7l, и я не понять почему.

Резюме:

Я написал PortAudio код, который успешно инициализирует, записывает, обрабатывает и воспроизводит живой звук на нескольких различных аппаратных устройств, работающих на основных платформах и архитектуры (Windows, Linux, OS X, как x32, так и x64).

По какой-то причине на платформе ARM v7l мне больше всего нужно работать (NVIDIA Jetson), звуковые обратные вызовы прекращаются после очень короткого периода работы. Это всегда после некоторого произвольного количества кадров, которое является постоянным между прогонами и разными Jetsons (с разными ОС).

Обнаружено, что это происходит только при инициализации потока PortAudio для ввода и вывода, но если я пройду nullptr для outputParams, все будет работать нормально.

Что я пробовал:

  • Каждый доступный бэкенд (Джек, OSS, ALSA и т.д.)
  • Изменение частоты дискретизации, входных и выходных каналов.
  • Удаление этапа обработки звука, который мы выполняем, чтобы исключить латентность в качестве проблемы, превратив устройство в простую петлевую установку.
  • Различные аппаратные устройства, такие как iO4, плата XMOS, а также внешние и встроенные микрофоны и колонки на многочисленных компьютерах от разных производителей.
  • Добавление обратно и удаление некоторого кода в источнике PortAudio, который упоминает потенциальные проблемы с блокировкой блокировки на некоторых платформах (извините за неопределенность, но не может точно запомнить, где --- grep 'ing показывает много возможных мест, но определенно не имеет исчерпали эту опцию).

Диагноз:

Это кажется ошибка в Portaudio, и я нашел bug reports документирования подобного поведения. Я следую очень простым документально подтвержденным процедурам идентификации аппаратного устройства, которое я хочу использовать, извлечения соответствующих свойств и подготовки моего потока соответственно. Опять же, он работает почти всюду.

Нужно ли кто-нибудь больше информации diagonose это или есть возможное объяснение , эксперимент или временный обходной путь?

ответ

0

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

Я проходил LowLatency в параметрах, но аппаратное обеспечение не поддерживало. Умножение константы сразу же решило проблему.

Хотя он по-прежнему периодически висит по таинственным причинам, это уже не всегда зависает. Я предполагаю, что игра с латентностью приблизит меня к постоянному решению.

Решение:

Регулировка входной/выходной задержки.

 Смежные вопросы

  • Нет связанных вопросов^_^