Voxa.Audio.Diarization
0.7.2-alpha
dotnet add package Voxa.Audio.Diarization --version 0.7.2-alpha
NuGet\Install-Package Voxa.Audio.Diarization -Version 0.7.2-alpha
<PackageReference Include="Voxa.Audio.Diarization" Version="0.7.2-alpha" />
<PackageVersion Include="Voxa.Audio.Diarization" Version="0.7.2-alpha" />
<PackageReference Include="Voxa.Audio.Diarization" />
paket add Voxa.Audio.Diarization --version 0.7.2-alpha
#r "nuget: Voxa.Audio.Diarization, 0.7.2-alpha"
#:package Voxa.Audio.Diarization@0.7.2-alpha
#addin nuget:?package=Voxa.Audio.Diarization&version=0.7.2-alpha&prerelease
#tool nuget:?package=Voxa.Audio.Diarization&version=0.7.2-alpha&prerelease
Voxa.Audio.Diarization
Speaker diarization for Voxa (VLS-005) — "who spoke when", filling the long-present but always-null
TranscriptionFrame.SpeakerId for batch / meeting transcription.
This package ships the seams + a pure-C# pipeline — not a model:
ISpeakerSegmentation— audio → speech regions (model-backed; e.g. Pyannote).ISpeakerEmbedding— a speech span → a fixed-width speaker vector (model-backed; e.g. WeSpeaker).IDiarizer/DiarizationPipeline— the orchestrator. The pipeline composes a segmenter + an embedder and does the rest in pure C#: form regions → embed each → constrained agglomerative clustering by cosine distance (centroid linkage) → stable speaker ids, with consecutive same-speaker regions merged into one turn. Centroid linkage matches what speech-core / pyannote calibrate the0.715default threshold against.DiarizerConfig— tunables, defaulted to speech-core's values. The one that matters isClusteringThreshold(cosine-distance merge ceiling, default0.715);MinSpeakers/MaxSpeakers(0= auto) force a floor / cap.
Why the orchestration is dependency-free
The pipeline references no ML runtime (and not even Voxa.Core) — steps 3–4 take float[] embeddings and
emit DiarizedSegment[] with no I/O. That is what makes the clustering testable on hand-built synthetic
embeddings in the default lane (two tight groups → two speakers, threshold sensitivity, speaker-count caps,
determinism) with no model download, mirroring speech-core's runtime-free DiarizationPipeline.
Not yet here (needs real pinned models / a consumer)
- The reference ONNX implementations (Pyannote segmentation + WeSpeaker embedding) live in a separate
opt-in
Voxa.Audio.Diarization.Onnxpackage — deferred until their models are pinned (real SHA-256 + cleared licences) and built on the VLS-006 ONNX host. - The
voxa transcribe --diarizeCLI verb that writesSpeakerIdonto the transcript — the natural first consumer, which only does something once the ONNX impls exist. - Real-time / streaming diarization and speaker identification (enrollment against known voices) are out of scope (follow-ups once embeddings exist).
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- No dependencies.
NuGet packages (1)
Showing the top 1 NuGet packages that depend on Voxa.Audio.Diarization:
| Package | Downloads |
|---|---|
|
Voxa.Audio.Diarization.Onnx
Reference ONNX implementations for Voxa speaker diarization (VLS-005 WS2). Ships PyannoteOnnxSegmentation — an ISpeakerSegmentation backed by the MIT-licensed pyannote segmentation-3.0 model on the shared Voxa.Audio.Onnx host. The model takes raw 16 kHz audio (SincNet front-end is inside the graph) and emits speaker activity; the package decodes powerset → speech regions in pure C#. Pin is the sherpa-onnx export (MIT). |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 0.7.2-alpha | 86 | 7/10/2026 |
| 0.7.1-alpha | 63 | 7/10/2026 |
| 0.7.0-alpha | 73 | 7/10/2026 |
| 0.6.0-alpha | 77 | 6/22/2026 |