|
1 | | -use std::{fs, hint::black_box, slice}; |
| 1 | +use std::hint::black_box; |
2 | 2 |
|
3 | 3 | use criterion::{Criterion, criterion_group, criterion_main}; |
4 | | -use earshot::{VoiceActivityDetector, VoiceActivityModel, VoiceActivityProfile}; |
| 4 | +use earshot::{Detector, QuantizedPredictor}; |
5 | 5 |
|
6 | | -fn bench_vad_8khz(c: &mut Criterion) { |
7 | | - let file = fs::read("tests/data/audio_tiny8.raw").unwrap(); |
8 | | - let i16_samples = unsafe { slice::from_raw_parts(file.as_ptr().cast::<i16>(), file.len() / 2) }; |
9 | | - let mut vad = VoiceActivityDetector::new_with_model(VoiceActivityModel::ES_ALPHA, VoiceActivityProfile::VERY_AGGRESSIVE); |
10 | | - c.bench_function("VAD - 8 KHz (Real world)", |b| { |
| 6 | +fn bench_vad(c: &mut Criterion) { |
| 7 | + let mut vad = Detector::<QuantizedPredictor>::default(); |
| 8 | + c.bench_function("Single frame - f32", |b| { |
| 9 | + let frame = (0..256 as i16).map(|i| i.wrapping_mul(i) as f32).collect::<Vec<_>>(); |
11 | 10 | b.iter(|| { |
12 | | - for frame in i16_samples.chunks_exact(240) { |
13 | | - let _ = black_box(vad.predict_8khz(black_box(frame))); |
14 | | - } |
| 11 | + let _ = black_box(vad.predict_f32(black_box(&frame))); |
15 | 12 | }) |
16 | 13 | }); |
17 | | - c.bench_function("VAD - 8 KHz (Single frame)", |b| { |
18 | | - let frame = (0..240 as i16).map(|i| i.wrapping_mul(i)).collect::<Vec<_>>(); |
| 14 | + c.bench_function("Single frame - i16", |b| { |
| 15 | + let frame = (0..256 as i16).map(|i| i.wrapping_mul(i)).collect::<Vec<_>>(); |
19 | 16 | b.iter(|| { |
20 | | - let _ = black_box(vad.predict_8khz(black_box(&frame))); |
| 17 | + let _ = black_box(vad.predict_i16(black_box(&frame))); |
21 | 18 | }) |
22 | 19 | }); |
23 | 20 | } |
24 | 21 |
|
25 | | -fn bench_vad_16khz(c: &mut Criterion) { |
26 | | - let file = fs::read("tests/data/audio_tiny16.raw").unwrap(); |
27 | | - let i16_samples = unsafe { slice::from_raw_parts(file.as_ptr().cast::<i16>(), file.len() / 2) }; |
28 | | - let mut vad = VoiceActivityDetector::new_with_model(VoiceActivityModel::ES_ALPHA, VoiceActivityProfile::VERY_AGGRESSIVE); |
29 | | - c.bench_function("VAD - 16 KHz (Real world)", |b| { |
30 | | - b.iter(|| { |
31 | | - for frame in i16_samples.chunks_exact(240) { |
32 | | - let _ = black_box(vad.predict_16khz(black_box(frame))); |
33 | | - } |
34 | | - }) |
35 | | - }); |
36 | | - c.bench_function("VAD - 16 KHz (Single frame)", |b| { |
37 | | - let frame = (0..480 as i16).map(|i| i.wrapping_mul(i)).collect::<Vec<_>>(); |
38 | | - b.iter(|| { |
39 | | - let _ = black_box(vad.predict_16khz(black_box(&frame))); |
40 | | - }) |
41 | | - }); |
42 | | -} |
43 | | - |
44 | | -fn bench_vad_32khz(c: &mut Criterion) { |
45 | | - let file = fs::read("tests/data/audio_tiny32.raw").unwrap(); |
46 | | - let i16_samples = unsafe { slice::from_raw_parts(file.as_ptr().cast::<i16>(), file.len() / 2) }; |
47 | | - let mut vad = VoiceActivityDetector::new_with_model(VoiceActivityModel::ES_ALPHA, VoiceActivityProfile::VERY_AGGRESSIVE); |
48 | | - c.bench_function("VAD - 32 KHz (Real world)", |b| { |
49 | | - b.iter(|| { |
50 | | - for frame in i16_samples.chunks_exact(240) { |
51 | | - let _ = black_box(vad.predict_32khz(black_box(frame))); |
52 | | - } |
53 | | - }) |
54 | | - }); |
55 | | - c.bench_function("VAD - 32 KHz (Single frame)", |b| { |
56 | | - let frame = (0..960 as i16).map(|i| i.wrapping_mul(i)).collect::<Vec<_>>(); |
57 | | - b.iter(|| { |
58 | | - let _ = black_box(vad.predict_32khz(black_box(&frame))); |
59 | | - }) |
60 | | - }); |
61 | | -} |
62 | | - |
63 | | -fn bench_vad_48khz(c: &mut Criterion) { |
64 | | - let file = fs::read("tests/data/audio_tiny48.raw").unwrap(); |
65 | | - let i16_samples = unsafe { slice::from_raw_parts(file.as_ptr().cast::<i16>(), file.len() / 2) }; |
66 | | - let mut vad = VoiceActivityDetector::new_with_model(VoiceActivityModel::ES_ALPHA, VoiceActivityProfile::VERY_AGGRESSIVE); |
67 | | - c.bench_function("VAD - 48 KHz (Real world)", |b| { |
68 | | - b.iter(|| { |
69 | | - for frame in i16_samples.chunks_exact(240) { |
70 | | - let _ = black_box(vad.predict_48khz(black_box(frame))); |
71 | | - } |
72 | | - }) |
73 | | - }); |
74 | | - c.bench_function("VAD - 48 KHz (Single frame)", |b| { |
75 | | - let frame = (0..1440 as i16).map(|i| i.wrapping_mul(i)).collect::<Vec<_>>(); |
76 | | - b.iter(|| { |
77 | | - let _ = black_box(vad.predict_48khz(black_box(&frame))); |
78 | | - }) |
79 | | - }); |
80 | | -} |
81 | | - |
82 | | -criterion_group!(vad, bench_vad_8khz, bench_vad_16khz, bench_vad_32khz, bench_vad_48khz); |
| 22 | +criterion_group!(vad, bench_vad); |
83 | 23 | criterion_main!(vad); |
0 commit comments