Spotkania i transkrypcja
Control Center potrafi nagrać rozmowę i oddać Ci gotowe opracowanie — podsumowanie, zadania i decyzje — z rozpoznawaniem mowy i rozdzielaniem mówców działającymi na Twoim własnym sprzęcie. Coś jak Granola, ale hostowana samodzielnie i wpięta w ten sam obszar roboczy, w którym żyją Twoi agenci.
Czym jest spotkanie
Dział zatytułowany „Czym jest spotkanie”Spotkanie to nagrana i transkrybowana sesja. To nie to samo co wydarzenie w kalendarzu: wydarzenie to zaplanowane zobowiązanie zsynchronizowane z Google, a spotkanie to coś, co faktycznie nagrałeś. Oba można powiązać, bo nagranie możesz rozpocząć z wydarzenia, ale pozostają osobnymi rekordami.
Każde spotkanie należy do obszaru roboczego, podobnie jak wszystko inne w Control Center. Spotkania nagrane w jednym obszarze roboczym nigdy nie pojawiają się w innym.
Gdzie dzieje się praca
Dział zatytułowany „Gdzie dzieje się praca”„Na urządzeniu” to właściwy odruch, ale złe słowo. Klient przechwytuje dźwięk i
strumieniuje ramki 16 kHz PCM16 do maszyny z uruchomionym cc_server. Ten host
robi wszystko inne: zapisuje pliki WAV poszczególnych kanałów w
<dataDir>/meetings/<meetingId>/, transkrybuje w izolacie workera, filtruje echo i
rozdziela mówców po fakcie. W samodzielnej instalacji na komputerze tym hostem jest ta
sama maszyna. Przy wskazaniu zdalnego serwera już nie — więc „nic nie opuszcza mojego
laptopa” jest prawdą tylko wtedy, gdy serwerem jest Twój laptop.
Jest jeszcze jeden wyjątek i to on jest najważniejszy.
Wszystko przed podsumowaniem — przechwytywanie, transkrypcja, usuwanie echa, rozdzielanie mówców, dopasowywanie odcisku głosu — działa na serwerze bez żadnego wywołania sieciowego.
Które modele są dołączone
Dział zatytułowany „Które modele są dołączone”Modele osadzania, rozdzielania mówców i mowy (ASR) są wymuszenie instalowane przy pierwszym rozruchu (pomijane w wersji demo), więc rozdzielanie mówców i nagrywanie działają bez zaglądania do ustawień. ASR jest jednak wybieralny — waży kilkaset megabajtów, a na liście wyboru dostępne są cztery kompilacje. Mowa nadal wymaga jednego restartu po tym pierwszym pobraniu, bo transkrybator ustala swój model, zanim pobieranie zdąży się zakończyć.
Cztery pozycje na liście wyboru, różniące się rozmiarem, pokryciem językowym i dokładnością:
- Parakeet TDT 0.6B v3 — wielojęzyczny, zalecany domyślny (~600 MB)
- Parakeet TDT 0.6B v2 — angielski (~480 MB)
- Whisper large-v3-turbo — wielojęzyczny (~626 MB)
- Whisper base.en — tylko angielski, mały domyślny model historyczny (~198 MB)
Modele to jedyne artefakty, które serwer pobiera w czasie działania; każda biblioteka natywna jest dołączona do pakietu.
Jak działa przechwytywanie
Dział zatytułowany „Jak działa przechwytywanie”Spotkanie nagrywa dwa kanały audio jednocześnie:
- Ty („me”): Twój mikrofon.
- Oni („them”): wyjście audio spotkania, przechwytywane przez pętlę zwrotną bez sterownika — przechwytywanie procesów/urządzeń Core Audio w systemie macOS, pętla zwrotna WASAPI w systemie Windows, monitor PipeWire / PulseAudio w systemie Linux.
Ponieważ oba kanały są przechwytywane osobno, transkrypt od początku ma przypisanych
mówców: Twoje słowa są oznaczane jako me, a wszyscy pozostali w rozmowie jako them.
Twój własny głos przedostaje się z wyjścia systemowego z powrotem do mikrofonu i bez zabezpieczeń zostałby transkrybowany dwukrotnie. Dwa filtry temu zapobiegają. AEC3 na poziomie sygnału działa przy każdym nagraniu w trybie zdalnym i jest wymagany — jeśli natywna biblioteka AEC nie może się wczytać, nagranie odmawia startu, zamiast po cichu strumieniować mikrofon zanieczyszczony echem. (Tryb osobisty nie ma referencji zdalnej, względem której można by usuwać echo, więc AEC tylko przepuszcza tam sygnał bez zmian.) Dodatkowo na każdej platformie działa po stronie hosta filtr echa na poziomie tekstu.
Całe przetwarzanie mikrofonu na poziomie systemu jest celowo wyłączone. Włączenie własnego usuwania echa lub automatycznego wzmocnienia platformy w systemie macOS przełącza mikrofon na Voice Processing I/O, co w tej kompilacji unieruchamiało zarówno mikrofon, jak i przechwytywanie dźwięku systemowego.
Transkrypcja i diaryzacja
Dział zatytułowany „Transkrypcja i diaryzacja”W trakcie nagrywania dźwięk jest dekodowany w przesuwnych oknach — ciętych przy krótkiej ciszy na końcu lub przy maksymalnej długości okna — poza wątkiem interfejsu. Każde okno staje się segmentem transkryptu z przypisanym mówcą i przesunięciami w milisekundach.
Okna, które nigdy nie przekroczyły progu RMS, są pomijane bez żadnego dekodowania, bo model mowy przedstawia ciszę jako halucynowane tokeny niebędące mową, a dekodowanie marnuje CPU. Praktyczna konsekwencja: mówca konsekwentnie bardzo cichy nie daje żadnego transkryptu. Jeśli ktoś wypada pusto, sprawdź jego poziom wejściowy, zanim obwinisz model.
Po zatrzymaniu diaryzacja działa offline na całym nagraniu i dzieli kanał zdalny na
poszczególnych mówców (Person 1, Person 2, …), których możesz zmienić nazwę. Liczba
mówców jest wnioskowana z progu grupowania, a nie z ustawionej przez Ciebie wartości —
więc jest artefaktem progu i cichy lub nakładający się mówca może zostać scalony z
sąsiadem. Transkrypt jest renderowany jako wiersze [mm:ss] SPEAKER: text.
Profile głosu
Dział zatytułowany „Profile głosu”Zmiana nazwy mówcy to coś więcej niż oznaczenie jednego transkryptu. Control Center może zapisać odcisk głosu mówcy jako profil głosu, dzięki czemu rozpoznaje go automatycznie na przyszłych spotkaniach. Gdy nadajesz nazwę mówcy po diaryzacji, pojawia się pytanie, czy zapisać odcisk głosu; jeśli to zrobisz, zostaje on wmieszany do stale aktualizowanej centroidy dla tej nazwy i dopasowywany do nowych mówców na podstawie podobieństwa kosinusowego, więc ta sama osoba pojawi się następnym razem ze swoją nazwą bez ponownego oznaczania.
Profile głosu są przypisane do obszaru roboczego i nigdy nie przekraczają jego granicy. Zarządzasz nimi w Ustawienia → Obszar roboczy → Spotkania. Zmiana nazwy mówcy, który został wcześniej zapisany, wyrejestrowuje starą nazwę i proponuje zarejestrowanie nowej; usunięcie profilu usuwa zapisany odcisk głosu, ale pozostawia nienaruszone nazwy już zastosowane do minionych spotkań.
Potok podsumowania
Dział zatytułowany „Potok podsumowania”Gdy nagranie się zatrzyma, serwer publikuje zdarzenie
domenowe MeetingRecordingStopped.
Wbudowany szablon potoku meeting_summary jest wyzwalany przez to zdarzenie.
Nagrywarka na niego nie czeka; spotkanie po prostu przechodzi przez kolejne stany
swojego cyklu życia:
recording → processing → doneAgent podsumowujący otrzymuje tytuł, Twoje pobieżne notatki na żywo i transkrypt, a zwraca ustrukturyzowany JSON. To, jakie sekcje zapisze, kształtuje aktywny szablon notatek ze spotkania w obszarze roboczym (Ustawienia → Obszar roboczy → Spotkania); aktywny szablon dotyczy nowych i ponownie uruchamianych podsumowań. Kroki utrwalania w potoku zapisują następnie ten JSON do osobnych wierszy:
enhancedNotesisummary→ notatki spotkania- każde zadanie → wiersz
MeetingActionItem(treść, właściciel, opcjonalne powiązanie ze zgłoszeniem) - każda decyzja → wiersz
MeetingDecision
Zadania i decyzje nigdy nie są wyciągane z dowolnego markdownu, tylko z
ustrukturyzowanych tablic agenta. Jeśli uruchomienie nie da żadnego ustrukturyzowanego
wyniku, kroki zapisu są pomijane, a surowy transkrypt zostaje zachowany jako rozwiązanie
awaryjne, więc nigdy nie tracisz zapisu. Nic w potoku nie oznacza spotkania jako done
— robi to pojedynczy moduł uzgadniający na podstawie zdarzenia końcowego uruchomienia,
dzięki czemu awaria sąsiedniego kroku nie pozostawi na wpół zapisanego spotkania, które
już wygląda na ukończone.
Gdzie pojawiają się spotkania
Dział zatytułowany „Gdzie pojawiają się spotkania”| Powierzchnia | Co pokazuje |
|---|---|
/meetings |
Lista spotkań z liczbą zadań i decyzji |
/meetings/record |
HUD nagrywania na żywo: z jednej strony Twoje notatki, z drugiej strumieniowany transkrypt |
/meetings/:meetingId |
Szczegóły spotkania: karty Notatki, Transkrypt, Zadania i Decyzje |
| Ustawienia → Obszar roboczy → Spotkania | Szablony notatek i zapisane profile głosu dla tego obszaru roboczego |
Obsługa platform
Dział zatytułowany „Obsługa platform”Przechwytywanie nie wymaga sterowników na wszystkich trzech platformach desktopowych (przechwytywanie Core Audio w systemie macOS, WASAPI w systemie Windows, PipeWire w systemie Linux).
Klient webowy też nagrywa, co reszta tej strony, skupiona na komputerze, może
ukrywać: przeglądarka pobiera Twój mikrofon przez getUserMedia, a dźwięk spotkania
przez getDisplayMedia (udostępnianie ekranu), zmniejsza próbkowanie do 16 kHz PCM16 i
strumieniuje do tego samego hosta. Obowiązują tam trzy zastrzeżenia:
- Udostępniana powierzchnia musi nieść ścieżkę audio. Safari, Firefox i udostępnianie pełnego ekranu w systemie macOS nie dają żadnej, a nagranie odmawia startu.
- Nie ma natywnego AEC3. Na mikrofonie wymagane jest własne usuwanie echa przeglądarki; filtr echa na poziomie tekstu po stronie hosta nadal działa. HUD pokazuje miernik poziomu wejściowego sterowany z PCM mikrofonu.
- Ponowne uruchomienie podsumowania i anulowanie przetwarzania są dostępne tylko na komputerze.
Akcja Rozpocznij nagrywanie i powiąż w kalendarzu jest dostępna tylko na komputerze i w webowym kliencie wprost to zgłasza, mimo że własny przepływ nagrywania na ekranie spotkań działa tam również.
Zobacz też
Dział zatytułowany „Zobacz też”- Kalendarz i planowanie: nagraj spotkanie bezpośrednio z wydarzenia w kalendarzu
- Potoki i automatyzacja: silnik stojący za
meeting_summary - Zgłoszenia i delegowanie: powiąż zadania ze spotkania ze zgłoszeniami
- Zdarzenia domenowe:
MeetingRecordingStoppediMeetingStartingSoon - Nagraj i podsumuj spotkanie