volca ardour3 jam

Nikolaus Gradwohl2014-03-17T17:56:12+00:00

I created a small chuck script that makes ardour jump to a marker using osc messages. These messages get triggered by the midi signals created by my launchpad mini. I also synced my volca bass to the track using midi-clock. Unfortunately ardour doesn´t send midi sync signals when playing in loop mode. So I created a midi track and sent the same note that my chuck script uses to trigger the "jump-to-marker-1" signal to create the loop.

The lower 5 glowing buttons control the mute state of the first 5 tracks.

you can download my chuck code after this video.

All the sounds except the drum loop have been created using a volca bass or a volca keys. The bass sequence is the same I used in my last blogpost only played slower.

volca jam

The blink and toggle functions are used to create some midi lightshow effects on the launchpad.

MidiIn min;
MidiOut mout;
MidiMsg msg;

OscSend xmit;

min.open(5);
mout.open(5);
xmit.setHost( "127.0.0.1", 3819 );

[-16, -15, 1, 17, 16, 15, -1, -17 ] @=> int scale[];
[-16, -32, -48 ] @=> int scale2[];

[0,0,0,0,0] @=> int mstate[];

for( 0 => int i; i < mstate.cap(); i++) {
    toggle(i);
    mute(i);
}

while(true) {
    min => now;
    min.recv(msg);
    if ( msg.data1 == 144 && msg.data3 > 0 ) {
         <<< msg.data2 >>>;
         if ( msg.data2 < 48 ) {
            spork ~ blink( msg );
            spork ~ jump( msg.data2 - 33 );
        } else {
            spork ~ toggle( msg.data2 - 64 );
            spork ~ mute( msg.data2 - 64 );
        }

    }

}
fun void jump( int v ) {
    if (v == 0) {
         xmit.startMsg( "/ardour/transport_play" );

    } else {
        xmit.startMsg( "/ardour/access_action", "s" );
        "Editor/goto-mark-" + Std.itoa( v ) => string str;
        str => xmit.addString;
    }
}

fun void mute( int channel ) {
    <<< channel >>>;
    xmit.startMsg( "/ardour/routes/mute", "ii" );

    channel + 1 => xmit.addInt;
    mstate[channel] => xmit.addInt;

}
fun void blink( MidiMsg m ) {
    MidiMsg msg2;
    MidiMsg cpy;
    m.data1=>cpy.data1;
    m.data2=>cpy.data2;
    m.data3=>cpy.data3;

    60 => msg2.data3;
    144 => msg2.data1;
    cpy.data2 => msg2.data2;
    mout.send( msg2 );
    100::ms => now;
    63 => msg2.data3;
    for( 0 => int i; i < scale.cap(); i++) {
        cpy.data2 + scale[i] => msg2.data2;
        mout.send( msg2 );
    }
    100::ms => now;

    128 => msg2.data1;
    cpy.data2 => msg2.data2;
    mout.send( msg2 );
    for( 0 => int i; i < scale.cap(); i++) {
        cpy.data2 + scale[i] => msg2.data2;
        mout.send( msg2 );
        mout.send( msg2 );
    }
}
fun void blink( MidiMsg m ) {
    MidiMsg msg2;
    MidiMsg cpy;
    m.data1=>cpy.data1;
    m.data2=>cpy.data2;
    m.data3=>cpy.data3;

    60 => msg2.data3;
    144 => msg2.data1;
    cpy.data2 => msg2.data2;
    mout.send( msg2 );
    100::ms => now;
    63 => msg2.data3;
    for( 0 => int i; i < scale.cap(); i++) {
        cpy.data2 + scale[i] => msg2.data2;
        mout.send( msg2 );
    }
    100::ms => now;

    128 => msg2.data1;
    cpy.data2 => msg2.data2;
    mout.send( msg2 );
    for( 0 => int i; i < scale.cap(); i++) {
        cpy.data2 + scale[i] => msg2.data2;
        mout.send( msg2 );
        mout.send( msg2 );
    }
}
fun void toggle( int channel ) {
    MidiMsg msg2;
    int cpy;
    channel=>cpy;
    cpy + 64 => msg2.data2;

    if ( mstate[ cpy ] == 1 ) {
        60 => msg2.data3;
        144 => msg2.data1;
        0 => mstate[ cpy ];
    } else {
        15 => msg2.data3;
        144 => msg2.data1;
        1 => mstate[ cpy ];
    }
    mout.send( msg2 );
}
Tweet This! submit to reddit Digg! Tags: | no comments | no trackbacks

See also:

Synth Jam - Mar 27
Launchpad Jam Session 2016-06-05
Volca Jam 2014-12-12
volca+bitwig - stepdup
how to create launchpad light effects with chuck

Trackbacks

Comments

Leave a response

Leave a comment