Function pyannote_rs::segment::segment

source ยท
pub fn segment(
    samples: &[i16],
    sample_rate: u32,
    model_path: &Path,
) -> Result<Vec<(f64, f64)>>
Examples found in repository?
examples/diarize.rs (line 20)
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
fn main() -> Result<()> {
    let model_path = Path::new("segmentation-3.0.onnx");
    let (samples, sample_rate) =
        wav::read_wav(&std::env::args().nth(1).expect("Please specify audio file"))?;

    let mut samples_f32 = vec![0.0; samples.len()];
    knf_rs::convert_integer_to_float_audio(&samples, &mut samples_f32);

    let mut embedding_extractor =
        EmbeddingExtractor::new(Path::new("wespeaker_en_voxceleb_CAM++.onnx")).unwrap();
    let mut embedding_manager = EmbeddingManager::new(6);

    let segments = segment::segment(&samples, sample_rate, model_path)?;

    for (start, end) in segments {
        // Convert start and end times to sample indices
        let start_f64 = start * (sample_rate as f64);
        let end_f64 = end * (sample_rate as f64);

        // Ensure indices are within bounds
        let start_idx = start_f64.min((samples_f32.len() - 1) as f64) as usize;
        let end_idx = end_f64.min(samples_f32.len() as f64) as usize;

        // Extract segment samples
        let segment_samples = &samples_f32[start_idx..end_idx];

        // Compute embedding
        match embedding_extractor.compute(&segment_samples) {
            Ok(embedding_result) => {
                let speaker = embedding_manager
                    .get_speaker(embedding_result, 0.5)
                    .map(|r| r.to_string())
                    .unwrap_or("?".into());
                println!(
                    "start = {:.2}, end = {:.2}, speaker = {}",
                    start, end, speaker
                );
            }
            Err(error) => {
                println!("start = {:.2}, end = {:.2}, speaker = {}", start, end, "?");
                println!("error: {:?}", error);
            }
        }
    }

    Ok(())
}