Skip to content

Collectives individual action problems #315

@madskjeldgaard

Description

@madskjeldgaard

Hello

After some confusement about collectives in Modality I had a chat with Alberto Decampo (@adcxyz) on the mailing list and we seem to have discovered a bug with collectives.

My goal was to make a desc file for a touch osc app with xy-faders outputting data sort of like /xy [x] [y]. Using trace, I could see the changes on the fader being received and registered by the desc, but registering individual actions for them did not work. Alberto developed a quickfix that solved this and I am posting it here for reference.

You can see the full thread here: sc user list thread

(
    d = (
        idInfo: "osc app",
        name: \sccontroller1,
        netAddrInfo: (
            recvPort: NetAddr.langPort,
            srcPort: 6666,
            ipAddress: nil
        ),
        deviceType: \phoneApp,
        protocol: \osc,
        collectives: (
                sliders: (
                    oscPath: '/xy/xy1',
                    elements: [ [\sl, \x], [\sl,\y]], // the order in this array determines the order how the message is parsed
                    ioType: \in
                )
            ),
        elementsDesc: (
            elements: [
                // Buttons
                (
                    key: 'bt',
                    shared: (
                        type: 'button',
                        ioType: \in,
                        spec: \but
                    ),
                    elements:[
                        (oscPath: '/xy/rec'),
                        (oscPath: '/xy/play'),
                        (oscPath: '/xy/stop'),
                        (oscPath: '/xy/prev'),
                        (oscPath: '/xy/next')
                    ]
                ),
                // XY Sliders
                (
                    key: 'sl',
                    shared: (
                        elementType: 'slider',
                        ioType: \collectiveIn,
                        spec: \unipolar,
                    ),
                    elements:[
                        (key: \x),
                        (key: \y),
                    ]
                ),

            ]
        )
    );

    m.free; m = MKtl.new(\scc1, d);

    // m.device.updateSrcAddr("192.168.43.1", 60310);

    m.trace;

    /* OSCFunc.trace(true); */
)


m.elAt(\sl); // the slider group
m.trace;
m.gui;
n = NetAddr.localAddr;
// tell m to listen to local osc from SC itself:
m.device.updateSrcAddr(n.hostname, n.port);

// this changes a button value
n.sendMsg('/xy/rec', 1);
n.sendMsg('/xy/rec', 0);

// should change the values in sl1, sl2
n.sendMsg('/xy/xy1', 0.5, 0.5);
n.sendMsg('/xy/xy1', 0.2, 0.8);


// give the sl group a debug post action, 
// could also be used to set two values of something
m.elAt(\sl).action = { "sl group action runs".postln };


// give slider x and y separate example actions for testing
m.elAt(\sl, \x).action = { |sl| "sl X action ...".postln };
m.elAt(\sl, \y).action = { |sl| "sl Y action ...".postln };


/// ... as Modality is ATM, sl group, x, y actions do not run!
n.sendMsg('/xy/xy1', 0.5, 0.5);
n.sendMsg('/xy/xy1', 0.2, 0.8);


/// QUICK AND DIRTY FIX - should really be fixed in Modality !

// tell the collectives action to ...
m.collectivesDict[\sliders].action = { |coll|
	// post debug message for now ...
	"collective 'sliders' action runs".postln;
	// trigger the group action once ...
	m.elAt(\sl).action.value(m.elAt(\sl));
	// and trigger the individual element actions
	coll.do { |elem| elem.action.value(elem) };
};

///// now group ction and indiv elem actions run
// when a simulated osc message comes in:
n.sendMsg('/xy/xy1', 0.5, 0.5);
n.sendMsg('/xy/xy1', 0.2, 0.8);

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions