From 8d24eb399763da6c01284bcaccc2321cb3ee5773 Mon Sep 17 00:00:00 2001 From: tsi-billypom Date: Fri, 11 Apr 2025 16:35:53 -0400 Subject: [PATCH] auto --- components/PMediaPlayer.py | 104 ------------------------------------- components/__init__.py | 1 - main.py | 5 +- 3 files changed, 2 insertions(+), 108 deletions(-) delete mode 100644 components/PMediaPlayer.py diff --git a/components/PMediaPlayer.py b/components/PMediaPlayer.py deleted file mode 100644 index 166cd77..0000000 --- a/components/PMediaPlayer.py +++ /dev/null @@ -1,104 +0,0 @@ -import gi -import os -from gi.repository import Gst, GObject - -gi.require_version("Gst", "1.0") - -Gst.init(None) - - -class PMediaPlayer: - def __init__(self): - self.pipeline = Gst.ElementFactory.make("playbin", "player") - self.uri = None - self.rate = 1.0 - - # Set initial audio filter - self.pipeline.set_property("audio-filter", self._build_pitch_filter(self.rate)) - - def setSource(self, file_path: str): - if not os.path.isfile(file_path): - raise FileNotFoundError(f"File not found: {file_path}") - self.uri = Gst.filename_to_uri(file_path) - self.pipeline.set_property("uri", self.uri) - - def play(self): - if not self.uri: - raise RuntimeError("No media source set.") - self.pipeline.set_state(Gst.State.PLAYING) - - def pause(self): - self.pipeline.set_state(Gst.State.PAUSED) - - def stop(self): - self.pipeline.set_state(Gst.State.NULL) - - def setPlaybackRate(self, rate: float): - if rate <= 0: - raise ValueError("Playback rate must be greater than 0.") - - self.rate = rate - # Fully rebuild the pitch filter with new rate - self.pipeline.set_state(Gst.State.NULL) - self.pipeline.set_property("audio-filter", self._build_pitch_filter(rate)) - if self.uri: - self.pipeline.set_property("uri", self.uri) - self.pipeline.set_state(Gst.State.PLAYING) - - def _build_pitch_filter(self, rate: float): - pitch = Gst.ElementFactory.make("pitch", "pitch") - # pitch.set_property("pitch", 1.0) # Keep pitch constant - pitch.set_property("rate", rate) - - bin = Gst.Bin.new("filter_bin") - conv = Gst.ElementFactory.make("audioconvert", "conv") - resample = Gst.ElementFactory.make("audioresample", "resample") - - bin.add(conv) - bin.add(resample) - bin.add(pitch) - conv.link(resample) - resample.link(pitch) - - # Ghost pads - sink_pad = conv.get_static_pad("sink") - src_pad = pitch.get_static_pad("src") - bin.add_pad(Gst.GhostPad.new("sink", sink_pad)) - bin.add_pad(Gst.GhostPad.new("src", src_pad)) - - return bin - - def cleanup(self): - self.pipeline.set_state(Gst.State.NULL) - - -# Example usage: -if __name__ == "__main__": - import time - - GObject.threads_init() - player = PMediaPlayer() - - try: - player.setSource("/path/to/your/audio/file.mp3") - player.play() - time.sleep(2) - - print("Speeding up to 1.5x...") - player.setPlaybackRate(1.5) - time.sleep(5) - - print("Slowing down to 0.75x...") - player.setPlaybackRate(0.75) - time.sleep(5) - - print("Pausing...") - player.pause() - time.sleep(2) - - print("Resuming...") - player.play() - time.sleep(5) - - finally: - player.cleanup() diff --git a/components/__init__.py b/components/__init__.py index b8dc6b5..57ba057 100644 --- a/components/__init__.py +++ b/components/__init__.py @@ -9,4 +9,3 @@ from .AddToPlaylistWindow import AddToPlaylistWindow from .CreatePlaylistWindow import CreatePlaylistWindow from .PlaylistsPane import PlaylistsPane from .ExportPlaylistWindow import ExportPlaylistWindow -from .PMediaPlayer import PMediaPlayer diff --git a/main.py b/main.py index 1598648..91b6273 100644 --- a/main.py +++ b/main.py @@ -50,7 +50,6 @@ from components import ( AudioVisualizer, CreatePlaylistWindow, ExportPlaylistWindow, - PMediaPlayer, ) from utils.get_album_art import get_album_art @@ -172,8 +171,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): # widget bits self.album_art_scene: QGraphicsScene = QGraphicsScene() - # self.player: QMediaPlayer = QMediaPlayer() # Audio player object - self.player: PMediaPlayer = PMediaPlayer() + self.player: QMediaPlayer = QMediaPlayer() # Audio player object self.probe: QAudioProbe = QAudioProbe() # Gets audio buffer data self.audio_visualizer: AudioVisualizer = AudioVisualizer( self.player, self.probe, self.PlotWidget @@ -405,6 +403,7 @@ class ApplicationWindow(QMainWindow, Ui_MainWindow): content = QMediaContent(url) # set the player to play the content self.player.setMedia(content) + # self.player.setMedia(QUrl("gst-pipeline: videotestsrc ! autovideosink")) self.player.play() # play self.move_slider() # mover # self.player.setPlaybackRate(1.5)