back to mvp
parent
deffc420ca
commit
532ae22908
32
src/main.rs
32
src/main.rs
|
|
@ -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 {}
|
||||
|
|
|
|||
Loading…
Reference in New Issue