import sys
from .music_file import *
-from . import yml_file
+from .mixer import Mixer
+from . import Config, gain
class Mapping(RelativeLayout):
expected_keys = NumericProperty(0)
+ master_volume = NumericProperty(100)
ready_color = ListProperty([1, 165/255, 0, 1])
def __init__(self, **kwargs):
+ if Config.no_mixing:
+ self.mixer = None
+ else:
+ self.mixer = Mixer()
self.key_config, self.open_files = self.parse_config()
super(Mapping, self).__init__(**kwargs)
self._keyboard = Window.request_keyboard(self._keyboard_closed, self)
self.running = []
Clock.schedule_interval(self.not_all_keys_ready, 1)
+ @property
+ def master_gain(self):
+ return gain(self.master_volume)
+
+ def set_master_volume(self, value, delta = False):
+ [db_gain, self.master_volume] = gain(value + int(delta) * self.master_volume, self.master_volume)
+ for music in self.open_files.values():
+ music.set_gain(db_gain)
def _keyboard_closed(self):
self._keyboard.unbind(on_key_down=self._on_keyboard_down)
return self.ids["Key_" + str(key_code[0])]
return None
- def find_by_unicode(self, key_sym):
- for key in self.children:
- if not type(key).__name__ == "Key":
- continue
- print(key.key_sym, key_sym)
- if key.key_sym == key_sym:
- print("found")
- return key
- return None
-
def not_all_keys_ready(self, dt):
for key in self.children:
if not type(key).__name__ == "Key":
self.running.remove((key, start_time))
def parse_config(self):
- stream = open(yml_file(), "r")
+ stream = open(Config.yml_file, "r")
config = yaml.load(stream)
stream.close()
if filename in config['music_properties']:
seen_files[filename] = MusicFile(
filename,
+ self,
**config['music_properties'][filename])
else:
seen_files[filename] = MusicFile(
+ self,
filename)
if filename not in key_properties[mapped_key]['files']: