def add_layer_midich(self, midich, select=True): if self.add_layer_eng: zyngine = self.zyngui.screens['engine'].start_engine( self.add_layer_eng) layer = zynthian_layer(zyngine, midich, self.zyngui) # Try to connect Audio Effects ... if len(self.layers) > 0 and layer.engine.type == "Audio Effect": if self.replace_layer_index is not None: self.replace_on_fxchain(layer) else: self.add_to_fxchain(layer, self.layer_chain_parallel) self.layers.append(layer) # Try to connect MIDI tools ... elif len(self.layers) > 0 and layer.engine.type == "MIDI Tool": if self.replace_layer_index is not None: self.replace_on_midichain(layer) else: self.add_to_midichain(layer, self.layer_chain_parallel) self.layers.append(layer) # New root layer else: self.layers.append(layer) self.zyngui.zynautoconnect() if select: self.fill_list() root_layer = self.get_fxchain_root(layer) try: self.index = self.root_layers.index(root_layer) self.layer_control() except Exception as e: logging.error(e) self.zyngui.show_screen('layer')
def add_layer_midich(self, midich, select=True): if self.add_layer_eng: self.layers.append(zynthian_layer(self.add_layer_eng,midich,zynthian_gui_config.zyngui)) self.fill_list() if select: self.index=len(self.layers)-1 self.select_action(self.index)
def add_layer_midich(self, midich, select=True): if self.add_layer_eng: layer = zynthian_layer(self.add_layer_eng, midich, self.zyngui) # Try to connect effects ... if len(self.layers) > 0 and layer.engine.type == "Audio Effect": if self.replace_layer_index is not None: self.replace_on_fxchain(layer) else: self.add_to_fxchain(layer) self.layers.append(layer) else: self.layers.append(layer) self.zyngui.zynautoconnect() if select: self.fill_list() root_layer = self.get_fxchain_root(layer) try: self.index = self.root_layers.index(root_layer) self.layer_control() except Exception as e: logging.error(e) self.zyngui.show_screen('layer')
def load_snapshot(self, fpath): try: with open(fpath, "r") as fh: json = fh.read() logging.info("Loading snapshot %s => \n%s" % (fpath, json)) except Exception as e: logging.error("Can't load snapshot '%s': %s" % (fpath, e)) return False try: snapshot = JSONDecoder().decode(json) self.remove_all_layers(False) for lss in snapshot['layers']: engine = zynthian_gui_config.zyngui.screens[ 'engine'].start_engine(lss['engine_nick'], 1) self.layers.append( zynthian_layer(engine, lss['midi_chan'], zynthian_gui_config.zyngui)) self.layers[-1].restore_snapshot(lss) self.fill_list() self.index = snapshot['index'] if self.list_data[self.index][0] in ('NEW', 'RESET'): self.index = 0 zynthian_gui_config.zyngui.show_screen('layer') else: self.select_action(self.index) zynthian_gui_config.zyngui.screens['engine'].clean_unused_engines() except Exception as e: logging.error("Invalid snapshot format: %s" % e) return False return True
def load_snapshot(self, fpath): try: with open(fpath,"r") as fh: json=fh.read() logging.info("Loading snapshot %s => \n%s" % (fpath,json)) self.last_snapshot_fpath=fpath except Exception as e: logging.error("Can't load snapshot '%s': %s" % (fpath,e)) return False try: snapshot=JSONDecoder().decode(json) #Clean all layers self.remove_all_layers(False) #Create layers for lss in snapshot['layers']: engine=zynthian_gui_config.zyngui.screens['engine'].start_engine(lss['engine_nick'],1) self.layers.append(zynthian_layer(engine,lss['midi_chan'],zynthian_gui_config.zyngui)) #Set active layer self.index=snapshot['index'] self.curlayer=self.layers[self.index] zynthian_gui_config.zyngui.set_curlayer(self.curlayer) #Load layers i=0 for lss in snapshot['layers']: self.layers[i].restore_snapshot(lss) i+=1 #Fill layer list self.fill_list() #Remove unused engines zynthian_gui_config.zyngui.screens['engine'].clean_unused_engines() #Set Transpose if 'transpose' in snapshot: for i in range(0,16): zyncoder.lib_zyncoder.set_midi_filter_transpose(i,snapshot['transpose'][i]) #Set CC-Map #TODO #Set Monitored Engines if 'monitored_engines' in snapshot: zynautoconnect.set_monitored_engines(snapshot['monitored_engines']) else: zynautoconnect.reset_monitored_engines() #Post action if self.list_data[self.index][0] in ('NEW','RESET'): self.index=0 zynthian_gui_config.zyngui.show_screen('layer') else: self.select_action(self.index) except Exception as e: logging.error("Invalid snapshot format: %s" % e) return False return True
def add_layer_midich(self, midich, select=True): if self.add_layer_eng: layer=zynthian_layer(self.add_layer_eng, midich,zynthian_gui_config.zyngui) # Try to connect effects ... if len(self.layers)>0 and layer.engine.type=="Audio Effect": self.add_to_fxchain(layer) self.layers.append(layer) self.zyngui.zynautoconnect() if select: self.fill_list() root_layer = self.get_fxchain_root(layer) try: self.index = self.root_layers.index(root_layer) self.layer_control() except Exception as e: logging.error(e) self.zyngui.show_screen('layer')
def create_amixer_layer(self): mixer_eng = self.zyngui.screens['engine'].start_engine('MX') self.amixer_layer = zynthian_layer(mixer_eng, None, self.zyngui)
def load_snapshot(self, fpath): try: with open(fpath, "r") as fh: json = fh.read() logging.info("Loading snapshot %s => \n%s" % (fpath, json)) except Exception as e: logging.error("Can't load snapshot '%s': %s" % (fpath, e)) return False try: snapshot = JSONDecoder().decode(json) #Clean all layers, but don't stop unused engines self.remove_all_layers(False) # Reusing Jalv engine instances raise problems (audio routing & jack names, etc..), # so we stop Jalv engines! self.zyngui.screens['engine'].stop_unused_jalv_engines() #Create new layers, starting engines when needed i = 0 for lss in snapshot['layers']: if lss['engine_nick'] == "MX": if zynthian_gui_config.snapshot_mixer_settings: snapshot['amixer_layer'] = lss del (snapshot['layers'][i]) else: engine = self.zyngui.screens['engine'].start_engine( lss['engine_nick']) self.layers.append( zynthian_layer(engine, lss['midi_chan'], self.zyngui)) i += 1 # Finally, stop all unused engines self.zyngui.screens['engine'].stop_unused_engines() #Restore MIDI profile state if 'midi_profile_state' in snapshot: self.set_midi_profile_state(snapshot['midi_profile_state']) #Set MIDI Routing if 'midi_routing' in snapshot: self.set_midi_routing(snapshot['midi_routing']) else: self.reset_midi_routing() #Autoconnect MIDI self.zyngui.zynautoconnect_midi(True) #Set extended config if 'extended_config' in snapshot: self.set_extended_config(snapshot['extended_config']) # Restore layer state, step 1 => Restore Bank & Preset Status i = 0 for lss in snapshot['layers']: self.layers[i].restore_snapshot_1(lss) i += 1 # Restore layer state, step 2 => Restore Controllers Status i = 0 for lss in snapshot['layers']: self.layers[i].restore_snapshot_2(lss) i += 1 #Set Audio Routing if 'audio_routing' in snapshot: self.set_audio_routing(snapshot['audio_routing']) else: self.reset_audio_routing() #Set Audio Capture if 'audio_capture' in snapshot: self.set_audio_capture(snapshot['audio_capture']) else: self.reset_audio_routing() #Autoconnect Audio self.zyngui.zynautoconnect_audio() # Restore ALSA Mixer settings if self.amixer_layer and 'amixer_layer' in snapshot: self.amixer_layer.restore_snapshot_1(snapshot['amixer_layer']) self.amixer_layer.restore_snapshot_2(snapshot['amixer_layer']) #Fill layer list self.fill_list() #Set active layer if snapshot['index'] < len(self.layers): self.index = snapshot['index'] self.zyngui.set_curlayer(self.layers[self.index]) elif len(self.layers) > 0: self.index = 0 self.zyngui.set_curlayer(self.layers[self.index]) #Set Clone if 'clone' in snapshot: self.set_clone(snapshot['clone']) else: self.reset_clone() # Note-range & Tranpose self.reset_note_range() if 'note_range' in snapshot: self.set_note_range(snapshot['note_range']) #BW compat. elif 'transpose' in snapshot: self.set_transpose(snapshot['transpose']) #Zynseq RIFF data if 'zynseq_riff_b64' in snapshot and 'stepseq' in self.zyngui.screens: b64_bytes = snapshot['zynseq_riff_b64'].encode('utf-8') binary_riff_data = base64.decodebytes(b64_bytes) self.zyngui.screens['stepseq'].restore_riff_data( binary_riff_data) #Post action if self.index < len(self.root_layers): self.select_action(self.index) else: self.index = 0 self.zyngui.show_screen('layer') except Exception as e: self.zyngui.reset_loading() logging.exception("Invalid snapshot: %s" % e) return False self.last_snapshot_fpath = fpath return True
def load_snapshot(self, fpath): try: with open(fpath, "r") as fh: json = fh.read() logging.info("Loading snapshot %s => \n%s" % (fpath, json)) except Exception as e: logging.error("Can't load snapshot '%s': %s" % (fpath, e)) return False try: snapshot = JSONDecoder().decode(json) first_layer_index = 1 remove_mixer_layer = False # Check for MIXER layer ... for lss in snapshot['layers']: if lss['engine_nick'] == "MX": if zynthian_gui_config.ignore_snapshot_mixer_settings: snapshot['layers'].remove(lss) else: first_layer_index = 0 remove_mixer_layer = True break #Clean all layers, but don't stop unused engines self.remove_all_layers(False, remove_mixer_layer) # Reusing Jalv engine instances raise problems (audio routing & jack names, etc..), # so we stop Jalv engines! self.zyngui.screens['engine'].stop_unused_jalv_engines() #Create new layers, starting engines when needed for lss in snapshot['layers']: engine = self.zyngui.screens['engine'].start_engine( lss['engine_nick']) self.layers.append( zynthian_layer(engine, lss['midi_chan'], self.zyngui)) # Finally, stop all unused engines self.zyngui.screens['engine'].stop_unused_engines() #Autoconnect self.zyngui.zynautoconnect_midi(True) self.zyngui.zynautoconnect_audio() #Restore MIDI profile state if 'midi_profile_state' in snapshot: self.set_midi_profile_state(snapshot['midi_profile_state']) #Set extended config if 'extended_config' in snapshot: self.set_extended_config(snapshot['extended_config']) # Restore layer state, step 1 => Restore Bank & Preset Status i = first_layer_index for lss in snapshot['layers']: self.layers[i].restore_snapshot_1(lss) i += 1 # Restore layer state, step 2 => Restore Controllers Status i = first_layer_index for lss in snapshot['layers']: self.layers[i].restore_snapshot_2(lss) i += 1 #Fill layer list self.fill_list() #Set active layer self.index = first_layer_index + snapshot['index'] if self.index in self.layers: self.curlayer = self.layers[self.index] self.zyngui.set_curlayer(self.curlayer) #Set Clone if 'clone' in snapshot: self.set_clone(snapshot['clone']) else: self.reset_clone() #Set Transpose if 'transpose' in snapshot: self.set_transpose(snapshot['transpose']) else: self.reset_transpose() #Set CC-Map #TODO #Set Audio Routing if 'audio_routing' in snapshot: self.set_audio_routing(snapshot['audio_routing']) else: self.reset_audio_routing() #Post action if self.index < len(self.root_layers): self.select_action(self.index) else: self.index = 0 self.zyngui.show_screen('layer') except Exception as e: self.zyngui.reset_loading() logging.exception("Invalid snapshot: %s" % e) return False self.last_snapshot_fpath = fpath return True
def add_layer_mixer(self): mixer_eng = self.zyngui.screens['engine'].start_engine('MX') layer = zynthian_layer(mixer_eng, None, self.zyngui) self.layers.append(layer)
def load_snapshot(self, fpath): try: with open(fpath,"r") as fh: json=fh.read() logging.info("Loading snapshot %s => \n%s" % (fpath,json)) except Exception as e: logging.error("Can't load snapshot '%s': %s" % (fpath,e)) return False try: snapshot=JSONDecoder().decode(json) #Clean all layers self.remove_all_layers(False) #Start engines for lss in snapshot['layers']: engine=self.zyngui.screens['engine'].start_engine(lss['engine_nick']) self.layers.append(zynthian_layer(engine,lss['midi_chan'],zynthian_gui_config.zyngui)) #Remove unused engines self.zyngui.screens['engine'].clean_unused_engines() #Autoconnect self.zyngui.zynautoconnect(True) #Restore MIDI profile state if 'midi_profile_state' in snapshot: self.set_midi_profile_state(snapshot['midi_profile_state']) #Set extended config if 'extended_config' in snapshot: self.set_extended_config(snapshot['extended_config']) # Restore layer state, step 1 => Restore Bank & Preset Status i=0 for lss in snapshot['layers']: self.layers[i].restore_snapshot_1(lss) i+=1 # Restore layer state, step 2 => Restore Controllers Status i=0 for lss in snapshot['layers']: self.layers[i].restore_snapshot_2(lss) i+=1 #Fill layer list self.fill_list() #Set active layer self.index=snapshot['index'] if self.index in self.layers: self.curlayer=self.layers[self.index] self.zyngui.set_curlayer(self.curlayer) #Set Clone if 'clone' in snapshot: self.set_clone(snapshot['clone']) else: self.reset_clone() #Set Transpose if 'transpose' in snapshot: self.set_transpose(snapshot['transpose']) else: self.reset_transpose() #Set CC-Map #TODO #Set Audio Routing if 'audio_routing' in snapshot: self.set_audio_routing(snapshot['audio_routing']) else: self.reset_audio_routing() #Post action if self.list_data[self.index][0] in ('NEW','RESET'): self.index=0 self.zyngui.show_screen('layer') else: self.select_action(self.index) except Exception as e: self.zyngui.reset_loading() logging.exception("Invalid snapshot: %s" % e) return False self.last_snapshot_fpath = fpath return True
def load_snapshot(self, fpath): try: with open(fpath,"r") as fh: json=fh.read() logging.info("Loading snapshot %s => \n%s" % (fpath,json)) self.last_snapshot_fpath=fpath except Exception as e: logging.error("Can't load snapshot '%s': %s" % (fpath,e)) return False try: snapshot=JSONDecoder().decode(json) #Clean all layers self.remove_all_layers(False) #Start engines for lss in snapshot['layers']: engine=self.zyngui.screens['engine'].start_engine(lss['engine_nick']) self.layers.append(zynthian_layer(engine,lss['midi_chan'],zynthian_gui_config.zyngui)) #Remove unused engines self.zyngui.screens['engine'].clean_unused_engines() #Autoconnect self.zyngui.zynautoconnect() #Set extended config if 'extended_config' in snapshot: self.set_extended_config(snapshot['extended_config']) # Restore layer state, step 1 => Restore Bank & Preset Status i=0 for lss in snapshot['layers']: self.layers[i].restore_snapshot_1(lss) i+=1 # Restore layer state, step 2 => Restore Controllers Status i=0 for lss in snapshot['layers']: self.layers[i].restore_snapshot_2(lss) i+=1 #Fill layer list self.fill_list() #Set active layer self.index=snapshot['index'] if self.index in self.layers: self.curlayer=self.layers[self.index] self.zyngui.set_curlayer(self.curlayer) #Set Clone if 'clone' in snapshot: self.set_clone(snapshot['clone']) else: self.reset_clone() #Set Transpose if 'transpose' in snapshot: self.set_transpose(snapshot['transpose']) else: self.reset_transpose() #Set CC-Map #TODO #Set Audio Routing if 'audio_routing' in snapshot: self.set_audio_routing(snapshot['audio_routing']) else: self.reset_audio_routing() #Post action if self.list_data[self.index][0] in ('NEW','RESET'): self.index=0 self.zyngui.show_screen('layer') else: self.select_action(self.index) except Exception as e: if zynthian_gui_config.raise_exceptions: raise e else: logging.error("Invalid snapshot format: %s" % e) return False return True