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