wait i just needed an option? f off

master
Bel LaPointe 2023-12-19 20:20:24 -05:00
parent 367838ac23
commit 5f47b2c88b
1 changed files with 20 additions and 7 deletions

View File

@ -63,7 +63,10 @@ fn main() {
new_listener().listen(move |data: Vec<f32>| { new_listener().listen(move |data: Vec<f32>| {
data.iter().for_each(|x| buffer.push(*x)); data.iter().for_each(|x| buffer.push(*x));
if Instant::now() - last > stream_step { if Instant::now() - last > stream_step {
match w.transcribe_async(&buffer) { //match w.transcribe_async(&buffer) {
match w.transcribe_callback(&buffer, |x| {
println!("CALLBACK: {:?}", &x);
}) {
Ok(_) => (), Ok(_) => (),
Err(msg) => eprintln!("{}", msg), Err(msg) => eprintln!("{}", msg),
}; };
@ -117,18 +120,23 @@ fn new_whisper(model_path: String, threads: i32, handler: Handler) -> Result<Whi
impl Whisper { impl Whisper {
fn transcribe(&self, data: &Vec<f32>) { fn transcribe(&self, data: &Vec<f32>) {
let (send, recv) = std::sync::mpsc::sync_channel(0); let (send, recv) = std::sync::mpsc::sync_channel(0);
self._transcribe_async(data, Some(send)).unwrap(); self._transcribe_async(data, Some(send), None).unwrap();
recv.recv().unwrap(); recv.recv().unwrap();
} }
fn transcribe_async(&self, data: &Vec<f32>) -> Result<(), String> { fn transcribe_callback(&self, data: &Vec<f32>, callback: fn(&Whispered)) -> Result<(), String> {
self._transcribe_async(data, None) self._transcribe_async(data, None, Some(callback))
} }
fn _transcribe_async(&self, data: &Vec<f32>, ack: Option<std::sync::mpsc::SyncSender<bool>>) -> Result<(), String> { fn transcribe_async(&self, data: &Vec<f32>) -> Result<(), String> {
self._transcribe_async(data, None, None)
}
fn _transcribe_async(&self, data: &Vec<f32>, ack: Option<std::sync::mpsc::SyncSender<bool>>, callback: Option<fn(&Whispered)>) -> Result<(), String> {
match self.jobs.try_send(AWhisper{ match self.jobs.try_send(AWhisper{
data: data.clone().to_vec(), data: data.clone().to_vec(),
ack: ack, ack: ack,
callback: callback,
}) { }) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
Err(msg) => Err(format!("failed to enqueue transcription: {}", msg)), Err(msg) => Err(format!("failed to enqueue transcription: {}", msg)),
@ -150,11 +158,15 @@ impl WhisperEngine {
Ok(job) => { Ok(job) => {
match self.transcribe(&job.data) { match self.transcribe(&job.data) {
Ok(result) => { Ok(result) => {
self.handler.on_success(result); self.handler.on_success(&result);
match job.ack { match job.ack {
Some(ack) => { let _ = ack.send(true); }, Some(ack) => { let _ = ack.send(true); },
None => (), None => (),
}; };
match job.callback {
Some(foo) => foo(&result),
None => (),
};
}, },
Err(msg) => { Err(msg) => {
self.handler.on_error(format!("failed to transcribe: {}", msg)); self.handler.on_error(format!("failed to transcribe: {}", msg));
@ -201,6 +213,7 @@ impl WhisperEngine {
struct AWhisper { struct AWhisper {
data: Vec<f32>, data: Vec<f32>,
ack: Option<std::sync::mpsc::SyncSender<bool>>, ack: Option<std::sync::mpsc::SyncSender<bool>>,
callback: Option<fn(&Whispered)>,
} }
#[derive(Clone, Debug)] #[derive(Clone, Debug)]
@ -276,7 +289,7 @@ struct Handler {
} }
impl Handler { impl Handler {
fn on_success(&self, result: Whispered) { fn on_success(&self, result: &Whispered) {
eprintln!("{}: {:?}", chrono::Local::now(), &result); eprintln!("{}: {:?}", chrono::Local::now(), &result);
println!("{}", result println!("{}", result
.after(&(self.head * 100.0)) .after(&(self.head * 100.0))