import threading import pydub import pygame class MusicFile: def __init__(self, filename, lock): self.filename = filename self.channel = None self.raw_data = None self.sound = None self.loaded = False threading.Thread(target = self.load_sound, args = [lock]).start() def load_sound(self, lock): lock.acquire() print("Loading {}".format(self.filename)) self.raw_data = pydub.AudioSegment.from_file(self.filename).raw_data self.sound = pygame.mixer.Sound(self.raw_data) print("Loaded {}".format(self.filename)) self.loaded = True lock.release() def play(self): self.channel = self.sound.play() def pause(self): if self.channel is not None: self.channel.pause() def stop(self): self.channel = None self.sound.stop()