skillok meeting
d0d9d7d1b42763f9297927180d851d27dda50dcd
Перейти к файлу
Код
meeting src-tauriCargo.toml
anc Разбор по голосам: «Спикер 1», «Спикер 2»… на компьютере, без сети - crates/voices: отпечаток голоса реплики (WeSpeaker ResNet34 через sherpa-onnx, статические сборки под Windows и macOS) и разбиение снизу вверх со средней связью. Из отпечатков вычитается средний по записи: без этого у подкаста любые две реплики были похожи на 0,5–0,8. - После распознавания реплики «Собеседников» и файла раскладываются по голосам; микрофон — «Я». Отпечатки и реплики — в voices.json рядом с записью: «Говорящих: N» пересобирает разбиение без новой расшифровки. - Ход работы: этап «Разделяю по голосам» с процентом; по ходу распознавания у реплик разбираемых дорожек ещё нет имени. - Исправлено: файл без смены говорящего ложился одним абзацем 00:00:00 (подкаст 1 ч 52 мин — 170 КБ одной строкой). Абзац теперь — реплики одного говорящего без пауз больше 1,5 с и не длиннее ~600 знаков. У реплики появился конец (из ответа Whisper или до следующей). - Модель (26 МБ) не в git: scripts/fetch-models.sh с проверкой SHA-256, в сборку — ресурсом. Windows — со статической средой C (+crt-static, явная libucrt): установщику не нужен VC++ Redistributable; crate-type ядра — только rlib (cdylib нужен лишь мобильным платформам). - Проверено на подкасте Kuji 230 (1 ч 52 мин, трое в студии): трое, 48 % / 36 % / 15 % речи, отпечатки 1184 реплик за ~3 мин. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> d0d9d7d 30 сентября 2026 г.
Cargo.toml
[package]
name = "skillok-meet"
version = "1.1.0"
description = "Skillok Meet — запись, расшифровка и разбор встреч Zoom"
edition = "2021"
rust-version = "1.90"

[lib]
name = "skillok_meet_lib"
# Только для настольных систем: staticlib и cdylib Tauri нужны для iOS и Android,
# а cdylib под Windows ещё и не компонуется со статической средой C (+crt-static).
crate-type = ["rlib"]

[build-dependencies]
tauri-build = { version = "2.7", features = [] }

[dependencies]
tauri = { version = "2.12", features = [] }
tauri-plugin-dialog = "2"
tauri-plugin-opener = "2"
meet-audio = { path = "../crates/audio" }
meet-voices = { path = "../crates/voices" }
base64 = "0.22"
tokio = { version = "1", features = ["rt", "sync", "time", "macros"] }
tokio-util = "0.7"
serde = { version = "1", features = ["derive"] }
serde_json = "1"
thiserror = "2"
reqwest = { version = "0.12", default-features = false, features = ["json", "default-tls"] }
keyring = { version = "3.6", features = ["apple-native", "windows-native"] }
chrono = { version = "0.4", default-features = false, features = ["clock", "serde", "std"] }

[dev-dependencies]
tempfile = "3"
tokio = { version = "1", features = ["macros", "rt-multi-thread", "test-util"] }