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>| {
|
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 {}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue