Сидя на очередном митинге в Teams с коллегами, говорящими на французском, автор в очередной раз понял, что упускает суть обсуждения — уровень языка оставлял желать лучшего. Вместо того чтобы полагаться на встроенные инструменты, он решил создать собственное решение.
Результат — небольшая утилита, которая перехватывает звук с устройства, разбивает его на фразы, распознаёт речь с помощью Whisper и переводит на указанный язык. Поддерживаются русский, английский и французский.
Как это работает
Программа написана на C#. Основной функционал реализован с минимальным объёмом кода — около 80% сгенерировано с помощью ИИ, остальное — ручные правки.
Для распознавания речи (STT) автор тестировал несколько локальных решений:
- Sherpa с ONNX-моделями — нашлась только потоковая версия для французского, не совместимая с архитектурой приложения.
- Foundry Local от Microsoft — слишком сырая, использует тот же Whisper, но обмен данными происходит через файлы.
- Другие варианты не подошли или забыты.
В итоге остановился на Whisper. Модель base работает быстро, но не учитывает контекст. Small уже пытается следить за логикой, но может подтормаживать. Medium не успевает за живой речью — очередь фрагментов быстро растёт. К сожалению, не удалось задействовать NPU/GPU, нагрузка ложится на оперативную память, но качество распознавания остаётся хорошим.
Перевод
Реализовано два варианта перевода:
- Через OpenAI — нужно указать ключ, модель и URL.
- Через Azure Translator — достаточно указать ключ. Обеспечивает быструю обработку и 2 миллиона бесплатных символов в месяц, но требует учётной записи Azure.
Интеграция с Yandex API не реализована — требуется платёжный аккаунт, а у автора нет способов оплаты из РФ. Однако добавить новый переводчик просто: в коде есть чёткий интерфейс ITranslationService.
Локальные библиотеки для перевода автор рассмотрел, но не нашёл подходящих решений.
Особенности и настройки
Если выбрать один и тот же язык для распознавания и перевода, программа работает как диктофон — просто транскрибирует речь и, при необходимости, сохраняет аудио.
Вторая строка настроек отвечает за разбиение речи на фразы. Можно регулировать чувствительность по громкости и длительности пауз. В правом нижнем углу отображается уровень звука и флаги определения речи — это помогает точно настроить параметры.
Важно: программа перехватывает только звук, воспроизводимый через динамики или наушники. Микрофон системы она не слышит — это не инструмент для записи разговоров.
Рекомендуемая модель — small, с температурой 0.1–0.2. Качество аудио на совещаниях обычно высокое, поэтому результат получается стабильным.
Утилита создана для узкой задачи, но может быть полезна тем, кто регулярно участвует в международных звонках. Исходный код доступен на GitHub: https://github.com/whitebehemoth/chacka.