]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blobdiff - helpers/action.py
Fix channels and description with blank lines
[perso/Immae/Projets/Python/MusicSampler.git] / helpers / action.py
index a68de90e5f1348934804d08c2a194fac14133eb1..5afe43763c2f303ca8f6351ff14cf44e51287619 100644 (file)
@@ -28,9 +28,12 @@ class Action:
             return True
 
     def run(self):
-        print(getattr(self, self.action + "_print")(**self.arguments))
+        print(self.description())
         return getattr(self, self.action)(**self.arguments)
 
+    def description(self):
+        return getattr(self, self.action + "_print")(**self.arguments)
+
     def command(self, command = "", **kwargs):
         pass
 
@@ -43,24 +46,42 @@ class Action:
     def play(self, music = None, fade_in = 0, start_at = 0,
             restart_if_running = False, volume = 100, **kwargs):
         if music is not None:
-            music.play()
+            if restart_if_running:
+                if music.is_playing():
+                    music.stop()
+                music.play(volume = volume, fade_in = fade_in, start_at = start_at)
+            else:
+                if not music.is_playing():
+                    music.play(volume = volume, fade_in = fade_in, start_at = start_at)
         else:
             pygame.mixer.unpause()
 
     def stop(self, music = None, fade_out = 0, **kwargs):
         if music is not None:
-            music.stop()
+            music.stop(fade_out = fade_out)
         else:
-            pygame.mixer.stop()
+            if fade_out > 0:
+                pygame.fadeout(fade_out * 1000)
+            else:
+                pygame.mixer.stop()
 
     def stop_all_actions(self, **kwargs):
         self.key.mapping.stop_all_running()
 
     def volume(self, music = None, value = 100, **kwargs):
-        pass
+        if music is not None:
+            music.set_volume(value)
+        else:
+            pass
 
-    def wait(self, duration = 0, **kwargs):
-        time.sleep(duration)
+    def wait(self, duration = 0, music = None, **kwargs):
+        # FIXME: Make it stoppable
+        # http://stackoverflow.com/questions/29082268/python-time-sleep-vs-event-wait
+        if music is None:
+            time.sleep(duration)
+        else:
+            # TODO
+            music.wait_end()
 
     def command_print(self, command = "", **kwargs):
         return "running command {}".format(command)
@@ -104,10 +125,10 @@ class Action:
             else:
                 return "stopping all musics with {}s fadeout".format(fade_out)
 
-    def stop_all_actions_print(self):
+    def stop_all_actions_print(self, **kwargs):
         return "stopping all actions"
 
-    def volume_print(self, music = None, value = 100, *kwargs):
+    def volume_print(self, music = None, value = 100, **kwargs):
         if music is not None:
             return "setting volume of {} to {}%".format(music.filename, value)
         else: