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>| { 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 {
w.transcribe(&buffer); match w.transcribe_async(&buffer) {
Ok(_) => (),
Err(msg) => eprintln!("{}", msg),
};
for i in stream_retain..buffer.len() { for i in stream_retain..buffer.len() {
buffer[i - stream_retain] = buffer[i] buffer[i - stream_retain] = buffer[i]
@ -82,13 +85,19 @@ 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>) {
self.transcribe_async(data).unwrap(); let (send, recv) = std::sync::mpsc::sync_channel(1);
// TODO block self._transcribe_async(data, Some(send)).unwrap();
recv.recv().unwrap();
} }
fn transcribe_async(&self, data: &Vec<f32>) -> Result<(), String> { 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{ match self.jobs.try_send(AWhisper{
data: data.clone().to_vec(), data: data.clone().to_vec(),
ack: ack,
}) { }) {
Ok(_) => Ok(()), Ok(_) => Ok(()),
Err(msg) => Err(format!("failed to enqueue transcription: {}", msg)), Err(msg) => Err(format!("failed to enqueue transcription: {}", msg)),
@ -109,8 +118,20 @@ impl WhisperEngine {
match recv.recv() { match recv.recv() {
Ok(job) => { Ok(job) => {
match self.transcribe(&job.data) { match self.transcribe(&job.data) {
Ok(result) => self.handler.on_success(result), Ok(result) => {
Err(msg) => self.handler.on_error(format!("failed to transcribe: {}", msg)), 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, Err(_) => return,
@ -146,6 +167,7 @@ impl WhisperEngine {
struct AWhisper { struct AWhisper {
data: Vec<f32>, data: Vec<f32>,
ack: Option<std::sync::mpsc::SyncSender<bool>>,
} }
struct Handler {} struct Handler {}