mirror of
https://github.com/lightsoutgames/bevy_tts.git
synced 2024-12-21 15:25:56 +00:00
Initial commit.
This commit is contained in:
commit
7f32fee73e
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
Cargo.lock
|
||||||
|
target/
|
16
Cargo.toml
Normal file
16
Cargo.toml
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
[package]
|
||||||
|
name = "bevy_tts"
|
||||||
|
version = "0.1.0"
|
||||||
|
authors = ["Nolan Darilek <nolan@thewordnerd.info>"]
|
||||||
|
edition = "2018"
|
||||||
|
|
||||||
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
|
[features]
|
||||||
|
|
||||||
|
use_tolk = ["tts/use_tolk"]
|
||||||
|
|
||||||
|
[dependencies]
|
||||||
|
|
||||||
|
bevy = { git = "https://github.com/bevyengine/bevy" }
|
||||||
|
tts = { version = "0.12", features = ["use_tolk"] }
|
55
src/lib.rs
Normal file
55
src/lib.rs
Normal file
|
@ -0,0 +1,55 @@
|
||||||
|
use std::sync::mpsc::{channel, Receiver};
|
||||||
|
|
||||||
|
use bevy::prelude::*;
|
||||||
|
pub use tts::{Features, UtteranceId, TTS};
|
||||||
|
|
||||||
|
#[derive(Clone, Copy, Debug)]
|
||||||
|
pub enum TtsEvent {
|
||||||
|
UtteranceBegin(UtteranceId),
|
||||||
|
UtteranceEnd(UtteranceId),
|
||||||
|
UtteranceStop(UtteranceId),
|
||||||
|
}
|
||||||
|
|
||||||
|
struct TtsChannel(Receiver<TtsEvent>);
|
||||||
|
|
||||||
|
fn poll_callbacks_system(_: &mut World, resources: &mut Resources) {
|
||||||
|
let channel = resources.get_thread_local::<TtsChannel>().unwrap();
|
||||||
|
if let Ok(msg) = channel.0.try_recv() {
|
||||||
|
let mut events = resources.get_mut::<Events<TtsEvent>>().unwrap();
|
||||||
|
events.send(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct TtsPlugin;
|
||||||
|
|
||||||
|
impl Plugin for TtsPlugin {
|
||||||
|
fn build(&self, app: &mut AppBuilder) {
|
||||||
|
let tts = TTS::default().unwrap();
|
||||||
|
let (tx, rx) = channel();
|
||||||
|
let tx_begin = tx.clone();
|
||||||
|
let tx_end = tx.clone();
|
||||||
|
let tx_stop = tx;
|
||||||
|
let Features {
|
||||||
|
utterance_callbacks,
|
||||||
|
..
|
||||||
|
} = tts.supported_features();
|
||||||
|
if utterance_callbacks {
|
||||||
|
tts.on_utterance_begin(Some(Box::new(move |utterance| {
|
||||||
|
tx_begin.send(TtsEvent::UtteranceBegin(utterance)).unwrap();
|
||||||
|
})))
|
||||||
|
.unwrap();
|
||||||
|
tts.on_utterance_end(Some(Box::new(move |utterance| {
|
||||||
|
tx_end.send(TtsEvent::UtteranceEnd(utterance)).unwrap();
|
||||||
|
})))
|
||||||
|
.unwrap();
|
||||||
|
tts.on_utterance_stop(Some(Box::new(move |utterance| {
|
||||||
|
tx_stop.send(TtsEvent::UtteranceStop(utterance)).unwrap();
|
||||||
|
})))
|
||||||
|
.unwrap();
|
||||||
|
}
|
||||||
|
app.add_event::<TtsEvent>()
|
||||||
|
.add_thread_local_resource(TtsChannel(rx))
|
||||||
|
.add_resource(tts)
|
||||||
|
.add_system(poll_callbacks_system);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user