Я рассматриваю все виды звукового API для Android и хотел бы знать, какой из них мне следует использовать.
Моя цель - получить звук с низкой задержкой или, по крайней мере, детерминированное поведение в отношении задержки воспроизведения.
У нас было много проблем, и кажется, что Android Sound API - это дерьмо, поэтому я изучаю возможности.
Проблема, с которой мы столкнулись, заключается в том, что между sound_out.write(sound_samples);
и реальным звуком, воспроизводимым через динамики, имеется значительная задержка. Обычно это около 300 мс. Проблема в том, что на всех устройствах это отличается; некоторые не имеют такой проблемы, но большинство покалечены (однако CS-вызов имеет нулевую задержку). Самая большая проблема с этой нелепой задержкой заключается в том, что на некоторых устройствах эта задержка представляется случайной величиной (то есть она не всегда составляет 300 мс).
Я читаю об OpenSL ES, и я хотел бы знать, имел ли кто-нибудь опыт работы с ним, или это то же самое дерьмо, но упакованное в другую упаковку?
Я предпочитаю иметь собственный доступ, но я не возражаю против косвенного обращения к уровню Java, если могу получить детерминированное поведение: либо задержка должна быть постоянной (для данного устройства), либо я хочу получить доступ в текущую позицию воспроизведения вместо угадывания с диапазоном ошибок ± 300 мс ...
РЕДАКТИРОВАТЬ:
1,5 года спустя я попробовал несколько телефонов Android, чтобы увидеть, как я могу получить максимально возможную задержку для голосовой связи в реальном времени. Используя специализированные инструменты, я измерил задержку волнового пути. Лучшие результаты были более 100 мс, большинство телефонов были в диапазоне 180 мс. У кого-нибудь есть идеи?