Commit Graph

327 Commits

Author SHA1 Message Date
Nolan Darilek dc1c00f446 Good news: `NSSpeechSynthesizer` speech now queues. Bad news: my brain bleeds. 2020-08-12 15:14:17 -05:00
Nolan Darilek 7eccb9f573 Clean up `println!` and comparison calls. 2020-08-12 09:54:25 -05:00
Nolan Darilek 427ca027be Add `Drop` implementation. 2020-08-12 09:52:16 -05:00
Nolan Darilek 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
Nolan Darilek faadc0e3b7 Still doesn't work, but at least it doesn't segfault now. 2020-08-11 14:44:52 -05:00
Nolan Darilek 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
Nolan Darilek 73786534dc Bump version. 2020-07-07 09:09:18 -05:00
Nolan Darilek e1bb6741a9 Correctly indicate that WinRT supports detection of speaking. 2020-07-07 09:08:44 -05:00
Nolan Darilek 742daf332b Ensure wasm32-unknown-unknown target builds when releasing as well. 2020-07-06 13:35:17 -05:00
Nolan Darilek 770bdd3842 Add necessary target. 2020-07-06 13:13:17 -05:00
Nolan Darilek 61edbce301 Make sure we can build wasm32-unknown-unknown target. 2020-07-06 13:00:17 -05:00
Nolan Darilek 7ae3faac63 Bump version. 2020-07-06 12:52:39 -05:00
Nolan Darilek 16a6f6378a Under WinRT, recreate player completely when interruption is requested. 2020-07-06 12:52:18 -05:00
Nolan Darilek 1d7c668a4a Sanity-check value to prevent overflow. 2020-07-06 12:14:50 -05:00
Nolan Darilek eb936a4ae0 Bump version. 2020-06-17 19:00:57 -05:00
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 a6146a7f3e Install LLVM. 2020-06-17 18:01:09 -05:00
Nolan Darilek c2e3a41b2b Publish winrt_bindings from a Windows build server. 2020-06-17 18:00:14 -05:00
Nolan Darilek 251128f917 Don't verify on publish since this crate requires Windows. 2020-06-17 17:55:35 -05:00
Nolan Darilek 027dcd1b7c Set license. 2020-06-17 17:54:23 -05:00
Nolan Darilek f642d86f73 Tweak workflow to publish winrt_bindings package first. 2020-06-17 17:27:28 -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 8fe6a209ae Rename crate since I can't publish with a path dependency. 2020-06-17 17:25:01 -05:00
Nolan Darilek 439bd53f13 Bump version. 2020-06-17 16:49:09 -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 843bf876c1 Remove GitLab CI configuration. 2020-06-17 12:25:40 -05:00
Nolan Darilek 6d88533715 Bump version. 2020-06-14 20:03:34 -05:00
Nolan Darilek 10a9d56ae5 Remove autoplay setting. 2020-06-14 20:03:11 -05:00
Nolan Darilek 69c5581799 Bump version. 2020-06-14 19:43:08 -05:00
Nolan Darilek 933e850919 Ensure that `MediaPlayer` for speech is playing. 2020-06-14 19:42:48 -05:00
Nolan Darilek 2f19d663dc Bump version. 2020-06-14 18:56:40 -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 2750ce4f99 Bump version. 2020-06-11 13:04:05 -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 e0863c7b6a env_logger is once again a dev-dependency. 2020-06-11 13:00:10 -05:00
Nolan Darilek 1867b2ea87 Bump version. 2020-06-09 11:10:50 -05:00
Nolan Darilek e81849db55 Add action to build release. 2020-06-09 11:10:12 -05:00
Nolan Darilek 365065fc75 README updates.
* Indicate extent of Windows support.
* Fix Markdown lint errors.
2020-06-09 11:03:58 -05:00
Nolan Darilek c82ea5f3b3 WinRT fixes.
* Use released `winrt` crate.
* Implement `is_speaking`.
2020-06-09 11:00:37 -05:00
Nolan Darilek b691124d3f Remove `--verbose` flag. 2020-06-09 10:59:41 -05:00
Nolan Darilek 964670f8c6 Reformat. 2020-06-09 10:55:38 -05:00
Nolan Darilek d0d6c0e2da Update repository link. 2020-06-09 07:56:13 -05:00
Nolan Darilek 87ae25b522 Add test action to ensure functionality on Linux and Windows. 2020-06-09 07:53:46 -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 026bcd0a0d Make sure we can build WASM target as well. 2020-05-29 08:39:27 -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 5fbc0fd8f0 Make env_logger an actual dependency and bump the version. 2020-05-07 19:33:24 -05:00