mirror of
https://github.com/ndarilek/tts-rs.git
synced 2024-11-18 21:29:37 +00:00
parent
25f8211661
commit
153075ebab
|
@ -12,4 +12,16 @@ script = [
|
|||
|
||||
[tasks.log-android]
|
||||
command = "adb"
|
||||
args = ["logcat", "RustStdoutStderr:D", "*:S"]
|
||||
args = ["logcat", "RustStdoutStderr:D", "*:S"]
|
||||
|
||||
[tasks.install-trunk]
|
||||
install_crate = { crate_name = "trunk", binary = "trunk", test_arg = "--help" }
|
||||
|
||||
[tasks.install-wasm-bindgen-cli]
|
||||
install_crate = { crate_name = "wasm-bindgen-cli", binary = "wasm-bindgen", test_arg = "--help" }
|
||||
|
||||
[tasks.run-web-example]
|
||||
dependencies = ["install-trunk", "install-wasm-bindgen-cli"]
|
||||
cwd = "examples/web"
|
||||
command = "trunk"
|
||||
args = ["serve"]
|
2
examples/web/.cargo/config
Normal file
2
examples/web/.cargo/config
Normal file
|
@ -0,0 +1,2 @@
|
|||
[build]
|
||||
target = "wasm32-unknown-unknown"
|
1
examples/web/.gitignore
vendored
Normal file
1
examples/web/.gitignore
vendored
Normal file
|
@ -0,0 +1 @@
|
|||
dist
|
11
examples/web/Cargo.toml
Normal file
11
examples/web/Cargo.toml
Normal file
|
@ -0,0 +1,11 @@
|
|||
[package]
|
||||
name = "web"
|
||||
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
|
||||
|
||||
[dependencies]
|
||||
seed = "0.8"
|
||||
tts = { path = "../.." }
|
12
examples/web/index.html
Normal file
12
examples/web/index.html
Normal file
|
@ -0,0 +1,12 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
|
||||
<head>
|
||||
<title>Example</title>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div id="app"></div>
|
||||
</body>
|
||||
|
||||
</html>
|
111
examples/web/src/main.rs
Normal file
111
examples/web/src/main.rs
Normal file
|
@ -0,0 +1,111 @@
|
|||
#![allow(clippy::wildcard_imports)]
|
||||
use seed::{prelude::*, *};
|
||||
|
||||
use tts::TTS;
|
||||
|
||||
#[derive(Clone)]
|
||||
struct Model {
|
||||
text: String,
|
||||
tts: TTS,
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
enum Msg {
|
||||
TextChanged(String),
|
||||
RateChanged(String),
|
||||
PitchChanged(String),
|
||||
VolumeChanged(String),
|
||||
Speak,
|
||||
}
|
||||
|
||||
fn init(_: Url, _: &mut impl Orders<Msg>) -> Model {
|
||||
let tts = TTS::default().unwrap();
|
||||
Model {
|
||||
text: Default::default(),
|
||||
tts,
|
||||
}
|
||||
}
|
||||
|
||||
fn update(msg: Msg, model: &mut Model, _: &mut impl Orders<Msg>) {
|
||||
use Msg::*;
|
||||
match msg {
|
||||
TextChanged(text) => model.text = text,
|
||||
RateChanged(rate) => {
|
||||
let rate = rate.parse::<f32>().unwrap();
|
||||
model.tts.set_rate(rate).unwrap();
|
||||
}
|
||||
PitchChanged(pitch) => {
|
||||
let pitch = pitch.parse::<f32>().unwrap();
|
||||
model.tts.set_pitch(pitch).unwrap();
|
||||
}
|
||||
VolumeChanged(volume) => {
|
||||
let volume = volume.parse::<f32>().unwrap();
|
||||
model.tts.set_volume(volume).unwrap();
|
||||
}
|
||||
Speak => {
|
||||
model.tts.speak(&model.text, false).unwrap();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fn view(model: &Model) -> Node<Msg> {
|
||||
form![
|
||||
div![label![
|
||||
"Text to speak",
|
||||
input![
|
||||
attrs! {
|
||||
At::Value => model.text,
|
||||
At::AutoFocus => AtValue::None,
|
||||
},
|
||||
input_ev(Ev::Input, Msg::TextChanged)
|
||||
],
|
||||
],],
|
||||
div![label![
|
||||
"Rate",
|
||||
input![
|
||||
attrs! {
|
||||
At::Type => "number",
|
||||
At::Value => model.tts.get_rate().unwrap(),
|
||||
At::Min => model.tts.min_rate(),
|
||||
At::Max => model.tts.max_rate()
|
||||
},
|
||||
input_ev(Ev::Input, Msg::RateChanged)
|
||||
],
|
||||
],],
|
||||
div![label![
|
||||
"Pitch",
|
||||
input![
|
||||
attrs! {
|
||||
At::Type => "number",
|
||||
At::Value => model.tts.get_pitch().unwrap(),
|
||||
At::Min => model.tts.min_pitch(),
|
||||
At::Max => model.tts.max_pitch()
|
||||
},
|
||||
input_ev(Ev::Input, Msg::PitchChanged)
|
||||
],
|
||||
],],
|
||||
div![label![
|
||||
"Volume",
|
||||
input![
|
||||
attrs! {
|
||||
At::Type => "number",
|
||||
At::Value => model.tts.get_volume().unwrap(),
|
||||
At::Min => model.tts.min_volume(),
|
||||
At::Max => model.tts.max_volume()
|
||||
},
|
||||
input_ev(Ev::Input, Msg::VolumeChanged)
|
||||
],
|
||||
],],
|
||||
button![
|
||||
"Speak",
|
||||
ev(Ev::Click, |e| {
|
||||
e.prevent_default();
|
||||
Msg::Speak
|
||||
}),
|
||||
],
|
||||
]
|
||||
}
|
||||
|
||||
fn main() {
|
||||
App::start("app", init, update, view);
|
||||
}
|
Loading…
Reference in New Issue
Block a user