X-Git-Url: http://g0dil.de/git?a=blobdiff_plain;f=config.py;fp=config.py;h=3ec155cddeeeb8529a0342ecd5c61e8fbb9fe6d2;hb=811a95d9a6a797149cdfc6a8ad9c6b2a779a87bc;hp=d4b5abf3bd814785f29ac19eff53b62d8719ba2d;hpb=8aab1c96c67b95d25fb175495894c38f82143cc9;p=audiocontrol.git diff --git a/config.py b/config.py index d4b5abf..3ec155c 100644 --- a/config.py +++ b/config.py @@ -5,35 +5,60 @@ from Views import EventWidget from Events import Event import main import Joyboard, Keyboard, Process -import Looper -import sys, curses +import Looper, Mixer +import sys, curses, time, os from curses.ascii import alt, ctrl def shift(letter) : return ord(chr(letter).upper()) def key(letter) : return ord(letter.lower()) +global_map = Bindings.KeyMap() + ########################################################################### # Setup views and controllers # -# Display size: 77x17 - -Logger.init(main.viewmanager, 38, 0, 39, 10) - -Joyboard.register( - viewmanager = main.viewmanager, - dispatcher = main.dispatcher, - - context = 'jb0', - label = 'Foot Switch', - numeric_switches = 10, - alpha_switches = 5, - x = 2, - y = 10, - size = 6, - - device = '/dev/input/js0', - bits = { 1:1, 3:2, 2:4, 0:8 } -) +# Display size: 88x22 + +#Logger.init(main.viewmanager, 38, 0, 37, 10, 'audiocontroller.log') +Logger.init(main.viewmanager, 0, 17, 88, 5) + +jb = None +ctl = None +if os.path.exists('/dev/input/js0'): + jb = Joyboard.register( + viewmanager = main.viewmanager, + dispatcher = main.dispatcher, + + context = 'jb0', + label = 'Foot Switch', + numeric_switches = 10, + alpha_switches = 5, + x = 0, + y = 10, + dx = 88, + size = 7, + + device = '/dev/input/js0', + bits = { 1:1, 3:2, 2:4, 0:8 }, + ) + + ctl = Joyboard.registerController( + viewmanager = main.viewmanager, + dispatcher = main.dispatcher, + keylist = main.keylist, + source = jb, + + context = 'c0', + name = 'Control', + x = 75, + y = 0, + dx = 13, + dy = 10, + + controller = 0, + low = -27200, + high = -32700, + ) Keyboard.register( viewmanager = main.viewmanager, @@ -43,39 +68,50 @@ Keyboard.register( label = 'Key Bindings', x = 0, y = 0, - dx = 38, - dy = 10 + dx = 52, + dy = 10, + size = 7 ) -jackd = Process.Process("jackd -d alsa -S -r 44100 -p 256",'jack') - ########################################################################### # Global keymap and auxilary actions -global_map = Bindings.KeyMap() - @action def quit(binding): - sys.exit(0) + sys.exit(1) -global_map.add( Binding( Event('jb0',0), '()', Actions.Nop() ) ) -global_map.add( Binding( Event('jb0',1), '()', Actions.Nop() ) ) -global_map.add( Binding( Event('jb0',10), '()', Actions.Nop() ) ) +@action +def restart(binding): + sys.exit(0) global_map.add( Binding( Event('kbd',key('q')), 'Quit', Action['quit'] ) ) +global_map.add( Binding( Event('kbd',ctrl(key('r'))), 'Restart', Action['restart'] ) ) + +for i,k in enumerate(('1', '2', '3', '4', '5', '6', '7', '8', '9', '0', 'a', 'b', 'c', 'd', 'e' )): + Action.register( Events.EmitEvent('key_%s' % k, main.dispatcher, Event('jb0', i)) ) + global_map.add( Binding( Event('kbd',key(k)), 'Foot %s' % k.upper(), Action['key_%s' % k] ) ) + +if ctl is not None: + Action.register( Joyboard.StepController( 'controller_increment', ctl, +1 ) ) + Action.register( Joyboard.StepController( 'controller_decrement', ctl, -1 ) ) + + global_map.add( Binding( Event('kbd', curses.KEY_UP), 'Increment', Action['controller_increment'] ) ) + global_map.add( Binding( Event('kbd', curses.KEY_DOWN), 'Decrement', Action['controller_decrement'] ) ) Action.register( Actions.ChangeBindingsRelative( 'unset_this_map', 0, [] ) ) ########################################################################### -# Looper mode +# Looper looper_main_map = Bindings.KeyMap( 'Looper' ) -looper_aux_map = Bindings.KeyMap( 'Aux' ) +Action.register( Actions.ChangeBindingsRelative( 'mode_looper', 0, [ looper_main_map ] ) ) -Action.register( Actions.ChangeBindingsAbsolute('set_mode_looper', 1, [looper_main_map]) ) -Action.register( Actions.ChangeBindingsRelative('looper_set_aux_map', 1, [looper_aux_map]) ) +looper = Looper.register( + oscserver = main.oscserver, -looper = Looper.Controller('localhost',9951) + context = 'sl', + remote = ('127.0.0.1',9951), +) Action.register( Looper.Command('looper_record', looper, 'record') ) Action.register( Looper.Command('looper_overdub', looper, 'overdub') ) @@ -89,44 +125,134 @@ Action.register( Looper.Command('looper_replace', looper, 'replace') ) Action.register( Looper.Command('looper_substitute', looper, 'substitute') ) Action.register( Looper.Command('looper_reverse', looper, 'reverse') ) Action.register( Looper.Command('looper_oneshot', looper, 'oneshot') ) - -looper_main_map.add ( Binding( Event('jb0',2), 'Rec', Action['looper_record'] ) ) -looper_main_map.add ( Binding( Event('jb0',3), 'Over', Action['looper_overdub'] ) ) -looper_main_map.add ( Binding( Event('jb0',4), 'Mult', Action['looper_multiply'] ) ) -looper_main_map.add ( Binding( Event('jb0',5), 'Mute', Action['looper_mute'] ) ) -looper_main_map.add ( Binding( Event('jb0',6), 'Undo', Action['looper_undo'] ) ) -looper_main_map.add ( Binding( Event('jb0',7), 'Redo', Action['looper_redo'] ) ) -looper_main_map.add ( Binding( Event('jb0',8), 'Trig', Action['looper_trigger'] ) ) -looper_main_map.add ( Binding( Event('jb0',9), 'Aux', Action['looper_set_aux_map'] ) ) - -looper_aux_map.add ( Binding( Event('jb0',2), 'Ins', Action['looper_insert'] ) ) -looper_aux_map.add ( Binding( Event('jb0',3), 'Repl', Action['looper_replace'] ) ) -looper_aux_map.add ( Binding( Event('jb0',4), 'Subst', Action['looper_substitute'] ) ) -looper_aux_map.add ( Binding( Event('jb0',6), 'Rev', Action['looper_reverse'] ) ) -looper_aux_map.add ( Binding( Event('jb0',7), 'Once', Action['looper_oneshot'] ) ) -looper_aux_map.add ( Binding( Event('jb0',9), 'Main', Action['unset_this_map'] ) ) +Action.register( Looper.Command('looper_undo_all', looper, 'undo_all') ) +Action.register( Looper.Command('looper_redo_all', looper, 'redo_all') ) + +looper_main_map.add ( Binding( Event('jb0',0), 'Rec', Action['looper_record'] ) ) +looper_main_map.add ( Binding( Event('jb0',1), 'Over', Action['looper_overdub'] ) ) +looper_main_map.add ( Binding( Event('jb0',2), 'Mult', Action['looper_multiply'] ) ) +looper_main_map.add ( Binding( Event('jb0',3), 'Undo', Action['looper_undo'] ) ) +looper_main_map.add ( Binding( Event('jb0',4), 'Redo', Action['looper_redo'] ) ) +looper_main_map.add ( Binding( Event('jb0',5), 'Mute', Action['looper_mute'] ) ) +looper_main_map.add ( Binding( Event('jb0',6), 'Trig', Action['looper_trigger'] ) ) +looper_main_map.add ( Binding( Event('jb0',7), 'Once', Action['looper_oneshot'] ) ) +looper_main_map.add ( Binding( Event('jb0',8), 'Ins', Action['looper_insert'] ) ) +looper_main_map.add ( Binding( Event('jb0',9), 'Repl', Action['looper_replace'] ) ) +looper_main_map.add ( Binding( Event('jb0',12), 'Undo A', Action['looper_undo_all'] ) ) +looper_main_map.add ( Binding( Event('jb0',13), 'Redo A', Action['looper_redo_all'] ) ) +looper_main_map.add ( Binding( Event('jb0',14), 'Subst', Action['looper_substitute'] ) ) + + +looper_param_map = Bindings.KeyMap( 'Parameters' ) +Action.register( Actions.ChangeBindingsRelative('looper_set_param_map', 1, [looper_param_map] ) ) +looper_main_map.add ( Binding( Event('jb0',11), '[Param]', Action['looper_set_param_map'] ) ) + +if ctl is not None: + Action.register( Looper.AssignController( 'looper_parm_rec_thresh', looper, ctl, 'Rec.Thresh.', + 'rec_thresh', 0.0, 1.0 ) ) + Action.register( Looper.AssignController( 'looper_parm_feedback', looper, ctl, 'Feedback', + 'feedback', 0.0, 1.0 ) ) + Action.register( Looper.AssignController( 'looper_parm_dry', looper, ctl, 'Dry Level', + 'global_dry', 0.0, 1.0 ) ) + Action.register( Looper.AssignController( 'looper_parm_wet', looper, ctl, 'Wet Level', + 'global_wet', 0.0, 1.0 ) ) + Action.register( Looper.AssignController( 'looper_parm_igain', looper, ctl, 'In. Gain', + 'global_input_gain', 0.0, 1.0 ) ) + + steps = [ 1.0 ] + for i in range(6): + x = pow(2.0,2.0*(i+1)/12.0) + steps.append(x) + steps[0:0] = [1/x] + + Action.register( Looper.AssignController( 'looper_parm_rate', looper, ctl, 'Rate', + 'rate', 0.5, 2.0, steps ) ) + + looper_param_map.add( Binding( Event('jb0',5), 'Feedb', Action['looper_parm_feedback'] ) ) + looper_param_map.add( Binding( Event('jb0',6), 'Dry', Action['looper_parm_dry'] ) ) + looper_param_map.add( Binding( Event('jb0',7), 'Wet', Action['looper_parm_wet'] ) ) + looper_param_map.add( Binding( Event('jb0',8), 'Gain', Action['looper_parm_igain'] ) ) + looper_param_map.add( Binding( Event('jb0',9), 'Rec T', Action['looper_parm_rec_thresh'] ) ) + looper_param_map.add( Binding( Event('jb0',12), '', Actions.Nop() ) ) + looper_param_map.add( Binding( Event('jb0',13), 'Rev', Action['looper_reverse'] ) ) + looper_param_map.add( Binding( Event('jb0',14), 'Rate', Action['looper_parm_rate'] ) ) + +looper_param_map.add( Binding( Event('jb0',11), '[Main]', Action['unset_this_map'] ) ) + +# Initialize looper: enable 'round' and set quantize to 'cycle' +looper.set('quantize',1) +looper.set('round',1) +looper.set('sync',1) ########################################################################### -# MegaPedal mode +# Mixer and effects -megapedal_main_map = Bindings.KeyMap( 'MegaPedal' ) +mixer_map = Bindings.KeyMap('Mixer & Effects') +Action.register( Actions.ChangeBindingsRelative( 'mode_mixer', 0, [ mixer_map ] ) ) -Action.register( Actions.ChangeBindingsAbsolute('set_mode_megapedal', 1, [megapedal_main_map]) ) +looper_main_map.add( Binding( Event('jb0',10), '[Mixer]', Action['mode_mixer'] ) ) -megapedal_main_map.add ( Binding( Event('jb0',11), 'Looper', Action['set_mode_looper'] ) ) -global_map.add ( Binding( Event('jb0',11), 'MegaPedal', Action['set_mode_megapedal'] ) ) +mixer = Mixer.register( + viewmanager = main.viewmanager, + oscserver = main.oscserver, -########################################################################### -# RythmBox mode + context = 'mix', + label = 'Mixer', + x = 52, + y = 0, + dx = 23, + dy = 4, + + channels = ( 'Guitar', 'Voice' ), + remote = ('127.0.0.1', 9901), +) -rythmbox_main_map = Bindings.KeyMap( 'RythmBox' ) +gain = Mixer.register( + viewmanager = main.viewmanager, + oscserver = main.oscserver, -Action.register( Actions.ChangeBindingsAbsolute('set_mode_rythmbox', 1, [rythmbox_main_map]) ) + context = 'gain', + label = 'Gain', + x = 52, + y = 7, + dx = 23, + dy = 3, -rythmbox_main_map.add ( Binding( Event('jb0',11), 'MegaPedal', Action['set_mode_megapedal'] ) ) -global_map.add ( Binding( Event('jb0',11), 'RythmBox', Action['set_mode_rythmbox'] ) ) + channels = ( 'Guitar', ), + remote = ('127.0.0.1', 9902), +) +Action.register( Mixer.AssignController( 'mixer_guitar_level', mixer, ctl, 'Guitar', 1 ) ) +Action.register( Mixer.ToggleMuteChannel( 'mixer_mute_guitar', mixer, 1 ) ) +Action.register( Mixer.AssignController( 'mixer_voice_level', mixer, ctl, 'Voice', 2 ) ) +Action.register( Mixer.ToggleMuteChannel( 'mixer_mute_voice', mixer, 2 ) ) +Action.register( Mixer.AssignController( 'mixer_master_level', mixer, ctl, 'Master', 0 ) ) +Action.register( Mixer.ToggleMuteAll( 'mixer_mute_all', mixer ) ) +Action.register( Mixer.CycleVolume( 'mixer_cycle_gain', gain, 1, ( 0.0, 2.0, 4.0 ) ) ) + +mixer_map.add( Binding( Event('jb0',0), 'Rec', Action['looper_record'] ) ) +mixer_map.add( Binding( Event('jb0',1), 'Over', Action['looper_overdub'] ) ) +mixer_map.add( Binding( Event('jb0',2), 'Mult', Action['looper_multiply'] ) ) +mixer_map.add( Binding( Event('jb0',3), 'Undo', Action['looper_undo'] ) ) +mixer_map.add( Binding( Event('jb0',4), 'Redo', Action['looper_redo'] ) ) +mixer_map.add( Binding( Event('jb0',5), 'Un All', Action['looper_undo_all'] ) ) + +mixer_map.add( Binding( Event('jb0',6), 'Lead', Action['mixer_cycle_gain'] ) ) +mixer_map.add( Binding( Event('jb0',7), 'Mute G', Action['mixer_mute_guitar'] ) ) +mixer_map.add( Binding( Event('jb0',8), 'Mute V', Action['mixer_mute_voice'] ) ) +mixer_map.add( Binding( Event('jb0',9), 'Mute', Action['mixer_mute_all'] ) ) + +mixer_map.add( Binding( Event('jb0',13), 'Vol G', Action['mixer_guitar_level'] ) ) +mixer_map.add( Binding( Event('jb0',14), 'Vol V', Action['mixer_voice_level'] ) ) + +mixer.set(1,0.0) +mixer.set(2,0.0) +mixer.assignController( ctl, 'Guitar', 1 ) +gain.set(1,0.0) + ########################################################################### +mixer_map.add( Binding( Event('jb0',10), '[Loop]', Action['mode_looper'] ) ) + main.keylist.append(global_map) -main.keylist.append(looper_main_map) +main.keylist.append(mixer_map)