Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
19 changes: 18 additions & 1 deletion qt/aqt/sound.py
Original file line number Diff line number Diff line change
Expand Up @@ -330,6 +330,9 @@ class SimpleProcessPlayer(Player):

args: list[str] = []
env: dict[str, str] | None = None
# some players (e.g. afplay) don't understand "--" as an
# options/filename separator
supports_arg_separator = True

def __init__(self, taskman: TaskManager, media_folder: str | None = None) -> None:
self._taskman = taskman
Expand All @@ -352,8 +355,9 @@ def stop(self) -> None:
# note: mplayer implementation overrides this
def _play(self, tag: AVTag) -> None:
assert isinstance(tag, SoundOrVideoTag)
separator = ["--"] if self.supports_arg_separator else []
self._process = subprocess.Popen(
self.args + ["--", tag.path(self._media_folder)],
self.args + separator + [tag.path(self._media_folder)],
env=self.env,
cwd=self._media_folder,
stdout=subprocess.DEVNULL,
Expand Down Expand Up @@ -437,6 +441,16 @@ class SimpleMplayerPlayer(SimpleProcessPlayer, SoundOrVideoPlayer):
args += ["-ao", "win32"]


class SimpleAfplayPlayer(SimpleProcessPlayer, SoundPlayer):
"Plays audio files with macOS's built-in afplay, bypassing mpv."

# outrank MpvManager (rank 0) so audio tags are routed here; video tags
# still fall through to mpv, since afplay only handles audio
default_rank = 1
args = ["/usr/bin/afplay"]
supports_arg_separator = False


# MPV
##########################################################################

Expand Down Expand Up @@ -958,6 +972,9 @@ def setup_audio(taskman: TaskManager, base_folder: str, media_folder: str) -> No
mplayer = SimpleMplayerSlaveModePlayer(taskman, media_folder)
av_player.players.append(mplayer)

if is_mac:
av_player.players.append(SimpleAfplayPlayer(taskman, media_folder))

# tts support
if is_mac:
from aqt.tts import MacTTSPlayer
Expand Down
Loading