Я получил ночную сборку «Furby для Android» из закрытого репозитория и сразу отправил её на лабораторный стенд. Первый запуск показал: игрушка говорит на семи языках, танцует под разные уровни громкости и распознаёт хлопки через микрофон. Код написан смесью Kotlin и C++17, грузит нейросеть весом 22 МБ, а стартовый холодный запуск проходит за 910 мс на Snapdragon 778G.

Аудиотракт
Драйвер Oboe выбран для вывода звука с задержкой 12 мс. Вместо стандартных WAV-семплов разработчик упаковал голос Furby в ADPCM-контейнер, а фоновые треки — в Opus 48 кГц. Компрессия снизила объём пакета на 37 %. Pitch-shift выполняет фреймворк Superpowered: форманта плавает в диапазоне ±4 септим, что придаёт игрушке фирменный «птичий» тембр. Для шумоподавления задействован спектральный субтрактор, его коэффициенты хранятся в assets/noise_prof.dat. Сторонний аудио движок не подключён, благодаря чему не возникает конфликтов с смешением потоков в AudioFlinger.
Поведенческое ядро
Эмоциональная логика строится на конечном автомате с 52 состояниями. Таблица переходов сжата c помощью алгоритма RePair — частотные пары заменены нетерминалами, что уменьшило JSON-описание с 420 кБ до 118 кБ. Обучение эмоций выполнено через Proximal Policy Optimization, параметры сети зашифрованы ChaCha20-Poly1305, ключ динамически вычисляется из сертификата приложения. Для детекции хлопков выбран MFCC-экстрактор + LSTM-классификатор. Латентный вектор сверяется с текущей фазой автомата, избегая когнитивного диссонанса между жестами и аудио-репликами.
Энергопрофиль
На графике батареи видно три пика: запуск, активация камерыры, вывод светодиодов. Камера берёт 78 мA при 60 fps, поэтому включается через CameraX ровно на 200 мс — достаточно, чтобы распознать лицо владельца. Для светодиодов применён dithering с псевдошумовой последовательностью, уменьшающей видимое мерцание при 40 Гц и экономящей 12 мA. WakeLock держится в режиме PARTIAL, но сбрасывается при переводе процессора в C-state 3. Профилировщик Perfetto показал: горячие циклы уходят в libemotion.so, поэтому я распараллелил матричные операции через NEON SIMD — энергопотребление просело на 9 %.
Я оставил в репозитории pull-request с Auto-DLS для low-dpi экранов и предложил вынести речевые модели в dynamic-feature-module, чтобы сократить первоначальный APK. После мержа игрушка станет ещё разговорчивее, а установка — быстрее.













