Commit graph

49 commits

Author SHA1 Message Date
Damien Elmes
c5fa0b130e reduce the chances of a race condition in mplayer code
Not perfect, it may still happen.

https://anki.tenderapp.com/discussions/ankidesktop/39832-an-error-occurred-audio
2020-03-23 19:15:32 +10:00
Damien Elmes
9c8e8c2216 fix audio getting stuck (2/2) 2020-03-15 09:34:04 +10:00
Damien Elmes
8cd64bad6a fix audio getting stuck (1/2)
The problem was caused by stop() doing a spin loop on the main
thread waiting for the completion signal. This prevented Qt's run
loop from executing, and so the completion signal was never delivered,
meaning longer files would time out.

Fixed by reworking the code so that stop() does not block at all -
instead it just sets the termination flag, and AVPlayer does not
unset current_player. Then when the completion callback fires, it
can advance to the next file.

TTS code still needs updating, and the lock should be safe to remove
as the start/stop logic is all on the main thread.
2020-03-15 09:26:31 +10:00
Damien Elmes
863e5f5e51 make sure audio queue is cleared when transitioning between cards
https://anki.tenderapp.com/discussions/beta-testing/1846-anki-2122-beta#comment_48150139
2020-03-14 20:04:40 +10:00
Damien Elmes
61e8a0ed3c possible fix for invalid handle issue
https://anki.tenderapp.com/discussions/ankidesktop/39346-cant-add-audio-on-flash-drive
2020-03-14 18:53:43 +10:00
Alan Du
9c4e616191 Monkeytype qt/aqt/sound.py 2020-03-01 10:16:08 -05:00
Damien Elmes
e52ceaed9b restore mpv/mplayer missing warning that got lost in the av changes
and ensure the UI doesn't get temporarily stuck after the command fails
2020-02-29 21:20:08 +10:00
Damien Elmes
5ca00fc92d interrupt current audio when autoplay off 2020-02-25 17:49:06 +10:00
Damien Elmes
999aa74eb2 ensure Anki starts on Windows systems that don't have TTS installed 2020-02-25 16:25:17 +10:00
Damien Elmes
bda7e0e0a4 possible fix for race conditions in the sound code
https://anki.tenderapp.com/discussions/ankidesktop/39030-erro-ao-adicionar-arquivo-de-udio

the lock should at least ensure _process doesn't disappear in the
middle of our logic, and the longer wait should reduce the chances
of .stop() timing out and allowing multiple audio files to play

Not very happy with the current approach, as in the timeout case
you have multiple threads competing to access the same data
2020-02-21 15:14:09 +10:00
Damien Elmes
4f6d18ee19 drop the extraneous svg group 2020-01-31 07:23:35 +10:00
Damien Elmes
42f09fe933 add compat soundLink selector back 2020-01-31 07:01:22 +10:00
Damien Elmes
bbd134fcc6 use SVG for the play icon, and reduce the default size to 40px 2020-01-28 10:11:29 +10:00
Damien Elmes
2d4d89d5a5 fix autoplaying of audio in preview screen, and drop extend_and_play() 2020-01-25 16:02:34 +10:00
Damien Elmes
6bbab6e9f9 move strip_av_refs() into anki.sound 2020-01-24 15:48:40 +10:00
Damien Elmes
46c6a7f7e4 extract and flag AV tags as part of the render process
We can now show replay buttons for the audio contained in {{FrontSide}}
without having to play it again when the answer is shown.

