MCPcopy Index your code
hub / github.com/LetovKai/call-translator

github.com/LetovKai/call-translator @v0.1.0

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.0 ↗ · + Follow
217 symbols 459 edges 22 files 57 documented · 26%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

Realtime Call Translator

English version

Переводчик речи в реальном времени для видео- и голосовых звонков. Переводит обе стороны разговора на лету: вы говорите на своём языке, собеседник слышит на своём, и наоборот.

Как это работает: Аудио с микрофона проходит через распознавание речи (STT), переводится LLM, синтезируется обратно в речь (TTS) и направляется в звонок. То же самое происходит в обратную сторону для аудио собеседника.

Поддерживает 29 языков с STT, переводом и TTS. Голосовые модели от Piper — скачиваются прямо из веб-интерфейса.

macOS License

Внимание: только macOS (14+). Использует CoreAudio и cpal для захвата аудио. Поддержка Windows/Linux пока отсутствует — принимаем контрибуции!


Быстрый старт

Установка одной командой (macOS с Homebrew):

git clone https://github.com/youruser/realtime-call-translator.git
cd realtime-call-translator
./setup.sh

Скрипт устанавливает все зависимости, скачивает голосовые модели для английского и русского, и собирает проект.

Далее:

# Вставьте API-ключи
nano .env

# Запуск
./run.sh

Откройте http://127.0.0.1:5050 в Google Chrome — откроется веб-интерфейс с настройками.

Браузер: Используйте Chrome — аудио-монитор и маршрутизация через BlackHole работают корректно. В Safari монитор не работает из-за ограничений аудио-выхода браузера. Другие браузеры не тестировались.

Нужны два бесплатных API-ключа: - Deepgram — распознавание речи - Groq — перевод (LLM)

Введите их в Settings (иконка шестерёнки) или в файле .env.


Архитектура

┌─────────────┐     ┌──────────────┐     ┌───────────┐     ┌─────────┐
│  Ваш микро- │────>│ Deepgram STT │────>│ Groq LLM  │────>│ Piper   │──> Звонок
│  фон (рус.) │     │ (речь→текст) │     │ (перевод) │     │  TTS    │  (BlackHole)
└─────────────┘     └──────────────┘     └───────────┘     └─────────┘

┌─────────────┐     ┌──────────────┐     ┌───────────┐     ┌─────────┐
│   Аудио     │────>│ Deepgram STT │────>│ Groq LLM  │────>│ Piper   │──> Динамики
│  звонка     │     │ (речь→текст) │     │ (перевод) │     │  TTS    │
└─────────────┘     └──────────────┘     └───────────┘     └─────────┘
  • Elixir — оркестратор, супервизия процессов, управление портами
  • Rust — захват/воспроизведение аудио, STT-стриминг, синтез речи, перевод
  • Flask — веб-интерфейс для транскрипта, настроек и управления

Требования

Зависимость Назначение Установка
macOS 14+ CoreAudio для аудио I/O
Homebrew Пакетный менеджер /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
Elixir Рантайм приложения brew install elixir
Rust Аудио-движок brew install rustup && rustup-init
Python 3 Веб-сервер UI brew install python@3
espeak-ng Фонемизация для TTS brew install espeak-ng
ONNX Runtime Инференс моделей brew install onnxruntime
Flask Веб-фреймворк через venv (см. ниже)
BlackHole Виртуальная маршрутизация аудио Скачать вручную
Xcode CLT C-компилятор для Rust xcode-select --install

API-ключи (есть бесплатные тарифы): - Deepgram — распознавание речи (модель Nova-3) - Groq — перевод через llama-3.3-70b


Ручная установка

Если хотите установить всё пошагово вместо setup.sh:

1. Системные пакеты

xcode-select --install
brew install elixir rustup espeak-ng onnxruntime python@3
rustup-init -y --default-toolchain stable
source ~/.cargo/env

# Виртуальное окружение и Flask
python3 -m venv .venv
source .venv/bin/activate
pip install flask

2. Аудио-драйвер BlackHole

Скачайте и установите с existential.audio/blackhole.

Нужны оба: - BlackHole 16ch — захватывает аудио из приложения для звонков (Google Meet, Zoom и т.д.) - BlackHole 2ch — отправляет переведённое аудио обратно в звонок

Настройка в приложении для звонков (Google Meet, Zoom и т.д.): 1. Откройте звонок в Google Chrome (не Safari) 2. Установите BlackHole 2ch как микрофон в приложении для звонков 3. Установите BlackHole 16ch как динамики в приложении для звонков

Важно: НЕ используйте Multi-Output Device — это может вызвать проблемы со звуком. Устанавливайте устройства BlackHole напрямую в настройках приложения для звонков.

3. Голосовые модели

TTS-голоса от Piper. Скрипт установки автоматически скачивает голоса для английского и русского. Дополнительные голоса можно скачать из веб-интерфейса — выберите язык и нажмите кнопку загрузки.

Для ручной загрузки:

