1
0
mirror of https://github.com/ndarilek/tts-rs.git synced 2024-11-25 15:39:38 +00:00
Commit Graph

108 Commits

Author SHA1 Message Date
f5f11b7cdf Switch to using MediaPlaybackItem as WinRT utterance ID. 2020-09-22 14:51:59 -05:00
017aa8863b Remove unused import and fix i~~OS builds. 2020-09-22 14:30:17 -05:00
6b023c3071 Add AV Foundation support for returning utterance IDs. 2020-09-22 14:08:19 -05:00
4816ec575c Make speak calls return an utterance ID, where possible. 2020-09-22 12:40:03 -05:00
d6508edd12 Remove workaround for incorrect Tolk string handling, pin minimum working version, and bump version. 2020-09-21 15:13:22 -05:00
665013fdff Split text sent to Tolk backend to account for some sort of length limit.
Tolk seems to fail on strings larger than 325 characters in length. Here we:
* Send any strings with 300 or fewer characters through directly.
* For larger strings, split on whitespace boundaries, then create and send buffers of 300 or fewer characters.

This may not handle internationalized text, and may not handle someone bombarding TTS with a giant word. PRs for either welcome.
2020-09-02 11:40:08 -05:00
6c091f3284 Switch Speech-dispatcher initialization to threaded mode so callbacks work and is_speaking is correct. 2020-08-25 11:50:25 -05:00
d3ffd5078f cargo fmt 2020-08-24 16:46:57 -05:00
1507527175 Add Default implementation for Features so backends need only specify features they actually support. 2020-08-24 16:44:00 -05:00
951e31b284 Implement is_speaking For Speech-dispatcher. 2020-08-19 21:28:30 -05:00
7bcbda15b3 Update supported platforms. 2020-08-18 15:22:12 -05:00
a1e4215ea7 Normal volume of speech-dispatcher is 100, not 0. 2020-08-18 15:19:34 -05:00
2f85c3b2bf Add iOS build. 2020-08-18 15:16:30 -05:00
cce1569c72 Sync supported synths in README and lib.rs. 2020-08-13 11:15:23 -05:00
ff877acd87 Eliminate warning in non-MacOS builds. 2020-08-13 11:11:38 -05:00
c5b1ff1944 Add AVFoundation backend, used automatically on MacOS 10.14 and above. 2020-08-13 11:08:00 -05:00
2d0ab8889a Eliminate a warning. 2020-08-13 06:58:16 -05:00
cc2a4c12f7 Rename ns_speech_synthesizer backend to appkit. 2020-08-13 06:46:16 -05:00
af678d76d1 Update documentation with supported backends. 2020-08-12 15:45:16 -05:00
75fd320d3f Implement rate/volume-setting for NSSpeechSynthesizer, along with other tweaks.
Unfortunately, there seems to be a difference in how the `hello_world` example processes rate and volume changes. I'm not sure if it doesn't adjust rate for samples while speaking. In any case, arguably there are just going to be differences in platforms that I can't account for, so this may just have to be. Hopefully it doesn't interfere with actual usage.
2020-08-12 15:41:57 -05:00
dc1c00f446 Good news: NSSpeechSynthesizer speech now queues. Bad news: my brain bleeds. 2020-08-12 15:14:17 -05:00
7eccb9f573 Clean up println! and comparison calls. 2020-08-12 09:54:25 -05:00
427ca027be Add Drop implementation. 2020-08-12 09:52:16 -05:00
47bfe768e6 Get delegates working so speech interruption/queuing should now be possible.
* Fix broken delegate method signature.
* Add `NSRunLoop` into `hello_world` example so delegates are called. Presumably, MacOS apps already run one of these, but the example didn't.
2020-08-12 09:49:51 -05:00
faadc0e3b7 Still doesn't work, but at least it doesn't segfault now. 2020-08-11 14:44:52 -05:00
753f6c5ecd WIP: Initial support for MacOS/NSSpeechSynthesizer.
* Add necessary dependencies, build script, and `NSSpeechSynthesizer` backend.
* Get very basic speech working.

Needs a delegate to handle queued speech, and currently segfaults if one is set.
2020-08-11 12:11:19 -05:00
e1bb6741a9 Correctly indicate that WinRT supports detection of speaking. 2020-07-07 09:08:44 -05:00
16a6f6378a Under WinRT, recreate player completely when interruption is requested. 2020-07-06 12:52:18 -05:00
1d7c668a4a Sanity-check value to prevent overflow. 2020-07-06 12:14:50 -05:00
d830f44c55 Handle corner case where WinRT speech that doesn't interrupt, and is played after a delay, causes recently-spoken utterances to replay.
`MediaPlayer` only seems to have states for playing and paused, but not stopped. Further, playing when the queue is finished seems to restart playback from the beginning.

