mirror of https://github.com/ndarilek/tts-rs.git
Finish callback implementation.
This commit is contained in:
parent
0ea46b29b2
commit
8d6f40b1a5
|
@ -7,9 +7,9 @@ fn run() -> Result<(), Error> {
|
||||||
..
|
..
|
||||||
} = tts.supported_features();
|
} = tts.supported_features();
|
||||||
if utterance_callbacks {
|
if utterance_callbacks {
|
||||||
/*tts.on_utterance_begin(Some(Box::new(|utterance| {
|
tts.on_utterance_begin(Some(Box::new(|utterance| {
|
||||||
println!("Started speaking {:?}", utterance)
|
println!("Started speaking {:?}", utterance)
|
||||||
})))?;*/
|
})))?;
|
||||||
tts.on_utterance_end(Some(Box::new(|utterance| {
|
tts.on_utterance_end(Some(Box::new(|utterance| {
|
||||||
println!("Finished speaking {:?}", utterance)
|
println!("Finished speaking {:?}", utterance)
|
||||||
})))?;
|
})))?;
|
||||||
|
@ -57,6 +57,7 @@ fn run() -> Result<(), Error> {
|
||||||
tts.set_volume(original_volume)?;
|
tts.set_volume(original_volume)?;
|
||||||
}
|
}
|
||||||
tts.speak("Goodbye.", false)?;
|
tts.speak("Goodbye.", false)?;
|
||||||
|
loop {}
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -71,13 +71,10 @@ pub unsafe extern "C" fn Java_rs_tts_Bridge_onStart(
|
||||||
.unwrap();
|
.unwrap();
|
||||||
let utterance_id = utterance_id.parse::<u64>().unwrap();
|
let utterance_id = utterance_id.parse::<u64>().unwrap();
|
||||||
let utterance_id = UtteranceId::Android(utterance_id);
|
let utterance_id = UtteranceId::Android(utterance_id);
|
||||||
println!("Retrieving callbacks for {:?}", backend_id);
|
|
||||||
let mut callbacks = CALLBACKS.lock().unwrap();
|
let mut callbacks = CALLBACKS.lock().unwrap();
|
||||||
println!("Callback keys: {:?}", callbacks.keys());
|
let cb = callbacks.get_mut(&backend_id).unwrap();
|
||||||
if let Some(cb) = callbacks.get_mut(&backend_id) {
|
if let Some(f) = cb.utterance_begin.as_mut() {
|
||||||
if let Some(f) = cb.utterance_begin.as_mut() {
|
f(utterance_id);
|
||||||
f(utterance_id);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,17 +85,24 @@ pub unsafe extern "C" fn Java_rs_tts_Bridge_onStop(
|
||||||
obj: JObject,
|
obj: JObject,
|
||||||
utterance_id: JString,
|
utterance_id: JString,
|
||||||
) {
|
) {
|
||||||
let id = env
|
let backend_id = env
|
||||||
.get_field(obj, "backendId", "I")
|
.get_field(obj, "backendId", "I")
|
||||||
.expect("Failed to get backend ID")
|
.expect("Failed to get backend ID")
|
||||||
.i()
|
.i()
|
||||||
.expect("Failed to cast to int") as u64;
|
.expect("Failed to cast to int") as u64;
|
||||||
|
let backend_id = BackendId::Android(backend_id);
|
||||||
let utterance_id = CString::from(CStr::from_ptr(
|
let utterance_id = CString::from(CStr::from_ptr(
|
||||||
env.get_string(utterance_id).unwrap().as_ptr(),
|
env.get_string(utterance_id).unwrap().as_ptr(),
|
||||||
))
|
))
|
||||||
.into_string()
|
.into_string()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
//println!("Call stop for {}", utterance_id);
|
let utterance_id = utterance_id.parse::<u64>().unwrap();
|
||||||
|
let utterance_id = UtteranceId::Android(utterance_id);
|
||||||
|
let mut callbacks = CALLBACKS.lock().unwrap();
|
||||||
|
let cb = callbacks.get_mut(&backend_id).unwrap();
|
||||||
|
if let Some(f) = cb.utterance_end.as_mut() {
|
||||||
|
f(utterance_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -108,17 +112,24 @@ pub unsafe extern "C" fn Java_rs_tts_Bridge_onDone(
|
||||||
obj: JObject,
|
obj: JObject,
|
||||||
utterance_id: JString,
|
utterance_id: JString,
|
||||||
) {
|
) {
|
||||||
let id = env
|
let backend_id = env
|
||||||
.get_field(obj, "backendId", "I")
|
.get_field(obj, "backendId", "I")
|
||||||
.expect("Failed to get backend ID")
|
.expect("Failed to get backend ID")
|
||||||
.i()
|
.i()
|
||||||
.expect("Failed to cast to int") as u64;
|
.expect("Failed to cast to int") as u64;
|
||||||
|
let backend_id = BackendId::Android(backend_id);
|
||||||
let utterance_id = CString::from(CStr::from_ptr(
|
let utterance_id = CString::from(CStr::from_ptr(
|
||||||
env.get_string(utterance_id).unwrap().as_ptr(),
|
env.get_string(utterance_id).unwrap().as_ptr(),
|
||||||
))
|
))
|
||||||
.into_string()
|
.into_string()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
//println!("Call done for {}", utterance_id);
|
let utterance_id = utterance_id.parse::<u64>().unwrap();
|
||||||
|
let utterance_id = UtteranceId::Android(utterance_id);
|
||||||
|
let mut callbacks = CALLBACKS.lock().unwrap();
|
||||||
|
let cb = callbacks.get_mut(&backend_id).unwrap();
|
||||||
|
if let Some(f) = cb.utterance_stop.as_mut() {
|
||||||
|
f(utterance_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[no_mangle]
|
#[no_mangle]
|
||||||
|
@ -128,17 +139,24 @@ pub unsafe extern "C" fn Java_rs_tts_Bridge_onError(
|
||||||
obj: JObject,
|
obj: JObject,
|
||||||
utterance_id: JString,
|
utterance_id: JString,
|
||||||
) {
|
) {
|
||||||
let id = env
|
let backend_id = env
|
||||||
.get_field(obj, "backendId", "I")
|
.get_field(obj, "backendId", "I")
|
||||||
.expect("Failed to get backend ID")
|
.expect("Failed to get backend ID")
|
||||||
.i()
|
.i()
|
||||||
.expect("Failed to cast to int") as u64;
|
.expect("Failed to cast to int") as u64;
|
||||||
|
let backend_id = BackendId::Android(backend_id);
|
||||||
let utterance_id = CString::from(CStr::from_ptr(
|
let utterance_id = CString::from(CStr::from_ptr(
|
||||||
env.get_string(utterance_id).unwrap().as_ptr(),
|
env.get_string(utterance_id).unwrap().as_ptr(),
|
||||||
))
|
))
|
||||||
.into_string()
|
.into_string()
|
||||||
.unwrap();
|
.unwrap();
|
||||||
//println!("Call error for {}", utterance_id);
|
let utterance_id = utterance_id.parse::<u64>().unwrap();
|
||||||
|
let utterance_id = UtteranceId::Android(utterance_id);
|
||||||
|
let mut callbacks = CALLBACKS.lock().unwrap();
|
||||||
|
let cb = callbacks.get_mut(&backend_id).unwrap();
|
||||||
|
if let Some(f) = cb.utterance_end.as_mut() {
|
||||||
|
f(utterance_id);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
|
|
|
@ -213,9 +213,7 @@ impl TTS {
|
||||||
if let Ok(backend) = backend {
|
if let Ok(backend) = backend {
|
||||||
if let Some(id) = backend.0.id() {
|
if let Some(id) = backend.0.id() {
|
||||||
let mut callbacks = CALLBACKS.lock().unwrap();
|
let mut callbacks = CALLBACKS.lock().unwrap();
|
||||||
println!("Initializing callbacks for {:?}", id);
|
|
||||||
callbacks.insert(id, Callbacks::default());
|
callbacks.insert(id, Callbacks::default());
|
||||||
println!("Keys after: {:?}", callbacks.keys());
|
|
||||||
}
|
}
|
||||||
Ok(backend)
|
Ok(backend)
|
||||||
} else {
|
} else {
|
||||||
|
|
Loading…
Reference in New Issue