tts-rs/src/backends/speech_dispatcher.rs

46 lines
1.2 KiB
Rust
Raw Normal View History

2018-12-14 19:35:49 +00:00
#[cfg(target_os = "linux")]
use std::u8;
use log::{info, trace};
use speech_dispatcher::*;
use crate::Backend;
pub struct SpeechDispatcher(Connection);
impl SpeechDispatcher {
pub fn new() -> impl Backend {
info!("Initializing SpeechDispatcher backend");
let connection = speech_dispatcher::Connection::open("tts", "tts", "tts", Mode::Single);
SpeechDispatcher(connection)
}
}
impl Backend for SpeechDispatcher {
fn speak(&self, text: &str, interrupt: bool) {
trace!("speak({}, {})", text, interrupt);
if interrupt {
self.0.cancel();
}
self.0.say(Priority::Important, text);
}
fn get_rate(&self) -> u8 {
let rate = self.0.get_voice_rate() as f32;
trace!("get_voice_rate() = {}", rate);
let ratio: f32 = (rate + 100.) / 200.;
trace!("ratio = {}", ratio);
let rate = ratio * u8::MAX as f32;
trace!("rate = {}", rate);
rate as u8
}
fn set_rate(&self, rate: u8) {
trace!("set_rate({})", rate);
let ratio: f32 = rate as f32/u8::MAX as f32;
let rate = ratio * 200. - 100.;
self.0.set_voice_rate(rate as i32);
}
}