Langkau ke kandungan

Mesyuarat dan transkripsi

Control Center boleh merakam panggilan dan mengembalikan kepada anda penulisan yang kemas — ringkasan, item tindakan dan keputusan — dengan pengecaman pertuturan dan pengasingan penutur berjalan pada perkakasan anda sendiri. Bayangkan Granola, tetapi dihoskan sendiri dan bersambung ke ruang kerja yang sama tempat ejen anda berada.

Satu mesyuarat ialah sesi yang dirakam dan ditranskrip. Ia bukan perkara yang sama dengan acara kalendar: acara ialah komitmen berjadual yang disegerakkan daripada Google, manakala mesyuarat ialah sesuatu yang anda benar-benar rakam. Kedua-duanya boleh dipautkan, kerana anda boleh memulakan rakaman daripada acara, tetapi ia kekal sebagai rekod yang berasingan.

Setiap mesyuarat terikat pada ruang kerja, seperti segala-galanya dalam Control Center. Mesyuarat yang dirakam dalam satu ruang kerja tidak pernah muncul dalam ruang kerja yang lain.

“Pada peranti” ialah naluri yang betul tetapi kata nama yang salah. Klien menangkap audio dan menstrim bingkai PCM16 16 kHz ke mesin yang menjalankan cc_server. Hos itu melakukan segala-galanya yang lain: ia menulis WAV setiap saluran di bawah <dataDir>/meetings/<meetingId>/, mentranskrip dalam isolat pekerja, menapis gema dan melakukan diarisasi selepas kejadian. Pada desktop yang berdiri sendiri, hos itu ialah mesin yang sama. Apabila dihalakan ke pelayan jauh, ia bukan — jadi “tiada apa-apa yang meninggalkan komputer riba saya” hanya benar apabila pelayan itu ialah komputer riba anda.

Terdapat satu lagi pengecualian dan itulah yang penting.

Segala-galanya sebelum ringkasan — tangkapan, transkripsi, pembatalan gema, diarisasi, pemadanan cap suara — berjalan pada pelayan tanpa panggilan rangkaian.

Model embedding, diarisasi dan pertuturan (ASR) dipasang secara paksa pada but pertama (dilangkau dalam mod demo), jadi pengasingan penutur dan rakaman sudah tersedia tanpa perlu melawat tetapan. ASR masih boleh dipilih — saiznya beberapa ratus megabait, dan empat binaan disertakan dalam pemilih. Pertuturan masih memerlukan satu permulaan semula selepas muat turun pertama itu, kerana pentranskrip menyelesaikan modelnya sebelum pengambilan itu boleh selesai.

Empat entri pemilih itu, yang berbeza dari segi saiz, liputan bahasa dan ketepatan:

  • Parakeet TDT 0.6B v3 — multibahasa, lalai yang disyorkan (~600 MB)
  • Parakeet TDT 0.6B v2 — bahasa Inggeris (~480 MB)
  • Whisper large-v3-turbo — multibahasa (~626 MB)
  • Whisper base.en — bahasa Inggeris sahaja, lalai sejarah yang kecil (~198 MB)

Model ialah satu-satunya artifak yang diambil oleh pelayan pada masa jalan; setiap pustaka natif disertakan dalam bundel.

Satu mesyuarat merakam dua saluran audio serentak:

  • Anda (“me”): mikrofon anda.
  • Mereka (“them”): output audio mesyuarat, ditangkap oleh loopback tanpa pemacu — tap proses/peranti Core Audio pada macOS, loopback WASAPI pada Windows, pemantau PipeWire / PulseAudio pada Linux.

Kerana kedua-dua saluran ditangkap secara berasingan, transkrip diatribusikan kepada penutur sejak awal: perkataan anda ditag me, semua orang dalam panggilan ditag them.

Suara anda sendiri meresap daripada output sistem kembali ke mikrofon dan jika tidak akan ditranskrip dua kali. Dua penapis menghalangnya. Pada peringkat isyarat, AEC3 berjalan pada setiap rakaman mod jauh dan wajib ada — jika pustaka AEC natif tidak dapat dimuatkan, rakaman enggan bermula daripada menstrim secara senyap mikrofon yang tercemar gema. (Mod bersemuka tiada rujukan hujung jauh untuk dibatalkan, jadi AEC di situ bertindak sebagai laluan terus identiti.) Di atas itu, penapis gema peringkat teks di sisi hos berjalan pada setiap platform.

Semua pemprosesan mikrofon pada peringkat OS dilumpuhkan dengan sengaja. Mengaktifkan pembatalan gema atau auto-gain platform itu sendiri pada macOS menukar mikrofon kepada Voice Processing I/O, yang dalam binaan ini mematikan kedua-dua mikrofon dan tap audio sistem.

Semasa anda merakam, audio dinyahkod dalam tetingkap bergolek — dipotong pada kesenyapan hujung yang pendek, atau pada panjang tetingkap maksimum — di luar benang UI. Setiap tetingkap menjadi segmen transkrip bertag penutur dengan offset milisaat.

