from PyQt5.QtMultimedia import QMediaPlaylist, QMediaContent, QMediaPlayer from PyQt5.QtCore import Qt, QUrl import soundfile as sf from collections import deque import requests import json from config.config import Config SERVER_URL = Config.CLIENT_CONFIG["server_url"] INFERENCE_STR = Config.CLIENT_CONFIG["inference_path"] class Player: def __init__(self, parent): self.parent = parent self.player = QMediaPlayer() self.player.currentMediaChanged.connect(self.mediaChanged) self.player.durationChanged.connect(self.durationChanged) self.player.positionChanged.connect(self.positionChanged) self.playlist = QMediaPlaylist() self.playlist_data = [] self.sound_prev_idx = 0 def play(self, playlists, startRow=0, option=QMediaPlaylist.Sequential ): print(f'in player player.state = {self.player.state()}, {QMediaPlayer.PausedState}') if self.player.state() == QMediaPlayer.PausedState: self.player.play() else: self.createPlaylist(playlists, startRow, option) self.playlist.setCurrentIndex(startRow) self.player.play() def stop(self): self.player.stop() def createPlaylist(self, playlists, startRow=0, option=QMediaPlaylist.Sequential): self.playlist.clear() for path in playlists: url = QUrl.fromLocalFile(path) self.playlist.addMedia(QMediaContent(url)) self.player.setPlaylist(self.playlist) self.playlist.setPlaybackMode(option) def upateVolume(self, vol): self.player.setVolume(vol) def mediaChanged(self, e): self.sound_prev_idx = 0 self.parent.updateMediaChanged(self.playlist.currentIndex()) def durationChanged(self, msec): if msec>0: self.parent.updateDurationChanged(self.playlist.currentIndex(), msec) def positionChanged(self, msec): if msec>0: self.parent.updatePositionChanged(self.playlist.currentIndex(), msec)