mkdir -p models/piper-en models/piper-ru

# Английский (по умолчанию)
curl -sL https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/ryan/medium/en_US-ryan-medium.onnx \
  -o models/piper-en/en_US-ryan-medium.onnx
curl -sL https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/en/en_US/ryan/medium/en_US-ryan-medium.onnx.json \
  -o models/piper-en/en_US-ryan-medium.onnx.json

# Русский (по умолчанию)
curl -sL https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/ru/ru_RU/denis/medium/ru_RU-denis-medium.onnx \
  -o models/piper-ru/ru_RU-denis-medium.onnx
curl -sL https://huggingface.co/rhasspy/piper-voices/resolve/v1.0.0/ru/ru_RU/denis/medium/ru_RU-denis-medium.onnx.json \
  -o models/piper-ru/ru_RU-denis-medium.onnx.json

Все доступные голоса: rhasspy.github.io/piper-samples.

4. Переменные окружения

cp .env.example .env

Отредактируйте .env:

DEEPGRAM_API_KEY=ваш_ключ
GROQ_API_KEY=ваш_ключ
ORT_DYLIB_PATH=/opt/homebrew/lib/libonnxruntime.dylib

5. Сборка

mix deps.get
mix compile    # Компилирует Elixir + Rust (первая сборка занимает несколько минут)

6. Запуск

./run.sh

Откройте http://127.0.0.1:5050 в Chrome.


Возможности веб-интерфейса

  • Живой транскрипт — баблы в стиле чата с оригиналом и переводом
  • 29 языков — переключение языковой пары в настройках, загрузка голосов в один клик
  • Выбор голоса — несколько голосов на язык с предпрослушиванием
  • Аудио-монитор — прослушивание переводов в браузере (только Chrome)
  • Start/Stop — управление движком без перезапуска
  • Mute — независимое отключение исходящего или входящего потока
  • Закладки — отметка важных фраз, фильтр по отмеченным
  • Экспорт — скачать полный транскрипт текстовым файлом
  • Компактный/полный вид — переключение между подробным и компактным транскриптом
  • Метрики задержки — для каждой фразы: STT, перевод, TTS и общая задержка
  • Тёмная/светлая тема — переключение с сохранением

Поддерживаемые языки

Язык STT Перевод TTS
Английский + + +
Арабский + + +
Вьетнамский + + +
Голландский + + +
Греческий + + +
Датский + + +
Индонезийский + + +
Испанский + + +
Итальянский + + +
Каталанский + + +
Китайский + + +
Корейский + +
Латышский + + +
Немецкий + + +
Норвежский + + +
Персидский + + +
Польский + + +
Португальский + + +
Румынский + + +
Русский + + +
Турецкий + + +
Украинский + + +
Венгерский + + +
Финский + + +
Французский + + +
Хинди + + +
Чешский + + +
Шведский + + +
Японский + +

Для TTS нужно скачать голосовую модель Piper для языка (в один клик из веб-интерфейса). Японский и корейский поддерживают STT и перевод, но не имеют голосовой модели Piper.


Решение проблем

"Engine not starting" - Проверьте, что в .env указаны валидные API-ключи - Убедитесь, что ORT_DYLIB_PATH указывает на библиотеку onnxruntime - Запустите mix compile для проверки ошибок сборки

"Нет аудио из звонка" - Убедитесь, что BlackHole 16ch настроен в Multi-Output Device - Проверьте, что приложение для звонков использует BlackHole 2ch как микрофон

"TTS не работает" - Проверьте, что установлен espeak-ng: espeak-ng --version - Убедитесь, что файлы голосовых моделей есть в models/piper-{lang}/ - Скачайте голоса из Settings в веб-интерфейсе

"Нет звука в мониторе" - Используйте Chrome — Safari не поддерживает маршрутизацию аудио-выхода, необходимую для монитора - Проверьте, что системный аудио-выход установлен на динамики (не на BlackHole)

"Ключ Groq показывает invalid" - Скорее всего ключ валиден — проверьте кнопкой "Test" в Settings - Ключи из .env работают автоматически, даже если поле в UI пустое


Лицензия

MIT

Core symbols most depended-on inside this repo

Shape

Function 115
Method 48
Class 29
Route 21
Enum 4

Languages

Rust47%
TypeScript27%
Python26%

Modules by API surface

web/static/js/app.js56 symbols
web/routes.py44 symbols
native/audio_engine/src/vad/mod.rs15 symbols
native/audio_engine/src/stt/voxtral.rs14 symbols
native/audio_engine/src/engine.rs14 symbols
native/audio_engine/src/tts/piper.rs12 symbols
native/audio_engine/src/stt/mod.rs12 symbols
native/audio_engine/src/translation/mod.rs9 symbols
native/audio_engine/src/audio/capture.rs7 symbols
web/helpers.py5 symbols
web/db.py5 symbols
native/audio_engine/src/audio/playback.rs5 symbols

For agents

$ claude mcp add call-translator \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page