Here we clear the list of items to play if the player is paused and we're on the last item. We assume we're done with all items to speak, and clear the list before appending a new item and beginning playback again.

The correct solution is probably to investigate how events work in winrt-rs, but callbacks and Rust have always been a disaster when I've tried them, so I'm hesitant. This does seem to handle the basic scenarios I've thrown at it.
2020-06-17 18:54:34 -05:00
ce8c5f5289 Refactor to use separate tts_winrt_bindings crate, and bump version. 2020-06-17 17:25:43 -05:00
45c7b1afc7 Various WinRT refinements.
* Move autogenerated code to subcrate to speed up compilation.
* `is_speaking` also checks whether a source is opening, in addition to whether it is playing.
* Return to using autoplay.
2020-06-17 16:46:42 -05:00
10a9d56ae5 Remove autoplay setting. 2020-06-14 20:03:11 -05:00
933e850919 Ensure that MediaPlayer for speech is playing. 2020-06-14 19:42:48 -05:00
1526602ad8 Don't close MediaPlayer when stopping speech, and actually support interruption. 2020-06-14 18:56:01 -05:00
4f011e6895 Get Tolk working again.
Two Tolk instances were being created. One checked for the presence of a screen reader. The other actually performed the speech, and was returned as part of the `TTS` instance.

Unfortunately, Tolk doesn't seem to appreciate being called twice. So here we check if a screen reader is detected and, if one is, return the instance that did the detection. Otherwise, error out and return the WinRT backend.
2020-06-11 13:00:24 -05:00
c82ea5f3b3 WinRT fixes.
* Use released `winrt` crate.
* Implement `is_speaking`.
2020-06-09 11:00:37 -05:00
d004404e4d Forgot we have to fully-qualify the type here. 2020-06-02 16:59:04 -05:00
d46b886875 Remove JavaScript error from non-JavaScript builds. 2020-06-02 14:57:21 -05:00
c24c1d3230 Implement support for detecting when TTS is speaking. 2020-06-02 14:53:14 -05:00
7b4fb8dae4 Clean up speech synthesis properties, and implement everything for WinRT.
I'd previously attempted to normalize everything to `u8`, but this had some drawbacks:

 * It failed to account for some synthesis drivers defining normal as mid-range, while most define it very low.
 * It didn't track the normal value for a given synthesizer.
 * There was no clean way to map a curve between the minimum, normal, and maximum rates.

Here we track the minimum, normal, and maximum values of rate, pitch, and volume. Sanity checks are done on set.

Also, as a further proof-of-concept, all properties are now implemented for the WinRT driver.
2020-05-18 18:12:59 -05:00
3198a537f0 Initial WinRT backend.
* Add WinRT backend
 * Refactor to use thiserror and unify error-handling
 * If a screen reader is detected. use Tolk. Otherwise, use the WinRT backend.
2020-05-18 15:14:09 -05:00
f4b4ba5184 Clippy and fmt. 2019-12-23 07:37:48 -06:00
7488dcbe3a For single-character text, set punctuation to all so the text is spoken. 2019-09-30 10:36:51 -05:00
36745f9850 Eliminate deprecation warning. 2019-09-30 10:36:20 -05:00
1c1f38b55d Use new Tolk library and update backend. 2019-09-10 10:41:28 -05:00
071eefbe0e Resolve merge conflict. 2019-03-25 19:21:02 +00:00
3bda7bcff4 Add Tolk backend. 2019-03-25 19:15:08 +00:00
e388934e5e Support dynamic feature selection/use in example. 2019-03-25 16:34:30 +00:00
ac4ebea05a Create list of supported features and check them before a method is called. 2019-03-24 21:30:45 +00:00
f9558263ab Implement Send and Sync for TTS. 2019-01-03 17:20:04 +00:00
e82a10ba16 cargo fmt 2019-01-03 16:16:54 +00:00
44f6c489cb Indicate support for WebAssembly. 2018-12-30 17:20:03 +00:00
4fadad9d36 Add Web backend and refactor API. 2018-12-30 17:13:48 +00:00
96722d7032 Add basic documentation. 2018-12-28 15:39:50 +00:00
863ae0e8c3 Implement stop(). 2018-12-28 14:49:02 +00:00
e24ed9a3a3 Add support for volume and pitch. 2018-12-15 15:56:13 +00:00
bac4b7555f Initial commit. 2018-12-14 19:35:49 +00:00