Implement v2 models. Add test fixture. Make MIDI port normal to zero
This commit is contained in:
parent
ae5b425bf2
commit
df67030396
11 changed files with 623 additions and 55 deletions
267
test.py
Executable file
267
test.py
Executable file
|
|
@ -0,0 +1,267 @@
|
|||
#!/usr/bin/python
|
||||
|
||||
# Use aconnectgui to wire Midi Through Port-0 out to
|
||||
# mustang bridge virtual input port name
|
||||
|
||||
# OR
|
||||
|
||||
# hirsch@z87:~$ aconnect -o
|
||||
# client 14: 'Midi Through' [type=kernel]
|
||||
# 0 'Midi Through Port-0'
|
||||
# client 128: 'RtMidi Input Client' [type=user]
|
||||
# 0 'TestPort '
|
||||
#
|
||||
# Given the above, open RtMidi as: 'RtMidi Input Client 128:0'
|
||||
#
|
||||
# outport = mido.open_output('Midi Through 14:0')
|
||||
|
||||
from time import sleep
|
||||
import sys
|
||||
import itertools as it
|
||||
import mido
|
||||
mido.set_backend('mido.backends.rtmidi')
|
||||
|
||||
pc = mido.Message('program_change')
|
||||
cc = mido.Message('control_change')
|
||||
|
||||
def analog_send( outport, sleeptime=0.25 ):
|
||||
for value in [ 0, 32, 64, 96, 127, 96, 64, 32, 0 ]:
|
||||
cc.value = value
|
||||
outport.send( cc )
|
||||
sleep( sleeptime )
|
||||
|
||||
def discrete_send( outport, max ):
|
||||
for value in it.chain( range(0,max+1), range(max,-1,-1) ):
|
||||
cc.value = value
|
||||
outport.send( cc )
|
||||
sleep( 0.25 )
|
||||
|
||||
# Screen 1 is the same for all models
|
||||
def amp_screen1( outport ):
|
||||
for i in range( 69, 74 ):
|
||||
cc.control = i
|
||||
analog_send( outport )
|
||||
|
||||
# Some variation in screen 2 across models
|
||||
def amp_screen2( outport, bias_sag, extra ):
|
||||
if bias_sag:
|
||||
cc.control = 74
|
||||
discrete_send( outport, 2 )
|
||||
cc.control = 75
|
||||
analog_send( outport )
|
||||
|
||||
cc.control = 76
|
||||
discrete_send( outport, 4 )
|
||||
|
||||
cc.control = 77
|
||||
discrete_send( outport, 12 )
|
||||
|
||||
if extra:
|
||||
cc.control = 78
|
||||
analog_send( outport )
|
||||
cc.control = 79
|
||||
analog_send( outport )
|
||||
|
||||
# Step through all amp models
|
||||
def amp_select( outport ):
|
||||
cc.control = 68
|
||||
for i in range( 0, 13 ):
|
||||
cc.value = i
|
||||
outport.send( cc )
|
||||
sleep( 0.5 )
|
||||
|
||||
def run_amp_test( struct, outport ):
|
||||
raw_input( "Hit ENTER to run amp model select test...\n" )
|
||||
amp_select( outport )
|
||||
|
||||
for i in range( 0, len(struct) ):
|
||||
amp_rec = struct[i]
|
||||
|
||||
raw_input( "Hit ENTER to run parm edit check for %s\n" % amp_rec[0] )
|
||||
cc.control = 68
|
||||
cc.value = amp_rec[1]
|
||||
outport.send( cc )
|
||||
|
||||
raw_input( "Enter amp edit mode on Mustang and hit ENTER to proceed...\n" )
|
||||
amp_screen1( outport )
|
||||
|
||||
raw_input( "Step to amp edit screen 2 and hit ENTER...\n" )
|
||||
amp_screen2( outport, amp_rec[2], amp_rec[3] )
|
||||
|
||||
# Step through all reverb models
|
||||
def reverb_select( outport ):
|
||||
cc.control = 58
|
||||
for i in range( 0, 11 ):
|
||||
cc.value = i
|
||||
outport.send( cc )
|
||||
sleep( 0.5 )
|
||||
|
||||
def run_reverb_test( outport ):
|
||||
raw_input( "Hit ENTER to run reverb model select test...\n" )
|
||||
reverb_select( outport )
|
||||
|
||||
raw_input( "Enter Reverb edit mode and hit ENTER...\n" )
|
||||
for i in range ( 59, 64 ):
|
||||
cc.control = i
|
||||
analog_send( outport )
|
||||
sleep( 0.25 )
|
||||
|
||||
# Step through all delay models
|
||||
def delay_select( outport ):
|
||||
cc.control = 48
|
||||
for i in range( 0, 10 ):
|
||||
cc.value = i
|
||||
outport.send( cc )
|
||||
sleep( 0.5 )
|
||||
|
||||
def run_delay_test( struct, outport ):
|
||||
raw_input( "Hit ENTER to run delay model select test...\n" )
|
||||
delay_select( outport )
|
||||
|
||||
for i in range( 0, len(struct) ):
|
||||
delay_rec = struct[i]
|
||||
|
||||
raw_input( "Hit ENTER to run parm edit check for %s\n" % delay_rec[0] )
|
||||
cc.control = 48
|
||||
cc.value = delay_rec[1]
|
||||
outport.send( cc )
|
||||
|
||||
raw_input( "Enter delay edit mode on Mustang and hit ENTER to proceed...\n" )
|
||||
for i in range( 49, 54 ):
|
||||
cc.control = i
|
||||
# Multitap Delay has a single discrete control
|
||||
if i==53 and delay_rec[2]:
|
||||
discrete_send( outport, 3 )
|
||||
else:
|
||||
analog_send( outport )
|
||||
|
||||
if delay_rec[3]:
|
||||
analog_send( outport )
|
||||
|
||||
# Step through all mod models
|
||||
def mod_select( outport ):
|
||||
cc.control = 38
|
||||
for i in range( 0, 12 ):
|
||||
cc.value = i
|
||||
outport.send( cc )
|
||||
sleep( 0.5 )
|
||||
|
||||
def run_mod_test( struct, outport ):
|
||||
raw_input( "Hit ENTER to run mod model select test...\n" )
|
||||
mod_select( outport )
|
||||
|
||||
for i in range( 0, len(struct) ):
|
||||
mod_rec = struct[i]
|
||||
|
||||
raw_input( "Hit ENTER to run parm edit check for %s\n" % mod_rec[0] )
|
||||
cc.control = 38
|
||||
cc.value = mod_rec[1]
|
||||
outport.send( cc )
|
||||
|
||||
raw_input( "Enter mod edit mode on Mustang and hit ENTER to proceed...\n" )
|
||||
for i in range( 39, 44 ):
|
||||
cc.control = i
|
||||
if (i==42 and mod_rec[2]) or (i==43 and mod_rec[3]):
|
||||
discrete_send( outport, 1 )
|
||||
else:
|
||||
analog_send( outport )
|
||||
|
||||
# Step through all stomp models
|
||||
def stomp_select( outport ):
|
||||
cc.control = 28
|
||||
for i in range( 0, 8 ):
|
||||
cc.value = i
|
||||
outport.send( cc )
|
||||
sleep( 0.5 )
|
||||
|
||||
def run_stomp_test( struct, outport ):
|
||||
raw_input( "Hit ENTER to run stomp model select test...\n" )
|
||||
stomp_select( outport )
|
||||
|
||||
for i in range( 0, len(struct) ):
|
||||
stomp_rec = struct[i]
|
||||
|
||||
raw_input( "Hit ENTER to run parm edit check for %s\n" % stomp_rec[0] )
|
||||
cc.control = 28
|
||||
cc.value = stomp_rec[1]
|
||||
outport.send( cc )
|
||||
|
||||
raw_input( "Enter stomp edit mode on Mustang and hit ENTER to proceed...\n" )
|
||||
for i in range( 29, 34 ):
|
||||
cc.control = i
|
||||
if i==33 and stomp_rec[2]:
|
||||
discrete_send( outport, 1 )
|
||||
elif i==29 and stomp_rec[3]:
|
||||
discrete_send( outport, 3 )
|
||||
break
|
||||
else:
|
||||
analog_send( outport )
|
||||
|
||||
# Step through program changes
|
||||
def program_change_test( outport ):
|
||||
raw_input( "Hit ENTER to run program change test...\n" )
|
||||
for i in ( 0, 25, 75, 99, 60, 40, 20, 0 ):
|
||||
pc.program = i
|
||||
outport.send( pc )
|
||||
sleep( 0.5 )
|
||||
|
||||
args = sys.argv
|
||||
|
||||
if not len(args) == 3:
|
||||
print "Usage: test.py <virtual_port_name> <midi_channel>\n"
|
||||
sys.exit( 1 )
|
||||
|
||||
try:
|
||||
pc.channel = cc.channel = int( args[2] ) - 1
|
||||
except ValueError:
|
||||
print "Arg2 must be numeric!\n"
|
||||
sys.exit( 1 )
|
||||
|
||||
outport = mido.open_output( args[1] )
|
||||
|
||||
program_change_test( outport )
|
||||
|
||||
# Model # 33 Dig?
|
||||
stomp_test = (
|
||||
( "Overdrive", 1, False, False ),
|
||||
( "Wah", 2, True, False ),
|
||||
( "Simple Comp", 6, False, True ),
|
||||
( "Comp", 7, False, False )
|
||||
)
|
||||
|
||||
run_stomp_test( stomp_test, outport )
|
||||
|
||||
# Model # 42 Dig? 43 Dig?
|
||||
mod_test = (
|
||||
( "Sine Chorus", 1, False, False ),
|
||||
( "Vibratone", 5, False, False ),
|
||||
( "Vintage Trem", 6, False, False ),
|
||||
( "Ring Mod", 8, True, False ),
|
||||
( "Phaser", 10, False, True ),
|
||||
( "Pitch Shift", 11, False, False )
|
||||
)
|
||||
|
||||
run_mod_test( mod_test, outport )
|
||||
|
||||
run_reverb_test( outport )
|
||||
|
||||
# Model # 53 Dig?, Has 54?
|
||||
delay_test = (
|
||||
( "Mono Delay", 1, False, False ),
|
||||
( "Multitap", 4, True, False ),
|
||||
( "Tape Delay", 8, False, False )
|
||||
)
|
||||
|
||||
run_delay_test( delay_test, outport )
|
||||
|
||||
# Model, #, Bias/Sag?, Extra?
|
||||
amp_test = (
|
||||
( "Fender 65 Twin", 6, True, False ),
|
||||
( "Fender SuperSonic", 7, True, True ),
|
||||
( "British 60s", 8, True, True ),
|
||||
( "British 70s", 9, True, True ),
|
||||
( "British 80s", 10, True, True )
|
||||
)
|
||||
|
||||
run_amp_test( amp_test, outport )
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue