plugsync~ and step sequencing
Hi!
Im trying to build a drum sequencer in max for live & I´ve encountered a problem when it comes to timing. I want to be able to change the number of steps individually between the different drums. With plugsync~I can get a live.grid running in sync with a defined note division using a patch that I found somewhere here on the forum. But if I want to have it counting to for example 15 instead of 16 in 16th notes, how do I make that happen?
I am not very experienced with max and really new to max for live, any help would be very appreciated!
Here is the part of my patch that I am trying to explain above:
{
"boxes" : [ {
"box" : {
"maxclass" : "live.grid",
"varname" : "live.grid[2]",
"direction_height" : 26.0,
"matrixmode" : 1,
"outlettype" : [ "", "", "", "", "", "" ],
"direction" : 0,
"parameter_enable" : 1,
"numinlets" : 2,
"marker_vertical" : 0,
"id" : "obj-20",
"numoutlets" : 6,
"rows" : 1,
"patching_rect" : [ 277.0, 441.0, 537.0, 20.0 ],
"saved_attribute_attributes" : {
"valueof" : {
"parameter_longname" : "live.grid[2]",
"parameter_shortname" : "live.grid",
"parameter_type" : 3,
"parameter_invisible" : 1
}
}
}
}
, {
"box" : {
"maxclass" : "number",
"style" : "",
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"numinlets" : 1,
"id" : "obj-68",
"numoutlets" : 2,
"patching_rect" : [ 329.0, 205.0, 50.0, 22.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "+ 1",
"style" : "",
"outlettype" : [ "int" ],
"numinlets" : 2,
"id" : "obj-23",
"numoutlets" : 1,
"patching_rect" : [ 277.0, 388.0, 29.5, 22.0 ]
}
}
, {
"box" : {
"maxclass" : "comment",
"text" : "Count/Bar",
"style" : "",
"presentation" : 1,
"presentation_rect" : [ 31.0, 111.0, 56.0, 18.0 ],
"numinlets" : 1,
"fontsize" : 10.0,
"fontname" : "Arial",
"id" : "obj-11",
"numoutlets" : 0,
"patching_rect" : [ 291.0, 332.0, 59.0, 18.0 ]
}
}
, {
"box" : {
"maxclass" : "number",
"style" : "",
"presentation" : 1,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"presentation_rect" : [ 31.0, 127.0, 50.0, 20.0 ],
"numinlets" : 1,
"fontsize" : 10.0,
"fontname" : "Arial Bold",
"id" : "obj-10",
"numoutlets" : 2,
"patching_rect" : [ 277.0, 357.0, 50.0, 20.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "%",
"style" : "",
"outlettype" : [ "int" ],
"numinlets" : 2,
"fontsize" : 10.0,
"fontname" : "Arial Bold",
"id" : "obj-3",
"numoutlets" : 1,
"patching_rect" : [ 277.0, 306.0, 32.5, 20.0 ]
}
}
, {
"box" : {
"maxclass" : "comment",
"text" : "Division",
"style" : "",
"presentation" : 1,
"presentation_rect" : [ 31.0, 31.0, 45.0, 18.0 ],
"numinlets" : 1,
"fontsize" : 10.0,
"fontname" : "Arial",
"id" : "obj-8",
"numoutlets" : 0,
"patching_rect" : [ 288.0, 103.0, 47.0, 18.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "/ 4.",
"style" : "",
"outlettype" : [ "float" ],
"numinlets" : 2,
"fontsize" : 10.0,
"fontname" : "Arial Bold",
"id" : "obj-13",
"numoutlets" : 1,
"patching_rect" : [ 214.0, 165.0, 32.5, 20.0 ]
}
}
, {
"box" : {
"maxclass" : "live.numbox",
"varname" : "live.numbox[11]",
"presentation" : 1,
"outlettype" : [ "", "float" ],
"parameter_enable" : 1,
"presentation_rect" : [ 31.0, 47.0, 36.0, 15.0 ],
"fontface" : 0,
"numinlets" : 1,
"id" : "obj-14",
"numoutlets" : 2,
"patching_rect" : [ 291.0, 124.0, 36.0, 15.0 ],
"saved_attribute_attributes" : {
"valueof" : {
"parameter_longname" : "live.numbox[21]",
"parameter_shortname" : "live.numbox",
"parameter_type" : 1,
"parameter_mmin" : 1.0,
"parameter_mmax" : 128.0,
"parameter_initial_enable" : 1,
"parameter_initial" : [ 1 ],
"parameter_unitstyle" : 0
}
}
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "change",
"style" : "",
"outlettype" : [ "", "int", "int" ],
"numinlets" : 1,
"fontsize" : 10.0,
"fontname" : "Arial Bold",
"id" : "obj-15",
"numoutlets" : 3,
"patching_rect" : [ 200.0, 269.0, 46.0, 20.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "int",
"style" : "",
"outlettype" : [ "int" ],
"numinlets" : 2,
"fontsize" : 10.0,
"fontname" : "Arial Bold",
"id" : "obj-17",
"numoutlets" : 1,
"patching_rect" : [ 200.0, 235.0, 32.5, 20.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "* 1.",
"style" : "",
"outlettype" : [ "float" ],
"numinlets" : 2,
"fontsize" : 10.0,
"fontname" : "Arial Bold",
"id" : "obj-22",
"numoutlets" : 1,
"patching_rect" : [ 200.0, 199.0, 32.5, 20.0 ]
}
}
, {
"box" : {
"maxclass" : "newobj",
"text" : "plugsync~",
"style" : "",
"outlettype" : [ "int", "int", "int", "float", "list", "float", "float", "int", "int" ],
"numinlets" : 1,
"fontsize" : 10.0,
"fontname" : "Arial Bold",
"id" : "obj-18",
"numoutlets" : 9,
"patching_rect" : [ 119.0, 124.0, 127.0, 20.0 ]
}
}
],
"lines" : [ {
"patchline" : {
"source" : [ "obj-10", 0 ],
"destination" : [ "obj-23", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-13", 0 ],
"destination" : [ "obj-22", 1 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-13", 0 ],
"destination" : [ "obj-68", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-14", 0 ],
"destination" : [ "obj-13", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-14", 0 ],
"destination" : [ "obj-3", 1 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-15", 0 ],
"destination" : [ "obj-3", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-17", 0 ],
"destination" : [ "obj-15", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-18", 6 ],
"destination" : [ "obj-22", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-22", 0 ],
"destination" : [ "obj-17", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-3", 0 ],
"destination" : [ "obj-10", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
, {
"patchline" : {
"source" : [ "obj-23", 0 ],
"destination" : [ "obj-20", 0 ],
"hidden" : 0,
"disabled" : 0
}
}
],
"appversion" : {
"major" : 7,
"minor" : 0,
"revision" : 3,
"architecture" : "x64",
"modernui" : 1
}
}
counter might work
The problem I encountered using counter is that I quickly get my different drum parts out of sync when changing the number of steps.
I would like a polyrhythmic step sequencer that when given a new step number waits until the beginning of a new bar & then sets the new value.
Sofar I have not been able to build something that use counters which does not run out of sync when changing the values. I´ve tried using the bar count from plugsync~ to push the new value to the counter & then reset the counter with its fourth inlet but this also results in the the tracks running out of sync. Any ideas?
You could store the division value and trigger at the next 0 from modulo.
Yes, but that will also change the note length, and what I want to do is just change the number of steps. I´ve made this ugly piece of patch that illustrates what I want to accomplish. I think maybe I have a little trouble explaining what it is I want to do. This patch works, but having 32 counters run at the same time just seems like an ugly way to do it. Anyway, what I can achieve this way is having all my tracks in the step sequencer in sync.