View this PageEdit this PageUploads to this PageHistory of this PageTop of the SwikiRecent ChangesSearch the SwikiHelp Guide

MidiSlider

MidiSlider - Similar to CCResponder but the slider is assignesd automatically. Great for people who use multiple patches or multiple copys of the same patch.
MidiSlider {
	classvar ccArray, ccAllocator;
	var cc, function, slider, responder;
	
	
	*initClass {
		ccArray = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15];
		// this are the control numbers for your slider box, use these or enter your own
		ccAllocator = LRUNumberAllocator(0, 16);
	}
	
	*new { arg function;
		var lrnuAlloc, cc;
		lrnuAlloc = ccAllocator.alloc;
		if (lrnuAlloc == nil, {
			"No more free sliders".postln;
			^nil;
		}, {
			cc = ccArray.at(lrnuAlloc);
			^super.newCopyArgs(cc, function ?? {}).alloc;
		});
	}
	
	*slider { arg aSlider;
		var lrnuAlloc, cc;
		lrnuAlloc = ccAllocator.alloc;
		if (lrnuAlloc == nil, {
			"No more free sliders".postln;
			^nil;
		}, {
			cc = ccArray.at(lrnuAlloc);
			^super.newCopyArgs(cc, {}, aSlider).slider;
		});
	}
	
	alloc {
		responder = CCResponder(cc, function);
	}
	
	slider {
		responder = CCResponder(cc, {
			arg val;
			{slider.value_(val / 127).changed; nil}.defer
		
		});
	}
	
	free {
		responder.remove;
		ccAllocator.free(ccArray.atIdentityHash(cc));
	}
}
*************
/*
authors so far:
casey basichis
*/


Link to this Page