The template code now always defers FrontSide rendering, as it wasn't
a big saving, and meant the logic had to be implemented twice.
2020-01-24 11:06:11 +10:00
Damien Elmes
f80bcf15ca fix mpv failing to load 2020-01-24 07:06:59 +10:00
Damien Elmes
78a8229577 don't wait as long for player to stop 2020-01-23 17:27:07 +10:00
Damien Elmes
6e984b3cc3 fix audio displaying console window on Windows 2020-01-23 17:27:07 +10:00
Damien Elmes
214871c7a4 make pylint happy 2020-01-22 15:37:58 +10:00
Damien Elmes
712779886a add a hook for when playback begins 2020-01-22 14:41:32 +10:00
Damien Elmes
42c04817c7 make .command() behave the same way for mplayer and mpv 2020-01-22 14:11:25 +10:00
Damien Elmes
bfc0ac1c0f simplify taskman, and add .run_on_main() 2020-01-22 14:09:51 +10:00
Damien Elmes
837ac57ab2 add option in prefs to hide replay audio buttons 2020-01-21 21:00:17 +10:00
Damien Elmes
52a41d9a8e formatting fixes 2020-01-21 20:39:25 +10:00
Damien Elmes
0df9837a66 fix mpv args
https://anki.tenderapp.com/discussions/ankidesktop/38186-mpvprocesserror-unable-to-start-process
2020-01-21 19:29:50 +10:00
Damien Elmes
e326236f7c compare only on rank, as voices may be subclassed 2020-01-21 18:33:14 +10:00
Damien Elmes
8ddb49eb76 add Windows TTS support 2020-01-21 17:34:47 +10:00
Damien Elmes
171764e3e0 add replay buttons to reviewing screen 2020-01-21 14:47:03 +10:00
Damien Elmes
6d1d806b3a make sure we don't mutate list passed to play_from_tags() 2020-01-21 14:43:33 +10:00
Damien Elmes
9dc9151963 add file-based TTS say implementation as well 2020-01-21 13:21:43 +10:00
Damien Elmes
b0d2958721 add rank handling to TTS; parse TTS args in get_av_tags() 2020-01-21 12:41:37 +10:00
Damien Elmes
a85ad8b257 more TTS and sound work
- use provided language and voices when playing on Mac
- fix hang in waiting for termination
- allow players to return a rank for a given tag,
which will allow for the best matching player to be chosen
depending on the context (eg, prioritize one player for videos,
one tts player for certain voices, etc)
2020-01-21 11:34:25 +10:00
Damien Elmes
222ecc35ce spawn a new slave mode mplayer for each file
This solves a few problems:

- We no longer need to write temporary files to disk, as files
passed on the command line with non-Latin text can be read by mplayer.
- We no longer need to deal with mplayer processes left around in
the background that have failed to terminate.
- We don't need to deal with the added complexity that comes with
polling mplayer's status output to determine when the file has finished
playing.

Also add seek_relative(), toggle_pause() and shutdown() as optional
methods on AVPlayer.
2020-01-21 08:55:15 +10:00
Damien Elmes
8b1d029eb9 support interrupting say; fix race in simple player 2020-01-21 07:28:19 +10:00
Damien Elmes
f9ca9501ac pass task manager in instead of creating a new one 2020-01-21 06:49:09 +10:00
Damien Elmes
41272674d8 add .stop() to mpv 2020-01-21 06:45:32 +10:00
Damien Elmes
7bf4c9f08f get mpv slave mode working with new API
Also move the mpv-specific hooks into AVPlayer
2020-01-20 22:01:38 +10:00
Damien Elmes
8a09d1365e minor tidyup to sound.py 2020-01-20 21:03:22 +10:00
Damien Elmes
3a427ba5b1 don't need allSounds/stripSounds in qt's sound.py 2020-01-20 20:13:01 +10:00
Damien Elmes
4d3858023b add a proof of concept TTS implementation on Mac 2020-01-20 20:08:19 +10:00
Damien Elmes
b5758c2cff rework the audio player API and add a simpler player implementation
- the new API operates on AVTags so it can support TTS as well as
audio files
- added a simple "run for each file" implementation for mpv and mplayer.
- will need to test handling of unicode filenames on Windows
- the old mpv and mplayer code is currently not active
2020-01-20 20:07:11 +10:00
Damien Elmes
71fe9a015a we can depend on pyaudio being available now that the code is in qt/ 2020-01-20 19:21:24 +10:00
Damien Elmes
8bad40152d remove _hook/_filter suffix 2020-01-15 16:53:24 +10:00
Damien Elmes
32edb4522d migrate addHook/remHook calls 2020-01-15 13:49:26 +10:00
Damien Elmes
aa0300af90 migrate most of the remaining runHook() calls 2020-01-15 12:46:53 +10:00
Damien Elmes
7352e0f43b switch to classes for hooks
This allows us to add a docstring to .append() so users can see
the names of the arguments that are being passed, and means we
don't have to remember to prepend run_ when calling a hook.
2020-01-14 08:54:07 +10:00
Damien Elmes
aa8b1645a7 add separate file for gui hooks 2020-01-13 14:38:05 +10:00
Damien Elmes
2a00e0a6b0 tweaking the folder names again
hopefully that's the last of it
2020-01-03 07:48:38 +10:00
Renamed from anki-qt/aqt/sound.py (Browse further)