47 lines
2.4 KiB
Markdown
47 lines
2.4 KiB
Markdown
# Lyngvo — AI Pronunciation Trainer (Italian) MVP
|
|
|
|
## Концепция
|
|
|
|
Веб-приложение для тренировки итальянского произношения:
|
|
|
|
1. Пользователь вводит текст (слово/фразу)
|
|
2. Приложение синтезирует эталон (TTS)
|
|
3. Пользователь записывает свой голос (MediaRecorder)
|
|
4. Приложение транскрибирует запись (Whisper), сравнивает с оригиналом
|
|
5. Показывает: similarity score, выделяет пропущенные/лишние слова
|
|
6. Воспроизводит target → пауза → user (stereo опционально)
|
|
|
|
## Tech stack (утверждён)
|
|
|
|
- **Frontend:** HTML + JS (чистый, без React)
|
|
- **Audio:** Web Audio API, MediaRecorder API
|
|
- **TTS:** Web Speech API (`speechSynthesis`) — бесплатно, итальянский голос есть
|
|
- **STT:** требуется внешний Whisper API (aillm.ru не поддерживает)
|
|
- **Бэкенд:** отсутствует (MVP — только статика)
|
|
- **DevOps:** minikube / k8s кластер `5.172.178.213`, nginx-ingress
|
|
|
|
## Что уже сделано
|
|
|
|
- DNS: `lang.kube5s.ru` A → `5.172.178.213`
|
|
- Проект будет в отдельной репе (пока не создана)
|
|
- Модель aillm.ru: `gpt-oss-120b` — только текст, STT/TTS не поддерживаются
|
|
|
|
## Что делать
|
|
|
|
1. Создать репу (локально `/home/naeel/lyngvo/` + Gitea на ВМ)
|
|
2. Развернуть HTML-приложение в кластере (nginx-pod + ingress)
|
|
3. Реализовать UI: поле ввода, кнопки Generate / Play TTS / Record / Compare
|
|
4. TTS через Web Speech API
|
|
5. Запись через MediaRecorder → blob → отправить на Whisper API
|
|
6. Сравнение текстов (similarity score, highlight diff)
|
|
7. Playback: target → 300-800ms пауза → user
|
|
8. Опционально: stereo (left=target, right=user)
|
|
9. Настроить HTTPS для `lang.kube5s.ru` (cert-manager / Let's Encrypt)
|
|
|
|
## Контакты/доступ
|
|
|
|
- ВМ: `naeel@5.172.178.213` ключ `~/.ssh/naeel_vm_id_ed25519`
|
|
- Кластер: kubectl (там же на ВМ)
|
|
- S3: `sless-functions` на `s3.msk-1.ngcloud.ru`
|
|
- AI ключ: `sk-ucI5YvOticoOQ9Kuj5K9mQ` (aillm.ru, только текст)
|