2 из 101 мин

Как LiveContext разделяет мой голос и голос собеседника

Чтобы LiveContext мог понимать разговор, сначала нужно решить довольно базовую проблему: кто именно сейчас говорит?

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

В LiveContext я пошёл другим путем: разделяю голоса ещё до транскрибации.

Получается два независимых источника:

мой микрофон → YOU

звук звонка → REMOTE

YOU приходит напрямую с физического микрофона: AirPods или USB-микрофона.

С REMOTE интереснее. Звук приложения, например Телемоста или браузера, попадает в отдельное виртуальное аудиоустройство LiveContext Remote, которое я собрал через Loopback.

То есть компьютер фактически получает две разные аудиодорожки:

микрофон ─────────────→ YOU

→ LiveContext
/
Телемост / браузер ─────→ REMOTE

У каждого потока своя обработка, свои параметры определения речи и своя очередь. И только после этого звук отправляется в локальную транскрибацию.

В результате LiveContext не приходится угадывать, кому принадлежит очередная фраза.

Он знает это из самого источника звука.

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

«клиент сказал, что цена высокая»

и

«я сказал клиенту, что цена высокая».

Текст почти одинаковый. Состояние разговора совершенно разное.

А дальше начинается более сложная часть: как превратить эти два непрерывных потока звука в достаточно быструю и точную локальную транскрибацию, не положив при этом весь компьютер.

Оглавление серии
  1. Почему мне оказалось недостаточно просто сохранять разговоры
  2. Как LiveContext разделяет мой голос и голос собеседника
  3. LiveContext в реальном разговоре