Tetingkap yang tidak pernah melepasi ambang RMS dilangkau tanpa dinyahkod sama sekali, kerana model pertuturan memaparkan kesenyapan sebagai token bukan pertuturan yang dihalusinasi dan penyahkodan itu membazir CPU. Akibat praktikalnya: penutur yang sentiasa sangat perlahan tidak menghasilkan transkrip. Jika seseorang kembali kosong, semak tahap inputnya sebelum menyalahkan model.

Selepas anda berhenti, diarisasi berjalan di luar talian ke atas rakaman dan memecahkan saluran jauh kepada penutur individu (Person 1, Person 2, …) yang boleh anda namakan semula. Bilangan penutur disimpulkan daripada ambang pengelompokan, bukan daripada kiraan yang anda tetapkan — jadi ia ialah artifak ambang dan penutur yang perlahan atau bertindih boleh dicantumkan ke dalam jirannya. Transkrip dipaparkan sebagai baris [mm:ss] SPEAKER: text.

Menamakan semula penutur melakukan lebih daripada sekadar melabel satu transkrip. Control Center boleh menyimpan cap suara penutur sebagai profil suara, supaya ia mengenali mereka secara automatik dalam mesyuarat akan datang. Apabila anda menamakan penutur hasil diarisasi, anda ditanya sama ada mahu menyimpan cap suara itu; jika ya, ia dicampurkan ke dalam sentroid yang berjalan untuk nama tersebut dan dipadankan dengan penutur baharu melalui keserupaan kosinus, jadi orang yang sama muncul dengan namanya pada kali berikutnya tanpa anda melabelnya semula.

Profil suara terikat pada ruang kerja dan tidak pernah melepasi sempadannya. Uruskannya di Tetapan → Ruang kerja → Mesyuarat. Menamakan semula penutur yang pernah disimpan akan menyahdaftar nama lama dan menawarkan untuk mendaftarkan nama baharu; memadam profil membuang cap suara yang tersimpan tetapi membiarkan mana-mana nama yang sudah digunakan pada mesyuarat lalu tidak terjejas.

Apabila rakaman berhenti, pelayan menerbitkan MeetingRecordingStopped acara domain. Templat pipeline terbina meeting_summary dicetuskan oleh acara itu. Perakam tidak menunggunya; mesyuarat hanya melalui kitaran hayat statusnya:

recording → processing → done

Ejen peringkas menerima tajuk, nota langsung kasar anda dan transkrip, lalu mengembalikan JSON berstruktur. Bahagian yang ditulisnya dibentuk oleh templat nota mesyuarat aktif ruang kerja itu (Tetapan → Ruang kerja → Mesyuarat); templat aktif terpakai pada ringkasan baharu dan yang dijalankan semula. Langkah simpan pipeline kemudian menulis JSON itu ke baris yang berasingan:

  • enhancedNotes dan summary → nota mesyuarat
  • setiap item tindakan → baris MeetingActionItem (kandungan, pemilik, pautan tiket pilihan)
  • setiap keputusan → baris MeetingDecision

Item tindakan dan keputusan tidak pernah dihuraikan daripada markdown bentuk bebas, hanya daripada tatasusunan berstruktur ejen. Jika sesuatu larian tidak menghasilkan output berstruktur, langkah simpan dilangkau dan transkrip mentah disimpan sebagai sandaran, jadi anda tidak pernah kehilangan rekod itu. Tiada apa-apa dalam pipeline menandakan mesyuarat sebagai done — satu pengrekonsiliasi tunggal melakukannya daripada acara terminal larian itu, jadi kegagalan langkah bersebelahan tidak boleh menggantung mesyuarat yang separuh tertulis yang sudah kelihatan selesai.

Permukaan Apa yang dipaparkan
/meetings Senarai mesyuarat, dengan kiraan item tindakan dan keputusan
/meetings/record HUD rakaman langsung: nota anda di satu sisi, transkrip penstriman di sisi yang lain
/meetings/:meetingId Butiran mesyuarat: tab Nota, Transkrip, Item tindakan dan Keputusan
Tetapan → Ruang kerja → Mesyuarat Templat nota dan profil suara tersimpan untuk ruang kerja ini

Tangkapan tidak memerlukan pemacu pada ketiga-tiga platform desktop (tap Core Audio pada macOS, WASAPI pada Windows, PipeWire pada Linux).

Klien web turut merakam, yang mungkin tersembunyi oleh pembingkaian desktop sepanjang halaman ini: pelayar mengambil mikrofon anda melalui getUserMedia dan audio mesyuarat melalui getDisplayMedia (kongsi skrin), menurunkan sampel kepada PCM16 16 kHz dan menstrim ke hos yang sama. Tiga kaveat terpakai di situ:

  • Permukaan yang dikongsi mesti membawa trek audio. Safari, Firefox dan perkongsian skrin penuh macOS tidak menghasilkan trek sedemikian dan rakaman enggan bermula.
  • Tiada AEC3 natif. Pembatalan gema pelayar sendiri diminta pada mikrofon; penapis gema teks di sisi hos masih berjalan. HUD menunjukkan meter tahap input yang dipacu oleh PCM mikrofon.
  • Jalankan semula ringkasan dan batal pemprosesan hanya tersedia pada desktop.

Tindakan Mula rakaman & pautkan pada kalendar hanya tersedia pada desktop dan menyatakannya dengan jelas pada web, walaupun aliran rakaman skrin mesyuarat itu sendiri berfungsi di sana.