Commit Graph

152 Commits (feature/concurrent-ci)

Author SHA1 Message Date
Åke Forslund d8ff26bbd9 Add plugin loading of audioservices
All modules registered under the entrypoint group "mycroft.plugin.audioservice"

These shall refer to a module with either an autodetect function or a
load_service function.
2020-09-23 07:46:13 +02:00
Åke Forslund 4e7809d732 Handle ntp sync in audioservice ready wait
Events (any python threading in general) don't use monotonic time and
can be affected by an ntp sync.

This replaces the normal event with the MonotonicEvent class handling jumps
into the future.
2020-09-10 13:26:25 +02:00
Åke Forslund d704981613 Set a more specific module name for audioservices
The basic name caused collisions between the "vlc" audioservice and the
vlc module. This prepends an "audioservice_" to the service folder name.
2020-08-28 07:59:06 +02:00
Åke Forslund ba8c41486c Load audioservices using importlib instead of imp
imp has been deprecated for quite some time
2020-08-21 08:00:08 +02:00
Åke Forslund 0a04efd88d Add system for checking audio service readiness
The new wait_for_loaded() method will wait until services has been
loaded. It has a 3 minute timeout (default)

This improves the audio service readiness indication to not trigger
until the services are loaded.
2020-07-24 22:12:54 +02:00
Åke Forslund 236a2ed594 Add hook for stopping 2020-07-22 11:06:47 +02:00
Åke Forslund 09b1deb511 Add possibility for notification hooks for services
- skills
- audio
- speech client
- messagebus service
- enclosure

The main functions now accepts the arguments ready_hook and error_hook
allowing a service or runner script to catch these states and perform
actions accordingly.

This is useful for things like systemd or a desktop launcher.

Fix audio service startup
2020-07-22 10:52:27 +02:00
Åke Forslund 2bb978362f Use bus.wait_for_message() method to wait for speak 2020-07-05 16:38:52 +02:00
Kris Gesling bf6e6af3e3 remove messagebus argument 2020-06-29 21:38:12 +09:30
Kris Gesling e39fe64ba4 minor cleanup for PR review 2020-06-29 14:30:39 +09:30
Kris Gesling c4478e82ad ensure volume restored after mic recording 2020-06-25 16:17:54 +09:30
Kris Gesling 4345011f7f prevent audio playing between mic record and handling 2020-06-19 15:27:48 +09:30
Åke Forslund b581766a00 Fallback to mimic for bad http status codes
Added a RemoteTTSException exception for non-timeout exceptions, Mimic2
will consider HTTP status code 200-299 as OK while other responses will
trigger raise RemoteTTSException.
2020-02-17 15:08:21 +01:00
jarbasal 0de7f11c6e execute TTS from debug_cli 2020-02-15 15:35:43 +01:00
Jarbas-Core d16964c580 bus message targetting 2020-02-15 12:37:25 +01:00
Åke Forslund 97ff8a4708 Send mycroft.audio.queue_end
The message is sent when there are no more tracks in the queue and
playback has stopped.
2020-01-15 11:13:00 +01:00
Åke Forslund 1b88ebe508 Fix tracks with mime data for VLC backend 2020-01-15 09:06:50 +01:00
Åke Forslund efb9cd1a01 Pass listen flag to fallback tts 2020-01-15 09:06:50 +01:00
Åke Forslund e74b0e3900 Add audioservice method tests
This includes init, shutdown, play, stop, next, previous, pause,
seek_backward, seek_forward, queue lower_volume, restore_volume and resume.
2020-01-15 09:06:50 +01:00
Åke Forslund 9a36639ec7 Clean up mycroft/audio/__init__.py 2020-01-15 09:06:50 +01:00
Åke Forslund 5e90465267 Improve guessing if http fetch fails.
If the server doesn't support getting the http head for the feed a 501
may be generated the guess_mime function will in turn fail if the url
ends with "?arg=x" or similar. This does an extra parsing step trying to
remove such arguments.
2019-11-19 16:34:13 +01:00
Åke Forslund f44165d35d Add exception handler if mime fails 2019-11-19 05:36:16 +01:00
Åke Forslund 6597ccc398 Send listen flag for special picroft case as well 2019-10-18 17:16:55 +02:00
Åke Forslund 29db163a78 Move listen trigger to last chunk of sentence
If rendering a chunk of a sentence takes too long time, the audio queue
may run out and trigger the listening.

