]>
git.immae.eu Git - perso/Immae/Projets/Python/MusicSampler.git/blob - music_sampler.py
7bd7513d738e8c33c33d3a5e6bd9aaed8172bd76
3 from kivy
.app
import App
4 from kivy
.uix
.floatlayout
import FloatLayout
5 from kivy
.uix
.relativelayout
import RelativeLayout
6 from kivy
.properties
import ListProperty
, StringProperty
7 from kivy
.clock
import Clock
8 from kivy
.core
.window
import Window
9 from kivy
.lang
import Builder
10 from helpers
.key
import Key
11 from helpers
.mapping
import Mapping
14 class KeyList(RelativeLayout
):
15 keylist
= ListProperty([])
16 first_key
= StringProperty("")
17 second_key
= StringProperty("")
18 third_key
= StringProperty("")
20 def append(self
, value
):
21 self
.keylist
.insert(0, value
)
23 def on_keylist(self
, instance
, new_key_list
):
24 if len(self
.keylist
) > 0:
25 self
.first_key
= self
.keylist
[0]
26 if len(self
.keylist
) > 1:
27 self
.second_key
= self
.keylist
[1]
28 if len(self
.keylist
) > 2:
29 self
.third_key
= self
.keylist
[2]
31 class PlayList(RelativeLayout
):
32 playlist
= ListProperty([])
34 def __init__(self
, **kwargs
):
35 super(PlayList
, self
).__init
__(**kwargs
)
36 Clock
.schedule_interval(self
.update_playlist
, 0.5)
38 def update_playlist(self
, dt
):
39 if self
.parent
is None or 'Mapping' not in self
.parent
.ids
:
42 open_files
= self
.parent
.ids
['Mapping'].open_files
44 for music_file
in open_files
.values():
45 if not music_file
.is_playing():
48 text
= "{}/{}".format(
49 helpers
.duration_to_min_sec(music_file
.sound_position
),
50 helpers
.duration_to_min_sec(music_file
.sound_duration
)
53 if music_file
.is_paused():
54 self
.playlist
.append(["⏸", music_file
.name
, text
, False])
56 self
.playlist
.append(["⏵", music_file
.name
, text
, True])
59 class ActionList(RelativeLayout
):
60 action_title
= StringProperty("")
61 action_list
= ListProperty([])
63 def update_list(self
, key
, action_number
= 0):
64 self
.action_title
= "actions linked to key {}:".format(key
.key_sym
)
67 action_descriptions
= [action
.description() for action
in key
.actions
]
69 for index
, description
in enumerate(action_descriptions
):
70 if index
< int(action_number
):
72 elif index
+ 0.5 == action_number
:
77 self
.action_list
.append([icon
, description
])
79 class Screen(FloatLayout
):
82 class MusicSamplerApp(App
):
84 Window
.size
= (913, 563)
88 if __name__
== '__main__':
89 Builder
.load_file(helpers
.path() + "/music_sampler.kv")
90 MusicSamplerApp().run()