max_speakers/
max_speakers.rs1use anyhow::Result;
2use pyannote_rs::{EmbeddingExtractor, EmbeddingManager, Segmenter, read_wav};
3
4fn main() -> Result<()> {
5 let audio_path = std::env::args().nth(1).expect("Please specify audio file");
6 let (samples, sample_rate) = read_wav(&audio_path)?;
7 let max_speakers = 6;
8
9 let extractor = EmbeddingExtractor::new("src/nn/speaker_identification/model.bpk")?;
10 let mut manager = EmbeddingManager::new(max_speakers);
11 let segmenter = Segmenter::new("src/nn/segmentation/model.bpk")?;
12
13 for segment in segmenter.iter_segments(&samples, sample_rate)? {
14 let segment = segment?;
15 let embedding = extractor.extract(&segment.samples, sample_rate)?;
16
17 let speaker = if manager.is_full() {
18 manager.best_match(&embedding)
19 } else {
20 manager.upsert(&embedding, 0.5)
21 }
22 .map(|s| s.to_string())
23 .unwrap_or_else(|| "?".into());
24
25 println!(
26 "start = {:.2}, end = {:.2}, speaker = {}",
27 segment.start, segment.end, speaker
28 );
29 }
30
31 Ok(())
32}