38 lines
1.4 KiB
Rust
38 lines
1.4 KiB
Rust
use whisper_rs::{WhisperContext, FullParams, SamplingStrategy};
|
|
|
|
fn main() {
|
|
let mut ctx = WhisperContext::new(
|
|
&std::env::var("MODEL").unwrap_or(String::from("../models/ggml-tiny.en.bin"))
|
|
).expect("failed to load model");
|
|
|
|
// create a params object
|
|
let mut params = FullParams::new(SamplingStrategy::Greedy { best_of: 0 });
|
|
params.set_n_threads(
|
|
std::env::var("P").unwrap_or(String::from("1")).parse::<i32>().expect("$P must be a number")
|
|
);
|
|
params.set_translate(false);
|
|
params.set_language(Some("en"));
|
|
params.set_print_special(false);
|
|
params.set_print_progress(false);
|
|
params.set_print_realtime(false);
|
|
params.set_print_timestamps(false);
|
|
|
|
let (header, data) = wav::read(&mut std::fs::File::open(
|
|
&std::env::var("WAV").unwrap_or(String::from("../git.d/samples/jfk.wav"))
|
|
).expect("failed to open .wav")).expect("failed to decode .wav");
|
|
assert!(header.channel_count == 1);
|
|
assert!(header.sampling_rate == 16000);
|
|
let data16 = data.as_sixteen().expect("wav is not 32bit floats");
|
|
let audio_data = &whisper_rs::convert_integer_to_float_audio(&data16);
|
|
|
|
ctx.full(params, &audio_data[..])
|
|
.expect("failed to run model");
|
|
|
|
let num_segments = ctx.full_n_segments();
|
|
for i in 0..num_segments {
|
|
let segment = ctx.full_get_segment_text(i).expect("failed to get segment");
|
|
print!("{} ", segment);
|
|
}
|
|
println!("");
|
|
}
|