Commit Graph

229 Commits

Author SHA1 Message Date
Nolan Darilek 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
Nolan Darilek ce8c5f5289 Refactor to use separate `tts_winrt_bindings` crate, and bump version. 2020-06-17 17:25:43 -05:00
Nolan Darilek 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
Nolan Darilek 10a9d56ae5 Remove autoplay setting. 2020-06-14 20:03:11 -05:00
Nolan Darilek 933e850919 Ensure that `MediaPlayer` for speech is playing. 2020-06-14 19:42:48 -05:00
Nolan Darilek 1526602ad8 Don't close `MediaPlayer` when stopping speech, and actually support interruption. 2020-06-14 18:56:01 -05:00
Nolan Darilek 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
Nolan Darilek c82ea5f3b3 WinRT fixes.
* Use released `winrt` crate.
* Implement `is_speaking`.
2020-06-09 11:00:37 -05:00
Nolan Darilek d004404e4d Forgot we have to fully-qualify the type here. 2020-06-02 16:59:04 -05:00
Nolan Darilek d46b886875 Remove JavaScript error from non-JavaScript builds. 2020-06-02 14:57:21 -05:00
Nolan Darilek c24c1d3230 Implement support for detecting when TTS is speaking. 2020-06-02 14:53:14 -05:00
Nolan Darilek 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
Nolan Darilek 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
Nolan Darilek f4b4ba5184 Clippy and fmt. 2019-12-23 07:37:48 -06:00
Nolan Darilek 7488dcbe3a For single-character text, set punctuation to all so the text is spoken. 2019-09-30 10:36:51 -05:00
Nolan Darilek 36745f9850 Eliminate deprecation warning. 2019-09-30 10:36:20 -05:00
Nolan Darilek 1c1f38b55d Use new Tolk library and update backend. 2019-09-10 10:41:28 -05:00
Nolan Darilek 071eefbe0e Resolve merge conflict. 2019-03-25 19:21:02 +00:00
Nolan Darilek 3bda7bcff4 Add Tolk backend. 2019-03-25 19:15:08 +00:00
Nolan Darilek e388934e5e Support dynamic feature selection/use in example. 2019-03-25 16:34:30 +00:00
Nolan Darilek ac4ebea05a Create list of supported features and check them before a method is called. 2019-03-24 21:30:45 +00:00
Nolan Darilek f9558263ab Implement `Send` and `Sync` for `TTS`. 2019-01-03 17:20:04 +00:00
Nolan Darilek e82a10ba16 cargo fmt 2019-01-03 16:16:54 +00:00
Nolan Darilek 44f6c489cb Indicate support for WebAssembly. 2018-12-30 17:20:03 +00:00
Nolan Darilek 4fadad9d36 Add Web backend and refactor API. 2018-12-30 17:13:48 +00:00
Nolan Darilek 96722d7032 Add basic documentation. 2018-12-28 15:39:50 +00:00
Nolan Darilek 863ae0e8c3 Implement `stop()`. 2018-12-28 14:49:02 +00:00
Nolan Darilek e24ed9a3a3 Add support for volume and pitch. 2018-12-15 15:56:13 +00:00
Nolan Darilek bac4b7555f Initial commit. 2018-12-14 19:35:49 +00:00