This moves the listening trigger to after the last chunk.
2019-10-04 15:09:45 +02:00
Åke Forslund b480dda90f Clean up docstrings
Minor cleanup of docstrings in the files affected by the previous commit
2019-10-03 19:13:02 +02:00
Åke Forslund 46b0b94631 Don't go through FS when triggering listener.
This adds a separate handler for triggering listening on the
"mycroft.mic.listen" message
2019-10-03 19:12:56 +02:00
Åke Forslund 3fea4b1e6f Remove old manual pulse ducking 2019-08-31 14:27:06 +02:00
Chris Veilleux 0bde1bc9df Refactor skill service (#2220)
Major refactoring of the skills startup sequence
- Restructure to a less nested structure
- Remove usage of globals by wrapping a lot of state variables into a class this allows for things like caching a negative pairing status throughout the startup process
2019-07-26 08:53:27 +02:00
David Wagner ed6324d83b
tts_hash to an actual hash
tts_hash was initially set to the text of the config rather than hash so always loaded twice on boot (~750ms for create() for Mimic2)
2019-07-23 15:31:21 -05:00
Chris Veilleux d8f3095d40 Rename the message bus client and abstract config loading
Message bus config loading is now shared by service and client.

messagebus.client.ws file is still available in case skills are using it. It is a backport that inherits from the new MessageBusClient class. Adds depreciation warning.
2019-07-19 08:16:54 +02:00
Åke 0a67544ea4
Merge pull request #2168 from forslund/feature/update-pychromecast
Update pychromecast to 3.2.2
2019-06-26 10:34:55 +02:00
Åke Forslund 62b115e22c Update pychromecast to 3.2.2
pychromecast needed to be updated to fix pip package version conflict
when using streaming google STT.

Minor issues with startup of audio needed to be handled, mainly adding
explicit waits to ensure commands would be accepted
2019-06-20 08:59:27 +02:00
Åke Forslund 5211e51ec0 Remove requirement for seek_methods 2019-06-14 13:42:34 +02:00
Åke Forslund 39c844a257 Update old style metaclasses
the old "__metaclass__" has been ignored since the switch to python 3
this restores the metaclass functionality by updating it to the new
class kwarg syntax
2019-06-14 12:56:48 +02:00
Steve Penrod d80081d6b6 Remove unused subprocess module 2019-06-10 22:43:39 -05:00
Ruthvicp d2514b01be Remove additional space after initials 2019-05-16 17:27:51 -05:00
Åke Forslund 1400af2b16 Fix pycodestyle errors 2019-05-15 13:46:43 +02:00
Matthew D. Scholefield 8c09f88e53
Merge pull request #2088 from forslund/feature/audioservice-list
Feature/audioservice list
2019-04-19 00:30:38 -05:00
Steve Penrod dd976b6042 Fix bug with paused audio
The simple audio service can be paused.  The audio is "paused" but placing the
audio playback mechanism (usually aplay or mpg123) into the background, kinda
like hitting Ctrl+Z.  While in the background that process can no longer react
to the SIGTERM signal.  So paused audio has to be brought to the foreground
using SIGCONT, and _then_ sent SIGTERM.

Also added a belt to go with these suspenders and perform a process.kill() if
the audio process doesn't go away after 1 second.
2019-04-09 01:49:54 -05:00
Åke Forslund 9248be1691 Add list of available backends to audioservice
The message returned is a dict of all available audio backends as keys
containing 'supported_uris' listing supported uri types (file:// http://
etc.), 'remote' (bool) True if remote), 'default' (bool) true if the
default audio backend.
2019-04-08 15:28:56 +02:00
Åke Forslund 0d401c8757 Remove superfluous mycroft.stop handler removal 2019-04-08 15:13:34 +02:00
Åke Forslund 6186afd25f Remove the mimic_fallback_obj at shutdown 2019-03-28 11:15:45 +01:00
Ruthvicp ba305c5bfc separate the cache & avoid voice overlap
- The cache is now stored in a TTS specific directory
- Only a single fallback-tts is created
2019-03-28 10:40:02 +01:00
Åke 327511c937 Fix simple audio backend pausing by voice (#2045)
The restore_volume would previously unpause the service even if the user just asked for pausing playback.

This separates the paused flag from the pausing/resuming action so lowering/restoring volume doesn't affect the logical pausing state and can check it to determine if lowering/restoring is needed/wanted.
2019-03-08 02:24:58 -06:00
Steve Penrod dd25b76be6 Add pause/resume to simple audio services
This adds a very simple mechanism for pausing and resuming audio streams
that are actively playing.  The process is suspended and resumed when
requested.

This also uses that same method to implement lower_volume()/restore_volume() for simple "ducking" of audio.
2019-03-07 17:40:59 -06:00
Ruthvicp d3015ca7e8 Pause at semicolon (#1989)
Split at semicolon and speak each chunk of data, similar to a period.
2019-02-15 02:54:42 -06:00
Åke 8ff2ccc4fa
Merge pull request #1963 from forslund/feature/audioservice-prefer-local
Play on local audiobackends before trying remotes
2019-01-31 09:09:32 +01:00
Steve Penrod 01ea0afdeb
Minor edit of comments 2019-01-31 01:46:35 -06:00
Åke 0ae66c3f93 Bugfix/speech stop (#1961)
* Refactor mimic2 to use the shared tts architecture

* Make sure the queue is cleared

- Add a convenience method grouping clear_queue and clear_visemes
- The start time is now set before the lock to allow multiple speech requests queued before the stop signal to also be cancelled
- Make sure the any pending TTS generation is cleared from the queue by calling tts.clear() when breaking from the chunking loop.
2019-01-31 01:30:53 -06:00
Åke Forslund 5c26a5d9a5 Play on local audiobackends before trying remotes
- Adds RemoteAudioBackend class, which is used to differentiate between
Remotes and local audio backends
- When searching for audio backends the backends are storted to first
check local ones and secondly remote ones
2019-01-21 16:10:24 +01:00