]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blobdiff - helpers/music_file.py
Put time duration in playlist
[perso/Immae/Projets/Python/MusicSampler.git] / helpers / music_file.py
index 892519d2e843be9423b98399aad37de6ce7060f4..9acdedf45026b014e39390aac7ef37a83734aa8d 100644 (file)
@@ -2,6 +2,7 @@ import threading
 import pydub
 import pygame
 import math
+import time
 
 class MusicFile:
     def __init__(self, filename, lock, channel_id, name = None, gain = 1):
@@ -32,6 +33,15 @@ class MusicFile:
     def is_paused(self):
         return self.flag_paused
 
+    @property
+    def sound_position(self):
+        if self.is_playing() and not self.is_paused():
+            return min(time.time() - self.started_at, self.sound_duration)
+        elif self.is_playing() and self.is_paused():
+            return min(self.paused_at - self.started_at, self.sound_duration)
+        else:
+            return 0
+
     def play(self, fade_in = 0, volume = 100, start_at = 0):
         self.channel().set_endevent()
         self.channel().set_endevent(pygame.USEREVENT)
@@ -45,14 +55,17 @@ class MusicFile:
         else:
             sound = pygame.mixer.Sound(self.raw_data)
 
+        self.started_at = time.time()
         self.channel().play(sound, fade_ms = int(fade_in * 1000))
         self.flag_paused = False
 
     def pause(self):
+        self.paused_at = time.time()
         self.channel().pause()
         self.flag_paused = True
 
     def unpause(self):
+        self.started_at += (time.time() - self.paused_at)
         self.channel().unpause()
         self.flag_paused = False