back to mvp

master
Bel LaPointe 2023-11-30 12:28:35 -07:00
parent deffc420ca
commit 532ae22908
1 changed files with 27 additions and 5 deletions

View File

@ -46,7 +46,10 @@ fn main() {
new_listener().listen(move |data: Vec<f32>| {
data.iter().for_each(|x| buffer.push(*x));
if Instant::now() - last > stream_step {
w.transcribe(&buffer);
match w.transcribe_async(&buffer) {
Ok(_) => (),
Err(msg) => eprintln!("{}", msg),
};
for i in stream_retain..buffer.len() {
buffer[i - stream_retain] = buffer[i]
@ -82,13 +85,19 @@ fn new_whisper(model_path: String, threads: i32, handler: Handler) -> Result<Whi
impl Whisper {
fn transcribe(&self, data: &Vec<f32>) {
self.transcribe_async(data).unwrap();
// TODO block
let (send, recv) = std::sync::mpsc::sync_channel(1);
self._transcribe_async(data, Some(send)).unwrap();
recv.recv().unwrap();
}
fn transcribe_async(&self, data: &Vec<f32>) -> Result<(), String> {
self._transcribe_async(data, None)
}
fn _transcribe_async(&self, data: &Vec<f32>, ack: Option<std::sync::mpsc::SyncSender<bool>>) -> Result<(), String> {
match self.jobs.try_send(AWhisper{
data: data.clone().to_vec(),
ack: ack,
}) {
Ok(_) => Ok(()),
Err(msg) => Err(format!("failed to enqueue transcription: {}", msg)),
@ -109,8 +118,20 @@ impl WhisperEngine {
match recv.recv() {
Ok(job) => {
match self.transcribe(&job.data) {
Ok(result) => self.handler.on_success(result),
Err(msg) => self.handler.on_error(format!("failed to transcribe: {}", msg)),
Ok(result) => {
self.handler.on_success(result);
match job.ack {
Some(ack) => { let _ = ack.send(true); },
None => (),
};
},
Err(msg) => {
self.handler.on_error(format!("failed to transcribe: {}", msg));
match job.ack {
Some(ack) => { let _ = ack.send(false); },
None => (),
};
},
};
},
Err(_) => return,
@ -146,6 +167,7 @@ impl WhisperEngine {
struct AWhisper {
data: Vec<f32>,
ack: Option<std::sync::mpsc::SyncSender<bool>>,
}
struct Handler {}