X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;f=music_sampler.py;h=a7faea24921b337e50e688164601276eb8ff36c5;hb=b68b4e8fd7e0769e6c33f68f6b6d9db190a41b54;hp=9797c918073f4baa8033f85634b9c5163efc34e9;hpb=532454ebada0ca776e8136450ed8810bc22d210b;p=perso%2FImmae%2FProjets%2FPython%2FMusicSampler.git diff --git a/music_sampler.py b/music_sampler.py index 9797c91..a7faea2 100644 --- a/music_sampler.py +++ b/music_sampler.py @@ -1,59 +1,70 @@ +import kivy +kivy.require("1.9.1") +from kivy.app import App +from kivy.uix.floatlayout import FloatLayout +from kivy.uix.relativelayout import RelativeLayout +from kivy.properties import ListProperty, StringProperty +from kivy.clock import Clock +from kivy.core.window import Window +from kivy.lang import Builder +from helpers.key import Key +from helpers.mapping import Mapping + import sys if getattr(sys, 'frozen', False): - os.chdir(sys._MEIPASS) + Builder.load_file(sys._MEIPASS + '/musicsampler.kv') -import pygame -import pydub -import helpers +class PlayList(RelativeLayout): + playlist = ListProperty([]) -pygame.mixer.pre_init(frequency = 44100) -pygame.init() + def __init__(self, **kwargs): + super(PlayList, self).__init__(**kwargs) + Clock.schedule_interval(self.update_playlist, 0.5) -size = width, height = 1024, 600 + def update_playlist(self, dt): + if self.parent is None or 'Mapping' not in self.parent.ids: + return True -screen = pygame.display.set_mode(size) -background = pygame.Surface(screen.get_size()) -background = background.convert() -background.fill((250, 250, 250)) + open_files = self.parent.ids['Mapping'].open_files + self.playlist = [] + for music_file in open_files.values(): + if not music_file.is_playing(): + continue + if music_file.is_paused(): + self.playlist.append(["⏸", music_file.name, False]) + else: + self.playlist.append(["⏵", music_file.name, True]) -action_surface = pygame.Surface((600, 250)).convert() -action_surface.fill((0,0,0)) -helpers.parse_config() -for key_name in helpers.Mapping.KEYS: - key = helpers.Mapping.KEYS[key_name] - key.draw(background) +class ActionList(RelativeLayout): + action_title = StringProperty("") + action_list = ListProperty([]) -screen.blit(background, (0, 0)) -screen.blit(action_surface, (10, 330)) + def update_list(self, key, action_number = 0): + self.action_title = "actions linked to key {}:".format(key.key_sym) + self.action_list = [] -pygame.display.flip() + action_descriptions = [action.description() for action in key.actions] -contexts = [ - 'normal' -] + for index, description in enumerate(action_descriptions): + if index < int(action_number): + icon = "✓" + elif index + 0.5 == action_number: + icon = "✅" + else: + icon = " " -context = 'normal' + self.action_list.append([icon, description]) -while 1: - event = pygame.event.wait() - if event.type == pygame.QUIT or ( - event.type == pygame.KEYDOWN and - event.mod == 4160 and - event.key == pygame.K_c): - pygame.quit() - sys.exit() +class Screen(FloatLayout): + pass - if context == 'normal': - if event.type == pygame.KEYDOWN: - key = helpers.Key.find_by_key_num(event.key) - if key is not None: - key.do_actions() - elif event.type == pygame.MOUSEBUTTONUP: - key = helpers.Key.find_by_collidepoint(pygame.mouse.get_pos()) - if key is not None: - key.list_actions(action_surface) +class MusicSamplerApp(App): + def build(self): + Window.size = (913, 563) - pygame.display.flip() + return Screen() +if __name__ == '__main__': + MusicSamplerApp().run()