use crate::stream::record_audio;
use anyhow::Result;
use deepspeech::Model;
use std::fmt::Debug;
#[derive(Debug, Clone, Copy)]
pub struct StreamSettings {
pub silence_level: i32,
pub show_amplitudes: bool,
pub pause_length_millis: u32,
}
impl StreamSettings {
pub fn new(silence_level: i32, show_amplitudes: bool, pause_length_millis: u32) -> Self {
Self {
silence_level,
show_amplitudes,
pause_length_millis,
}
}
}
impl Default for StreamSettings {
fn default() -> Self {
Self {
silence_level: 200,
show_amplitudes: true,
pause_length_millis: 1000,
}
}
}
pub fn transcribe(config: StreamSettings, model: &mut Model) -> Result<String> {
let pause_length_secs: f32 = (config.pause_length_millis / 1000) as f32;
match record_audio(
config.silence_level,
config.show_amplitudes,
pause_length_secs,
) {
Ok(audio_stream) => convert(&audio_stream, model),
Err(e) => Err(anyhow::anyhow!(e)),
}
}
fn convert(audio_stream: &[i16], model: &mut Model) -> Result<String> {
let buf = model.speech_to_text(audio_stream)?;
Ok(buf)
}