Files
alice-backend/station
..
2026-11-13 12:06:09 +03:00
2026-11-13 12:07:38 +03:00
2026-11-11 21:39:29 +03:00

Клиент Mini 2

Клиент собирается в статический ARM64-бинарник для ядра Mini 2. Для захвата он запускает штатный arecord и небольшой armhf-процесс, который вызывает VQE из прошивки. Для вывода используются PulseAudio и штатный aplay в ручных тестах.

cd station
go test ./...
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags='-s -w' -o alice-station .

Собери процесс VQE на машине с Zig из корня репозитория.

zig cc -target arm-linux-gnueabihf.2.28 -mcpu=cortex_a53 -O2 -s \
  -Wall -Wextra -Werror station/vqe/capture.c -ldl -o alice-vqe

Помести alice-vqe и station/vqe-capture.sh с правами на запуск в /data/opt/alice-backend/. Обёртка проверяет SHA-256 штатной libyandex_evil.so перед загрузкой её закрытого ABI. Сверяй ABI заново после смены прошивки. Системные файлы не меняются. Канал plug:default даёт четыре микрофона и два синхронных канала обратной связи динамика при 48 кГц. Пресет yandexmini_2 возвращает vqe_0 в mono PCM16 при 16 кГц после эхоподавления и шумоподавления. Ручной запуск без -vqe-helper берёт один сырой микрофон для диагностики.

На тестовой колонке файлы лежат в /data/opt/alice-backend/. Помести туда бинарник, with-mic.sh и отдельный DEVICE_TOKEN в файле device-token с правами 0600. Для WSS нужны доступ в сеть, корректное время и доверенный набор сертификатов.

Ручной тест с микрофоном

На этой Mini 2 hw:0,1 обычно занят штатным platformd. Скрипт with-mic.sh освобождает микрофон на время теста, даёт не больше 90 секунд и возвращает штатный процесс после выхода. Для остановки нажми Ctrl+C в SSH-сеансе с терминалом.

cd /data/opt/alice-backend
./with-mic.sh ptt -voice-threshold 55

Нажми Enter, дождись сине-фиолетового кольца, затем скажи команду. Настройки -voice-threshold, -silence и -max регулируют порог голоса, паузу в конце и предел длительности. Значение 55 проверено на этой колонке вблизи микрофона.

Локальная активация по фразе

Автозапуск использует встроенный в прошивку Mini 2 детектор «Алиса» из /system/vendor/quasar/spotter_models/activation/alisa. Он получает обработанный vqe_0 и сырой канал выбранного микрофона. Сине-фиолетовое кольцо загорается после локальной активации. Клиент сохраняет начало команды и при произнесении без паузы.

Для ручного сравнения доступна русская модель microWakeWord «Алиса» через флаг -wake-model.

Собери alice-wake-helper командой cargo build --locked --release --target aarch64-unknown-linux-gnu из каталога wake-helper с настроенным ARM64 GNU toolchain. Положи helper и wake-helper.sh в /data/opt/alice-backend. Там же нужен файл alisa.tflite, скачанный из указанной версии модели. Его SHA-256 — 481cf6c180d3b5cbebfa6af47b4f9544c631d05b73cecf51fb8363ab7d143f38. Helper использует приватный ARM64 runtime из каталога spotify/, включая libstdc++.so.6.

Режим записи индивидуальных шаблонов остаётся для ручных экспериментов.

./with-mic.sh enroll -samples 4 -voice-threshold 55
./with-mic.sh wake -voice-threshold 55 -once

При обучении нажимай Enter перед каждым образцом и после включения кольца произноси «Алиса», затем сделай паузу. Клиент сохраняет спектральные признаки в wake-templates.json с правами 0600. На тестовой колонке эти образцы уже записаны. В режиме wake произнеси «Алиса», дождись сине-фиолетового кольца и скажи команду. Флаг -once завершает сеанс после первого успешного ответа. Без флага можно провести несколько ходов за один пробный запуск.

При ручном запуске с шаблонами клиент сопоставляет целый сегмент речи методом DTW и отбрасывает слишком короткие или длинные сегменты. Из-за этого после «Алиса» требуется короткая пауза. Оценки пропусков и ложных срабатываний на расстоянии, под музыку и у разных людей пока нет. Штатный VQE доступен в этом режиме через тот же флаг -vqe-helper.

До локального срабатывания соединение с сервером не открывается. Кольцевой буфер в RAM держит последние 800 мс. Для слитной команды начало потока может включать «Алиса», и сервер убирает это слово с начала распознанного текста. После паузы передаётся только сама команда. Аудио в файл не записывается. Проверенное состояние кнопки mute на этой Mini 2 читается из /sys/class/gpio/gpio414/value, где 1 означает разрешённый микрофон. В mute клиент отбрасывает вход, сбрасывает состояние детектора и прерывает текущую передачу. При недоступном GPIO применяется то же поведение. Состояние можно читать из другого узла через -mute-gpio, если на конкретной ревизии этот сигнал расположен иначе.

Проверка из файла

export DEVICE_TOKEN="$(cat device-token)"
./alice-station -mode file -input /path/to/input.pcm

Этот режим отправляет тестовый файл (mono PCM16LE, 16 кГц, до 30 секунд) и выводит ответ через ALSA (mono PCM16LE, 24 кГц). Микрофон при этом не открывается.

Автозапуск и музыка

Сенсорные кнопки + и − меняют общую громкость музыки и ответов на 10 процентных пунктов. Кольцо показывает уровень от зелёного к красному, а короткий тон звучит с выбранной громкостью. Голосовая команда установки уровня подсвечивает кольцо без звука. Значение сохраняется между запусками. На время запроса и ответа приглушается только музыкальный sink на 7,5 дБ, затем его уровень восстанавливается.

Загрузочный скрипт S99alice запускает наш клиент, а S98alice-music поднимает Soloist и PulseAudio. Штатный S99quasar пропускает запуск, пока существует /data/opt/alice-backend/stock-disabled. Оригинал сохранён как S99quasar.original рядом с клиентом.

Для подготовки зависимостей Spotify запусти скрипт сборки на x86-64 Linux с Docker. Архив содержит проверяемый список файлов и версий. Распаковывай его потоком в /data/opt/alice-backend/spotify, поскольку BusyBox tar на Mini 2 принимает несжатый поток. В spotify/etc/alice.pa установи конфигурацию pulse.conf, а pulse-control.sh скопируй в spotify/pactl. Бинарник music-control собирается для Linux ARM64 из music, ключ Soloist хранится в файле soloist-key с правами 0600. Сессия Spotify Connect в soloist-data/, кэш ограничен 32 МиБ в tmpfs.

Чтобы вернуть штатную Алису, войди по SSH под root и выполни:

cd /data/opt/alice-backend
mount -o remount,rw /
./install-init.sh restore
mount -o remount,ro /
/system/vendor/quasar/q start

Логи текущего запуска находятся в /tmp/alice-station.log, /tmp/alice-pulse.log и /tmp/alice-soloist.log.