]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blob - music_sampler.py
Add music-path option to the command line
[perso/Immae/Projets/Python/MusicSampler.git] / music_sampler.py
1 import helpers
2
3 helpers.parse_args()
4
5 import kivy
6 kivy.require("1.9.1")
7 from kivy.app import App
8 from kivy.uix.floatlayout import FloatLayout
9 from kivy.uix.relativelayout import RelativeLayout
10 from kivy.properties import ListProperty, StringProperty
11 from kivy.clock import Clock
12 from kivy.core.window import Window
13 from kivy.lang import Builder
14 from helpers.key import Key
15 from helpers.mapping import Mapping
16
17 class KeyList(RelativeLayout):
18 keylist = ListProperty([])
19 first_key = StringProperty("")
20 second_key = StringProperty("")
21 third_key = StringProperty("")
22
23 def append(self, value):
24 self.keylist.insert(0, value)
25
26 def on_keylist(self, instance, new_key_list):
27 if len(self.keylist) > 0:
28 self.first_key = self.keylist[0]
29 if len(self.keylist) > 1:
30 self.second_key = self.keylist[1]
31 if len(self.keylist) > 2:
32 self.third_key = self.keylist[2]
33
34 class PlayList(RelativeLayout):
35 playlist = ListProperty([])
36
37 def __init__(self, **kwargs):
38 super(PlayList, self).__init__(**kwargs)
39 Clock.schedule_interval(self.update_playlist, 0.5)
40
41 def update_playlist(self, dt):
42 if self.parent is None or 'Mapping' not in self.parent.ids:
43 return True
44
45 open_files = self.parent.ids['Mapping'].open_files
46 self.playlist = []
47 for music_file in open_files.values():
48 if not music_file.is_in_use():
49 continue
50
51 text = "{}/{}".format(
52 helpers.duration_to_min_sec(music_file.sound_position),
53 helpers.duration_to_min_sec(music_file.sound_duration))
54
55 if music_file.is_loaded_paused():
56 self.playlist.append(["⏸", music_file.name, text, False])
57 else:
58 self.playlist.append(["⏵", music_file.name, text, True])
59
60
61 class ActionList(RelativeLayout):
62 action_title = StringProperty("")
63 action_list = ListProperty([])
64
65 def update_list(self, key, action_descriptions):
66 self.action_title = "actions linked to key {}:".format(key.key_sym)
67 self.action_list = []
68
69 for [action, status] in action_descriptions:
70 if status == "done":
71 icon = "✓"
72 elif status == "current":
73 icon = "✅"
74 else:
75 icon = " "
76 self.action_list.append([icon, action])
77
78 class Screen(FloatLayout):
79 pass
80
81 class MusicSamplerApp(App):
82 def build(self):
83 Window.size = (913, 563)
84
85 return Screen()
86
87 if __name__ == '__main__':
88 Builder.load_file(helpers.path() + "/music_sampler.kv")
89 MusicSamplerApp().run()