]> git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blame - music_sampler.py
documentation fr: new features
[perso/Immae/Projets/Python/MusicSampler.git] / music_sampler.py
CommitLineData
cc008de4
IB
1import helpers
2
3helpers.parse_args()
4
d8046b94
IB
5import kivy
6kivy.require("1.9.1")
4b2d79ca
IB
7from kivy.app import App
8from kivy.uix.floatlayout import FloatLayout
9from kivy.uix.relativelayout import RelativeLayout
10from kivy.properties import ListProperty, StringProperty
11from kivy.clock import Clock
12from kivy.core.window import Window
bb69f62e 13from kivy.lang import Builder
4b2d79ca
IB
14from helpers.key import Key
15from helpers.mapping import Mapping
bb69f62e 16
65ec4d2a
IB
17class KeyList(RelativeLayout):
18 keylist = ListProperty([])
19 first_key = StringProperty("")
20 second_key = StringProperty("")
21 third_key = StringProperty("")
22
23 def append(self, value):
98ff4305 24 self.keylist.insert(0, value)
65ec4d2a
IB
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
4b2d79ca
IB
34class 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():
20586193 48 if not music_file.is_in_use():
4b2d79ca 49 continue
98ff4305
IB
50
51 text = "{}/{}".format(
52 helpers.duration_to_min_sec(music_file.sound_position),
2e404903 53 helpers.duration_to_min_sec(music_file.sound_duration))
98ff4305 54
20586193 55 if music_file.is_loaded_paused():
98ff4305 56 self.playlist.append(["⏸", music_file.name, text, False])
4b2d79ca 57 else:
98ff4305 58 self.playlist.append(["⏵", music_file.name, text, True])
189bf90c 59
189bf90c 60
4b2d79ca
IB
61class ActionList(RelativeLayout):
62 action_title = StringProperty("")
63 action_list = ListProperty([])
189bf90c 64
b17aed6a 65 def update_list(self, key, action_descriptions):
4b2d79ca
IB
66 self.action_title = "actions linked to key {}:".format(key.key_sym)
67 self.action_list = []
189bf90c 68
b17aed6a
IB
69 for [action, status] in action_descriptions:
70 if status == "done":
4b2d79ca 71 icon = "✓"
b17aed6a 72 elif status == "current":
4b2d79ca
IB
73 icon = "✅"
74 else:
75 icon = " "
b17aed6a 76 self.action_list.append([icon, action])
189bf90c 77
4b2d79ca
IB
78class Screen(FloatLayout):
79 pass
189bf90c 80
4b2d79ca
IB
81class MusicSamplerApp(App):
82 def build(self):
83 Window.size = (913, 563)
9de92b6d 84
4b2d79ca 85 return Screen()
9de92b6d 86
4b2d79ca 87if __name__ == '__main__':
e4846541 88 Builder.load_file(helpers.path() + "/music_sampler.kv")
4b2d79ca 89 MusicSamplerApp().run()