Зустрічі та транскрипція
Control Center може записати дзвінок і повернути вам охайний підсумок — резюме, пункти дій і рішення — виконуючи розпізнавання мовлення та розділення промовців на вашому власному обладнанні. Це як Granola, але self-hosted і вбудований у той самий робочий простір, де живуть ваші агенти.
Що таке зустріч
Розділ із назвою «Що таке зустріч»Зустріч — це записана й транскрибована сесія. Це не те саме, що подія календаря: подія — це заплановане зобов’язання, синхронізоване з Google, тоді як зустріч — це те, що ви насправді записали. Їх можна пов’язати, бо запис можна почати з події, але це залишаються різні записи.
Кожна зустріч належить робочому простору, як і все інше в Control Center. Зустрічі, записані в одному робочому просторі, ніколи не з’являються в іншому.
Де виконується робота
Розділ із назвою «Де виконується робота»«На пристрої» — правильний інстинкт, але невдале слово. Клієнт захоплює аудіо й
передає кадри PCM16 з частотою 16 кГц на машину, де запущено cc_server.
Цей хост робить усе інше: записує поканальні WAV-файли в
<dataDir>/meetings/<meetingId>/, транскрибує в ізоляті воркера, фільтрує
відлуння та виконує діаризацію постфактум. На окремому настільному комп’ютері
цей хост — та сама машина. Якщо вказати віддалений сервер, то це вже не так —
тож «нічого не залишає мій ноутбук» правда лише тоді, коли сервер і є ваш
ноутбук.
Є ще один виняток, і саме він найважливіший.
Усе до підсумку — захоплення, транскрипція, придушення відлуння, діаризація, зіставлення голосових відбитків — виконується на сервері без мережевих звернень.
Які моделі постачаються
Розділ із назвою «Які моделі постачаються»Моделі ембедингів, діаризації та розпізнавання мовлення (ASR) примусово встановлюються під час першого запуску (у деморежимі пропускаються), тож розділення промовців і запис доступні без відвідування налаштувань. ASR усе ще можна вибирати — вона займає кілька сотень мегабайтів, і у списку вибору є чотири збірки. Після цього першого завантаження мовленню все одно потрібен один перезапуск, бо транскрибер визначає свою модель до того, як завантаження встигне завершитися.
Чотири варіанти у списку вибору, що різняться розміром, мовним покриттям і точністю:
- Parakeet TDT 0.6B v3 — багатомовна, рекомендована типово (~600 МБ)
- Parakeet TDT 0.6B v2 — англійська (~480 МБ)
- Whisper large-v3-turbo — багатомовна (~626 МБ)
- Whisper base.en — лише англійська, невеликий історичний варіант за замовчуванням (~198 МБ)
Моделі — єдині артефакти, які сервер завантажує під час роботи; усі нативні бібліотеки постачаються в комплекті.
Як працює захоплення
Розділ із назвою «Як працює захоплення»Зустріч записує два аудіоканали одночасно:
- Ви («me»): ваш мікрофон.
- Вони («them»): аудіовихід зустрічі, який захоплює loopback без драйверів — перехоплення процесів і пристроїв Core Audio в macOS, loopback WASAPI у Windows, монітор PipeWire / PulseAudio у Linux.
Оскільки ці два канали захоплюються окремо, транскрипт від самого початку
прив’язаний до промовців: ваші слова позначено me, усіх інших у дзвінку —
them.
Ваш власний голос просочується із системного виходу назад у мікрофон і без цього був би транскрибований двічі. Цьому запобігають два фільтри. AEC3 на рівні сигналу працює за кожного запису у віддаленому режимі й є обов’язковим — якщо нативна бібліотека AEC не завантажується, запис відмовляється запускатися, а не тихо передає мікрофон, забруднений відлунням. (У режимі очної зустрічі немає опорного сигналу віддаленої сторони, відносно якого можна щось скасовувати, тож там AEC лише пропускає сигнал без змін.) Поверх нього на кожній платформі працює текстовий фільтр відлуння на боці хоста.
Усю обробку мікрофона на рівні ОС навмисно вимкнено. Увімкнення власного придушення відлуння чи автоматичного підсилення платформи в macOS перемикає мікрофон у режим Voice Processing I/O, який у цій збірці вивів з ладу і мікрофон, і перехоплення системного звуку.
Транскрипція та діаризація
Розділ із назвою «Транскрипція та діаризація»Під час запису аудіо декодується ковзними вікнами — на короткій тиші в кінці або після досягнення максимальної довжини вікна — поза потоком інтерфейсу. Кожне вікно стає сегментом транскрипту з позначкою промовця та зсувами в мілісекундах.
Вікна, що жодного разу не перевищили поріг RMS, пропускаються взагалі без декодування, бо модель розпізнавання мовлення перетворює тишу на вигадані несловесні токени, а декодування лише марнує CPU. Практичний наслідок: промовець, який постійно говорить дуже тихо, не дає жодного транскрипту. Якщо чийсь транскрипт виявився порожнім, перевірте рівень його входу, перш ніж звинувачувати модель.
Після зупинки діаризація виконується офлайн по всьому запису й ділить
віддалений канал на окремих промовців (Person 1, Person 2, …), які ви
можете перейменувати. Кількість промовців виводиться з порогу кластеризації, а
не з числа, яке ви задали, тож це артефакт порогу: тихий промовець або
промовець, чия мова перекривається з іншими, може злитися з сусідом.
Транскрипт виводиться рядками [mm:ss] SPEAKER: text.
Голосові профілі
Розділ із назвою «Голосові профілі»Перейменування промовця робить більше, ніж позначає один транскрипт. Control Center може зберегти голосовий відбиток промовця як голосовий профіль, щоб автоматично розпізнавати його на майбутніх зустрічах. Коли ви даєте ім’я промовцю з діаризації, вас запитують, чи зберегти голосовий відбиток; якщо зберегти, його домішують до центроїда, який поступово формується для цього імені, і порівнюють з новими промовцями за косинусною схожістю, тож наступного разу та сама людина з’явиться зі своїм іменем без повторного підписування.
Голосові профілі належать робочому простору й ніколи не перетинають його межі. Керуйте ними в Налаштування → Робочий простір → Зустрічі. Перейменування промовця, збереженого раніше, скасовує реєстрацію старого імені й пропонує зареєструвати нове; видалення профілю прибирає збережений голосовий відбиток, але залишає незмінними всі імена, уже застосовані до минулих зустрічей.
Конвеєр підсумку
Розділ із назвою «Конвеєр підсумку»Коли запис зупиняється, сервер публікує
доменну подію
MeetingRecordingStopped. Вбудований шаблон конвеєра meeting_summary
запускається цією подією. Записувач на нього не чекає; зустріч просто проходить
через свій життєвий цикл станів:
recording → processing → doneАгент підсумку отримує назву, ваші чорнові нотатки під час зустрічі та транскрипт і повертає структурований JSON. Те, які розділи він напише, визначає активний шаблон нотаток зустрічі робочого простору (Налаштування → Робочий простір → Зустрічі); активний шаблон застосовується до нових підсумків і до повторних запусків. Далі кроки збереження конвеєра записують цей JSON в окремі рядки:
enhancedNotesіsummary→ нотатки зустрічі- кожен пункт дій → рядок
MeetingActionItem(вміст, відповідальний, необов’язкове посилання на тікет) - кожне рішення → рядок
MeetingDecision
Пункти дій і рішення ніколи не витягуються з вільного markdown — лише зі
структурованих масивів агента. Якщо запуск не дає структурованого виводу, кроки
збереження пропускаються, а необроблений транскрипт зберігається як запасний
варіант, тож ви ніколи не втратите запис. Ніщо в конвеєрі не позначає зустріч
як done — це робить один узгоджувач за термінальною подією запуску, тож збій
сусіднього кроку не може залишити наполовину записану зустріч, яка вже виглядає
завершеною.
Де з’являються зустрічі
Розділ із назвою «Де з’являються зустрічі»| Поверхня | Що вона показує |
|---|---|
/meetings |
Список зустрічей із кількістю пунктів дій і рішень |
/meetings/record |
Живий HUD запису: ваші нотатки з одного боку, транскрипт у потоці — з іншого |
/meetings/:meetingId |
Деталі зустрічі: вкладки «Нотатки», «Транскрипт», «Пункти дій» і «Рішення» |
| Налаштування → Робочий простір → Зустрічі | Шаблони нотаток і збережені голосові профілі для цього робочого простору |
Підтримка платформ
Розділ із назвою «Підтримка платформ»Захоплення працює без драйверів на всіх трьох настільних платформах (перехоплення Core Audio в macOS, WASAPI у Windows, PipeWire у Linux).
Вебклієнт теж записує, і це легко не помітити за рештою викладу цієї
сторінки, орієнтованого на настільні застосунки: браузер бере ваш мікрофон через
getUserMedia, а звук зустрічі — через getDisplayMedia (демонстрація
екрана), знижує частоту до 16 кГц PCM16 і передає все на той самий хост. Тут
діють три застереження:
- Поверхня, якою ви поділилися, обов’язково має містити звукову доріжку. Safari, Firefox і повноекранна демонстрація в macOS не дають жодної, і запис відмовляється запускатися.
- Нативного AEC3 немає. На мікрофоні запитується власне придушення відлуння браузера; текстовий фільтр відлуння на боці хоста все одно працює. HUD показує індикатор рівня входу, який живиться від PCM мікрофона.
- Повторний запуск підсумку та скасування обробки доступні лише в настільному застосунку.
Дія календаря Почати запис і прив’язати доступна лише в настільному застосунку й прямо повідомляє про це в браузері, хоча власний процес запису на екрані зустрічей там працює.
Дивіться також
Розділ із назвою «Дивіться також»- Календар і планування: записати зустріч просто з події календаря
- Конвеєри та автоматизація: рушій, що стоїть за
meeting_summary - Тікети та делегування: пов’язати пункти дій зустрічі з тікетами
- Доменні події:
MeetingRecordingStoppedіMeetingStartingSoon - Записати й резюмувати зустріч