Skip to content

Instantly share code, notes, and snippets.

@kelciour
Last active September 30, 2020 23:09
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save kelciour/0a10d7bdeda91a805545fccd623f18d1 to your computer and use it in GitHub Desktop.
Save kelciour/0a10d7bdeda91a805545fccd623f18d1 to your computer and use it in GitHub Desktop.
Separate player for videos
diff --git a/qt/aqt/sound.py b/qt/aqt/sound.py
index 08f5c206..24d6e4a3 100644
--- a/qt/aqt/sound.py
+++ b/qt/aqt/sound.py
@@ -71,6 +71,23 @@ class Player(ABC):
"Do any cleanup required at program termination. Optional."
+AUDIO_EXTENSIONS = {
+ "wav",
+ "mp3",
+ "ogg",
+ "flac",
+ "m4a",
+ "3gp",
+ "spx",
+ "oga",
+}
+
+
+def is_audio_file(fname: str) -> bool:
+ ext = fname.split(".")[-1].lower()
+ return ext in AUDIO_EXTENSIONS
+
+
class SoundOrVideoPlayer(Player): # pylint: disable=abstract-method
default_rank = 0
@@ -81,6 +98,26 @@ class SoundOrVideoPlayer(Player): # pylint: disable=abstract-method
return None
+class SoundPlayer(Player): # pylint: disable=abstract-method
+ default_rank = 0
+
+ def rank_for_tag(self, tag: AVTag) -> Optional[int]:
+ if isinstance(tag, SoundOrVideoTag) and is_audio_file(tag.filename):
+ return self.default_rank
+ else:
+ return None
+
+
+class VideoPlayer(Player): # pylint: disable=abstract-method
+ default_rank = 0
+
+ def rank_for_tag(self, tag: AVTag) -> Optional[int]:
+ if isinstance(tag, SoundOrVideoTag) and not is_audio_file(tag.filename):
+ return self.default_rank
+ else:
+ return None
+
+
# Main playing interface
##########################################################################
@@ -247,7 +284,6 @@ class SimpleProcessPlayer(Player): # pylint: disable=abstract-method
self._process = subprocess.Popen(
self.args + [tag.filename],
env=self.env,
- startupinfo=startup_info(),
stdout=subprocess.DEVNULL,
stderr=subprocess.DEVNULL,
)
@@ -290,7 +326,9 @@ class SimpleProcessPlayer(Player): # pylint: disable=abstract-method
cb()
-class SimpleMpvPlayer(SimpleProcessPlayer, SoundOrVideoPlayer):
+class SimpleMpvPlayer(SimpleProcessPlayer, VideoPlayer):
+ default_rank = 1
+
args, env = _packagedCmd(
[
"mpv",
@@ -300,14 +338,13 @@ class SimpleMpvPlayer(SimpleProcessPlayer, SoundOrVideoPlayer):
"--audio-display=no",
"--keep-open=no",
"--input-media-keys=no",
- "--no-config",
+ "--autoload-files=no",
]
)
def __init__(self, taskman: TaskManager, base_folder: str) -> None:
super().__init__(taskman)
- conf_path = os.path.join(base_folder, "mpv.conf")
- self.args += ["--include=" + conf_path]
+ self.args += ["--config-dir=" + base_folder]
class SimpleMplayerPlayer(SimpleProcessPlayer, SoundOrVideoPlayer):
@@ -657,6 +694,10 @@ def setup_audio(taskman: TaskManager, base_folder: str) -> None:
if mpvManager is not None:
av_player.players.append(mpvManager)
+
+ if isWin:
+ mpvPlayer = SimpleMpvPlayer(taskman, base_folder)
+ av_player.players.append(mpvPlayer)
else:
mplayer = SimpleMplayerSlaveModePlayer(taskman)
av_player.players.append(mplayer)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment