Чтобы LiveContext мог понимать разговор, сначала нужно решить довольно базовую проблему: кто именно сейчас говорит?
Можно было бы записывать весь звонок одним аудиопотоком, а потом пытаться программно определять, где мой голос, а где собеседник.
В LiveContext я пошёл другим путем: разделяю голоса ещё до транскрибации.
Получается два независимых источника:
мой микрофон → YOU
звук звонка → REMOTE
YOU приходит напрямую с физического микрофона: AirPods или USB-микрофона.
С REMOTE интереснее. Звук приложения, например Телемоста или браузера, попадает в отдельное виртуальное аудиоустройство LiveContext Remote, которое я собрал через Loopback.
То есть компьютер фактически получает две разные аудиодорожки:
микрофон ─────────────→ YOU
→ LiveContext
/
Телемост / браузер ─────→ REMOTE
У каждого потока своя обработка, свои параметры определения речи и своя очередь. И только после этого звук отправляется в локальную транскрибацию.
В результате LiveContext не приходится угадывать, кому принадлежит очередная фраза.
Он знает это из самого источника звука.
Это небольшое архитектурное решение оказалось важным для всего, что строится дальше. Потому что для системы есть большая разница между:
«клиент сказал, что цена высокая»
и
«я сказал клиенту, что цена высокая».
Текст почти одинаковый. Состояние разговора совершенно разное.
А дальше начинается более сложная часть: как превратить эти два непрерывных потока звука в достаточно быструю и точную локальную транскрибацию, не положив при этом весь компьютер.
#LiveContext@annsFlow
Оглавление темы 📌
Навигация по проектам канала 📍
Все каналы 🎶
💻 annFlow