Files
alice-backend/station/README.md
T

63 lines
6.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Клиент Mini 2
Клиент собирается в статический ARM64-бинарник для ядра Mini 2. Для захвата и вывода он запускает штатные `arecord` и `aplay`, которые на этой прошивке собраны для armhf.
```sh
cd station
go test ./...
CGO_ENABLED=0 GOOS=linux GOARCH=arm64 go build -trimpath -ldflags='-s -w' -o alice-station .
```
На тестовой колонке файлы лежат в `/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-сеансе с терминалом.
```sh
cd /data/opt/alice-backend
./with-mic.sh ptt -voice-threshold 55
```
Нажми Enter, дождись сине-фиолетового кольца, затем скажи команду. Настройки `-voice-threshold`, `-silence` и `-max` регулируют порог голоса, паузу в конце и предел длительности. Значение 55 проверено на этой колонке вблизи микрофона.
## Локальная активация по фразе
```sh
./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 и отбрасывает слишком короткие или длинные сегменты. Из-за этого после «Алиса» требуется короткая пауза. Оценки пропусков и ложных срабатываний на расстоянии, под музыку и у разных людей пока нет. Клиент использует один канал микрофона и простой даунсемплинг, AEC и прерывание речи в ответе отсутствуют.
До локального срабатывания соединение с сервером не открывается. После сигнала начало команды буферизуется в RAM, а слово активации остаётся на колонке. Проверенное состояние кнопки mute на этой Mini 2 читается из `/sys/class/gpio/gpio414/value`, где `1` означает разрешённый микрофон. В mute клиент отбрасывает вход, сбрасывает состояние детектора и прерывает текущую передачу. При недоступном GPIO применяется то же поведение. Состояние можно читать из другого узла через `-mute-gpio`, если на конкретной ревизии этот сигнал расположен иначе.
## Проверка из файла
```sh
export DEVICE_TOKEN="$(cat device-token)"
./alice-station -mode file -input /path/to/input.pcm
```
Этот режим отправляет тестовый файл (mono PCM16LE, 16 кГц, до 30 секунд) и выводит ответ через ALSA (mono PCM16LE, 24 кГц). Микрофон при этом не открывается.
## Автозапуск и музыка
Загрузочный скрипт `S99alice` запускает наш клиент, а `S98alice-music` поднимает Soloist и PulseAudio. Штатный `S99quasar` пропускает запуск, пока существует `/data/opt/alice-backend/stock-disabled`. Оригинал сохранён как `S99quasar.original` рядом с клиентом.
Для подготовки зависимостей Spotify запусти [скрипт сборки](../scripts/build-spotify-runtime.sh) на x86-64 Linux с Docker. Архив содержит проверяемый список файлов и версий. Распаковывай его потоком в `/data/opt/alice-backend/spotify`, поскольку BusyBox tar на Mini 2 принимает несжатый поток. В `spotify/etc/alice.pa` установи конфигурацию [pulse.conf](pulse.conf), а `pulse-control.sh` скопируй в `spotify/pactl`. Бинарник `music-control` собирается для Linux ARM64 из [music](../music), ключ Soloist хранится в файле `soloist-key` с правами `0600`. Сессия Spotify Connect в `soloist-data/`, кэш ограничен 32 МиБ в tmpfs.
Чтобы вернуть штатную Алису, войди по SSH под root и выполни:
```sh
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`.