]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blobdiff - helpers/music_file.py
Add loop option for play
[perso/Immae/Projets/Python/MusicSampler.git] / helpers / music_file.py
index 32869b6891aed831a8b2768016aedf3a83a7fe45..0bfb1eca8e2d29b1b84c3ef7ae693ff8d05826ef 100644 (file)
@@ -78,19 +78,21 @@ class MusicFile(Machine):
         else:
             return 0
 
-    def play(self, fade_in = 0, volume = 100, start_at = 0):
+    def play(self, fade_in = 0, volume = 100, loop = 0, start_at = 0):
         db_gain = gain(volume) + self.mapping.master_gain
         self.volume = volume
+        self.loop = loop
 
         ms = int(start_at * 1000)
         ms_fi = max(1, int(fade_in * 1000))
         with self.music_lock:
             self.current_audio_segment = (self.audio_segment + db_gain).fade(from_gain=-120, duration=ms_fi, start=ms)
-        self.before_loaded_playing(initial_frame = int(start_at * self.audio_segment.frame_rate))
+        self.initial_frame = int(start_at * self.audio_segment.frame_rate)
+        self.before_loaded_playing()
         self.start_playing()
 
-    def before_loaded_playing(self, initial_frame = 0):
-        self.current_frame = initial_frame
+    def before_loaded_playing(self):
+        self.current_frame = self.initial_frame
         with self.music_lock:
             segment = self.current_audio_segment
 
@@ -125,7 +127,11 @@ class MusicFile(Machine):
                                 )
             self.current_frame += frame_count
             if len(audio_segment) == 0:
-                raise sd.CallbackStop
+                if self.is_loaded_playing() and self.loop != 0:
+                    self.loop -= 1
+                    self.current_frame = self.initial_frame
+                else:
+                    raise sd.CallbackStop
 
             out_data[:] = audio_segment.ljust(len(out_data), b'\0')