initial commit

This commit is contained in:
Kieran McAuliffe 2024-07-31 17:06:34 +02:00
commit 15beba29f2
35 changed files with 235041 additions and 0 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

1
.gitattributes vendored Normal file
View File

@ -0,0 +1 @@
*.wav filter=lfs diff=lfs merge=lfs -text

2
.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
.DS_Store

View File

@ -0,0 +1,921 @@
{
"patcher" : {
"fileversion" : 1,
"appversion" : {
"major" : 8,
"minor" : 6,
"revision" : 2,
"architecture" : "x64",
"modernui" : 1
}
,
"classnamespace" : "box",
"rect" : [ 282.0, 104.0, 865.0, 554.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
"default_fontface" : 0,
"default_fontname" : "Arial",
"gridonopen" : 1,
"gridsize" : [ 15.0, 15.0 ],
"gridsnaponopen" : 1,
"objectsnaponopen" : 1,
"statusbarvisible" : 2,
"toolbarvisible" : 1,
"lefttoolbarpinned" : 0,
"toptoolbarpinned" : 0,
"righttoolbarpinned" : 0,
"bottomtoolbarpinned" : 0,
"toolbars_unpinned_last_save" : 0,
"tallnewobj" : 0,
"boxanimatetime" : 200,
"enablehscroll" : 1,
"enablevscroll" : 1,
"devicewidth" : 0.0,
"description" : "",
"digest" : "",
"tags" : "",
"style" : "",
"subpatcher_template" : "",
"assistshowspatchername" : 0,
"boxes" : [ {
"box" : {
"id" : "obj-55",
"maxclass" : "newobj",
"numinlets" : 3,
"numoutlets" : 3,
"outlettype" : [ "", "", "" ],
"patching_rect" : [ 98.0, 178.0, 205.0, 22.0 ],
"text" : "routepass attenuation melody_scope"
}
}
, {
"box" : {
"id" : "obj-54",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 191.0, 213.0, 103.0, 22.0 ],
"text" : "melody_scope 10"
}
}
, {
"box" : {
"id" : "obj-53",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 189.0, 13.0, 103.0, 22.0 ],
"presentation_linecount" : 2,
"text" : "melody_scope 12"
}
}
, {
"box" : {
"id" : "obj-52",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 98.0, 213.0, 85.0, 22.0 ],
"text" : "attenuation 57"
}
}
, {
"box" : {
"id" : "obj-51",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 98.0, 13.0, 85.0, 22.0 ],
"text" : "attenuation 70"
}
}
, {
"box" : {
"bgmode" : 0,
"border" : 0,
"clickthrough" : 0,
"embed" : 1,
"enablehscroll" : 0,
"enablevscroll" : 0,
"id" : "obj-49",
"lockeddragscroll" : 0,
"lockedsize" : 0,
"maxclass" : "bpatcher",
"numinlets" : 1,
"numoutlets" : 1,
"offset" : [ -42.0, -87.0 ],
"outlettype" : [ "" ],
"patcher" : {
"fileversion" : 1,
"appversion" : {
"major" : 8,
"minor" : 6,
"revision" : 2,
"architecture" : "x64",
"modernui" : 1
}
,
"classnamespace" : "box",
"rect" : [ 59.0, 119.0, 640.0, 480.0 ],
"bglocked" : 0,
"openinpresentation" : 0,
"default_fontsize" : 12.0,
"default_fontface" : 0,
"default_fontname" : "Arial",
"gridonopen" : 1,
"gridsize" : [ 15.0, 15.0 ],
"gridsnaponopen" : 1,
"objectsnaponopen" : 1,
"statusbarvisible" : 2,
"toolbarvisible" : 1,
"lefttoolbarpinned" : 0,
"toptoolbarpinned" : 0,
"righttoolbarpinned" : 0,
"bottomtoolbarpinned" : 0,
"toolbars_unpinned_last_save" : 0,
"tallnewobj" : 0,
"boxanimatetime" : 200,
"enablehscroll" : 1,
"enablevscroll" : 1,
"devicewidth" : 0.0,
"description" : "",
"digest" : "",
"tags" : "",
"style" : "",
"subpatcher_template" : "",
"assistshowspatchername" : 0,
"boxes" : [ {
"box" : {
"comment" : "",
"id" : "obj-6",
"index" : 1,
"maxclass" : "outlet",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 63.5, 337.0, 30.0, 30.0 ]
}
}
, {
"box" : {
"comment" : "",
"id" : "obj-2",
"index" : 1,
"maxclass" : "inlet",
"numinlets" : 0,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 56.0, 21.0, 30.0, 30.0 ]
}
}
, {
"box" : {
"id" : "obj-48",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 511.0, 100.0, 5.0, 88.0 ]
}
}
, {
"box" : {
"id" : "obj-36",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 50.0, 100.0, 5.0, 88.0 ]
}
}
, {
"box" : {
"id" : "obj-35",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 50.0, 183.0, 556.0, 5.0 ]
}
}
, {
"box" : {
"id" : "obj-34",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 50.0, 154.0, 556.0, 5.0 ]
}
}
, {
"box" : {
"id" : "obj-33",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 50.0, 123.0, 556.0, 5.0 ]
}
}
, {
"box" : {
"id" : "obj-32",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 606.0, 100.0, 5.0, 88.0 ]
}
}
, {
"box" : {
"id" : "obj-29",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 338.0, 100.0, 5.0, 88.0 ]
}
}
, {
"box" : {
"id" : "obj-28",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 188.0, 100.0, 5.0, 88.0 ]
}
}
, {
"box" : {
"id" : "obj-27",
"maxclass" : "live.line",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 113.0, 100.0, 5.0, 88.0 ]
}
}
, {
"box" : {
"fontsize" : 16.0,
"id" : "obj-19",
"maxclass" : "live.menu",
"numinlets" : 1,
"numoutlets" : 3,
"outlettype" : [ "", "", "float" ],
"parameter_enable" : 1,
"patching_rect" : [ 116.0, 157.0, 70.0, 23.0 ],
"pictures" : [ "sine.svg", "saw.svg", "square.svg", "up.svg", "updown.svg", "down.svg", "random.svg" ],
"remapsvgcolors" : 1,
"saved_attribute_attributes" : {
"valueof" : {
"parameter_enum" : [ "sine", "saw", "square", "up", "updown", "down", "random" ],
"parameter_initial" : [ 0 ],
"parameter_longname" : "live.tab[1]",
"parameter_mmax" : 6,
"parameter_modmode" : 0,
"parameter_shortname" : "live.tab[1]",
"parameter_type" : 2,
"parameter_unitstyle" : 9
}
}
,
"usepicture" : 1,
"varname" : "live.menu[1]"
}
}
, {
"box" : {
"activebgcolor" : [ 0.839216, 0.866667, 0.898039, 1.0 ],
"id" : "obj-20",
"maxclass" : "live.text",
"mode" : 0,
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "" ],
"parameter_enable" : 1,
"patching_rect" : [ 559.0, 159.0, 19.0, 19.0 ],
"presentation" : 1,
"presentation_rect" : [ 603.0, 81.0, 19.0, 19.0 ],
"saved_attribute_attributes" : {
"activebgcolor" : {
"expression" : ""
}
,
"valueof" : {
"parameter_enum" : [ "val1", "val2" ],
"parameter_invisible" : 2,
"parameter_longname" : "live.text[2]",
"parameter_mmax" : 1,
"parameter_modmode" : 0,
"parameter_shortname" : "live.text",
"parameter_type" : 2
}
}
,
"text" : "-",
"varname" : "live.text[2]"
}
}
, {
"box" : {
"activebgcolor" : [ 0.839216, 0.866667, 0.898039, 1.0 ],
"id" : "obj-21",
"maxclass" : "live.text",
"mode" : 0,
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "" ],
"parameter_enable" : 1,
"patching_rect" : [ 535.0, 159.0, 19.0, 19.0 ],
"presentation" : 1,
"presentation_rect" : [ 579.0, 81.0, 19.0, 19.0 ],
"saved_attribute_attributes" : {
"activebgcolor" : {
"expression" : ""
}
,
"valueof" : {
"parameter_enum" : [ "val1", "val2" ],
"parameter_invisible" : 2,
"parameter_longname" : "live.text[3]",
"parameter_mmax" : 1,
"parameter_modmode" : 0,
"parameter_shortname" : "live.text",
"parameter_type" : 2
}
}
,
"text" : "+",
"varname" : "live.text[3]"
}
}
, {
"box" : {
"format" : 6,
"id" : "obj-22",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 456.0, 157.0, 50.0, 22.0 ]
}
}
, {
"box" : {
"id" : "obj-23",
"items" : "LFO",
"maxclass" : "umenu",
"numinlets" : 1,
"numoutlets" : 3,
"outlettype" : [ "int", "", "" ],
"parameter_enable" : 0,
"patching_rect" : [ 55.0, 157.0, 56.0, 22.0 ]
}
}
, {
"box" : {
"format" : 6,
"id" : "obj-24",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 400.0, 157.0, 50.0, 22.0 ]
}
}
, {
"box" : {
"format" : 6,
"id" : "obj-25",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 343.0, 157.0, 50.0, 22.0 ]
}
}
, {
"box" : {
"id" : "obj-26",
"items" : [ "attenuation", ",", "chordal_weight", ",", "dynamics", ",", "event_length", ",", "event_length_display_style", ",", "eventfulness", ",", "global_transport_active", ",", "harmoniclarity", ",", "instance", ",", "melodic_cohesion", ",", "melody_scope", ",", "metriclarity", ",", "ostinato", ",", "ostinato-buffer", ",", "outset_pulses", ",", "overlap", ",", "pitch_center", ",", "pitch_range", ",", "precision", ",", "pulse_length", ",", "scale", ",", "silent_downbeat", ",", "sorted", ",", "stream", ",", "subdivision", ",", "tempo", ",", "timesig_denominator", ",", "timesig_numerator", ",", "tonic_pitch", ",", "use_transport" ],
"maxclass" : "umenu",
"numinlets" : 1,
"numoutlets" : 3,
"outlettype" : [ "int", "", "" ],
"parameter_enable" : 0,
"patching_rect" : [ 192.0, 157.0, 144.0, 22.0 ]
}
}
, {
"box" : {
"fontsize" : 16.0,
"id" : "obj-7",
"maxclass" : "live.menu",
"numinlets" : 1,
"numoutlets" : 3,
"outlettype" : [ "", "", "float" ],
"parameter_enable" : 1,
"patching_rect" : [ 116.0, 128.0, 70.0, 23.0 ],
"pictures" : [ "sine.svg", "saw.svg", "square.svg", "up.svg", "updown.svg", "down.svg", "random.svg" ],
"remapsvgcolors" : 1,
"saved_attribute_attributes" : {
"valueof" : {
"parameter_enum" : [ "sine", "saw", "square", "up", "updown", "down", "random" ],
"parameter_initial" : [ 0 ],
"parameter_longname" : "live.tab[4]",
"parameter_mmax" : 6,
"parameter_modmode" : 0,
"parameter_shortname" : "live.tab[1]",
"parameter_type" : 2,
"parameter_unitstyle" : 9
}
}
,
"usepicture" : 1,
"varname" : "live.menu"
}
}
, {
"box" : {
"id" : "obj-17",
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 117.0, 101.0, 65.0, 20.0 ],
"text" : "Function"
}
}
, {
"box" : {
"id" : "obj-16",
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 511.0, 101.0, 95.0, 20.0 ],
"text" : "Add/remove line"
}
}
, {
"box" : {
"activebgcolor" : [ 0.839216, 0.866667, 0.898039, 1.0 ],
"id" : "obj-80",
"maxclass" : "live.text",
"mode" : 0,
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "" ],
"parameter_enable" : 1,
"patching_rect" : [ 559.0, 130.0, 19.0, 19.0 ],
"presentation" : 1,
"presentation_rect" : [ 242.5, 140.0, 19.0, 19.0 ],
"saved_attribute_attributes" : {
"activebgcolor" : {
"expression" : ""
}
,
"valueof" : {
"parameter_enum" : [ "val1", "val2" ],
"parameter_invisible" : 2,
"parameter_longname" : "live.text[1]",
"parameter_mmax" : 1,
"parameter_modmode" : 0,
"parameter_shortname" : "live.text",
"parameter_type" : 2
}
}
,
"text" : "-",
"varname" : "live.text"
}
}
, {
"box" : {
"activebgcolor" : [ 0.839216, 0.866667, 0.898039, 1.0 ],
"id" : "obj-79",
"maxclass" : "live.text",
"mode" : 0,
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "" ],
"parameter_enable" : 1,
"patching_rect" : [ 535.0, 130.0, 19.0, 19.0 ],
"presentation" : 1,
"presentation_rect" : [ 216.5, 140.0, 19.0, 19.0 ],
"saved_attribute_attributes" : {
"activebgcolor" : {
"expression" : ""
}
,
"valueof" : {
"parameter_enum" : [ "val1", "val2" ],
"parameter_invisible" : 2,
"parameter_longname" : "live.text",
"parameter_mmax" : 1,
"parameter_modmode" : 0,
"parameter_shortname" : "live.text",
"parameter_type" : 2
}
}
,
"text" : "+",
"varname" : "live.text[1]"
}
}
, {
"box" : {
"format" : 6,
"id" : "obj-14",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 456.0, 128.0, 50.0, 22.0 ]
}
}
, {
"box" : {
"id" : "obj-11",
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 382.0, 101.0, 86.0, 20.0 ],
"text" : "Values (f, a, p)"
}
}
, {
"box" : {
"id" : "obj-10",
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 193.0, 101.0, 65.0, 20.0 ],
"text" : "Parameter"
}
}
, {
"box" : {
"id" : "obj-9",
"maxclass" : "comment",
"numinlets" : 1,
"numoutlets" : 0,
"patching_rect" : [ 56.0, 101.0, 45.0, 20.0 ],
"text" : "Mode"
}
}
, {
"box" : {
"id" : "obj-5",
"items" : "LFO",
"maxclass" : "umenu",
"numinlets" : 1,
"numoutlets" : 3,
"outlettype" : [ "int", "", "" ],
"parameter_enable" : 0,
"patching_rect" : [ 55.0, 128.0, 56.0, 22.0 ]
}
}
, {
"box" : {
"format" : 6,
"id" : "obj-4",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 400.0, 128.0, 50.0, 22.0 ]
}
}
, {
"box" : {
"format" : 6,
"id" : "obj-3",
"maxclass" : "flonum",
"numinlets" : 1,
"numoutlets" : 2,
"outlettype" : [ "", "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 343.0, 128.0, 50.0, 22.0 ]
}
}
, {
"box" : {
"id" : "obj-1",
"items" : [ "attenuation", ",", "chordal_weight", ",", "dynamics", ",", "event_length", ",", "event_length_display_style", ",", "eventfulness", ",", "global_transport_active", ",", "harmoniclarity", ",", "instance", ",", "melodic_cohesion", ",", "melody_scope", ",", "metriclarity", ",", "ostinato", ",", "ostinato-buffer", ",", "outset_pulses", ",", "overlap", ",", "pitch_center", ",", "pitch_range", ",", "precision", ",", "pulse_length", ",", "scale", ",", "silent_downbeat", ",", "sorted", ",", "stream", ",", "subdivision", ",", "tempo", ",", "timesig_denominator", ",", "timesig_numerator", ",", "tonic_pitch", ",", "use_transport" ],
"maxclass" : "umenu",
"numinlets" : 1,
"numoutlets" : 3,
"outlettype" : [ "int", "", "" ],
"parameter_enable" : 0,
"patching_rect" : [ 192.0, 128.0, 144.0, 22.0 ]
}
}
],
"lines" : [ ]
}
,
"patching_rect" : [ 98.0, 50.0, 578.0, 110.0 ],
"viewvisibility" : 1
}
}
, {
"box" : {
"id" : "obj-47",
"maxclass" : "button",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "bang" ],
"parameter_enable" : 0,
"patching_rect" : [ 380.0, 401.0, 24.0, 24.0 ]
}
}
, {
"box" : {
"id" : "obj-45",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 236.0, 524.0, 427.0, 22.0 ]
}
}
, {
"box" : {
"id" : "obj-43",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 2,
"outlettype" : [ "", "" ],
"patching_rect" : [ 426.0, 432.0, 47.0, 22.0 ],
"text" : "zl.nth 2"
}
}
, {
"box" : {
"id" : "obj-42",
"maxclass" : "newobj",
"numinlets" : 1,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 426.0, 395.0, 147.0, 22.0 ],
"text" : "fromsymbol @separator ::"
}
}
, {
"box" : {
"id" : "obj-41",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 2,
"outlettype" : [ "", "" ],
"patching_rect" : [ 426.0, 359.0, 47.0, 22.0 ],
"text" : "zl.iter 1"
}
}
, {
"box" : {
"id" : "obj-40",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 2,
"outlettype" : [ "", "" ],
"patching_rect" : [ 426.0, 473.0, 68.0, 22.0 ],
"text" : "zl.group 30"
}
}
, {
"box" : {
"id" : "obj-39",
"maxclass" : "message",
"numinlets" : 2,
"numoutlets" : 1,
"outlettype" : [ "" ],
"patching_rect" : [ 405.0, 286.0, 50.0, 22.0 ],
"text" : "getkeys"
}
}
, {
"box" : {
"id" : "obj-37",
"maxclass" : "newobj",
"numinlets" : 2,
"numoutlets" : 5,
"outlettype" : [ "dictionary", "", "", "", "" ],
"patching_rect" : [ 405.0, 318.0, 61.0, 22.0 ],
"saved_object_attributes" : {
"embed" : 0,
"legacy" : 0,
"parameter_enable" : 0,
"parameter_mappable" : 0
}
,
"text" : "dict"
}
}
],
"lines" : [ {
"patchline" : {
"destination" : [ "obj-41", 0 ],
"source" : [ "obj-37", 2 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-37", 0 ],
"source" : [ "obj-39", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-45", 1 ],
"source" : [ "obj-40", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-42", 0 ],
"source" : [ "obj-41", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-43", 0 ],
"source" : [ "obj-42", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-40", 0 ],
"source" : [ "obj-43", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-40", 0 ],
"source" : [ "obj-47", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-55", 0 ],
"source" : [ "obj-49", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-49", 0 ],
"source" : [ "obj-51", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-49", 0 ],
"source" : [ "obj-53", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-52", 0 ],
"source" : [ "obj-55", 0 ]
}
}
, {
"patchline" : {
"destination" : [ "obj-54", 0 ],
"source" : [ "obj-55", 1 ]
}
}
],
"parameters" : {
"obj-49::obj-19" : [ "live.tab[1]", "live.tab[1]", 0 ],
"obj-49::obj-20" : [ "live.text[2]", "live.text", 0 ],
"obj-49::obj-21" : [ "live.text[3]", "live.text", 0 ],
"obj-49::obj-7" : [ "live.tab[4]", "live.tab[1]", 0 ],
"obj-49::obj-79" : [ "live.text", "live.text", 0 ],
"obj-49::obj-80" : [ "live.text[1]", "live.text", 0 ],
"parameterbanks" : {
"0" : {
"index" : 0,
"name" : "",
"parameters" : [ "-", "-", "-", "-", "-", "-", "-", "-" ]
}
}
,
"inherited_shortname" : 1
}
,
"dependency_cache" : [ {
"name" : "down.svg",
"bootpath" : "C74:/media/max/picts/m4l-picts",
"type" : "svg",
"implicit" : 1
}
, {
"name" : "random.svg",
"bootpath" : "C74:/media/max/picts/m4l-picts",
"type" : "svg",
"implicit" : 1
}
, {
"name" : "saw.svg",
"bootpath" : "C74:/media/max/picts/m4l-picts",
"type" : "svg",
"implicit" : 1
}
, {
"name" : "sine.svg",
"bootpath" : "C74:/media/max/picts/m4l-picts",
"type" : "svg",
"implicit" : 1
}
, {
"name" : "square.svg",
"bootpath" : "C74:/media/max/picts/m4l-picts",
"type" : "svg",
"implicit" : 1
}
, {
"name" : "up.svg",
"bootpath" : "C74:/media/max/picts/m4l-picts",
"type" : "svg",
"implicit" : 1
}
, {
"name" : "updown.svg",
"bootpath" : "C74:/media/max/picts/m4l-picts",
"type" : "svg",
"implicit" : 1
}
],
"autosave" : 0
}
}

8260
HSSPieces.json Normal file

File diff suppressed because it is too large Load Diff

7182
HSSPiecesNN.json Normal file

File diff suppressed because it is too large Load Diff

16682
Presets/DefaultSetting.json Normal file

File diff suppressed because it is too large Load Diff

17187
Presets/Georg-2024-05-23.json Normal file

File diff suppressed because it is too large Load Diff

16668
Presets/Georg-2024-06-12.json Normal file

File diff suppressed because it is too large Load Diff

6722
Presets/GeorgNetworkFile.txt Normal file

File diff suppressed because it is too large Load Diff

26892
Presets/GeorgNetworkFile2.txt Normal file

File diff suppressed because it is too large Load Diff

16
README.md Normal file
View File

@ -0,0 +1,16 @@
# healing-soundscapes
A repository of patches for the intelligent speaker system to be used in hospital waiting areas.
The patches require the installation of [drawsocket](https://github.com/drawsocket) and [MaxScore](http://computermusicnotation.com)
<img width="1624" alt="image" src="https://github.com/HfMT-ZM4/healing-soundscapes/assets/17442406/0251cad9-4f36-44f2-9e85-ed5c2500f3e2">
Instructions:
1. When running drawsocket the first time, install resources by clicking on script npm install **drawsocket**
2. Start drawsocket server by clicking on **script start**
3. Dump html page by clicking on the button in the upper left-hand corner
4. Open the browser interface by clicking on **\[p browser\]** or navigating to the URL given in the Max window in an external web browser or device (add /1 after the URL, e.g. 192.168.178.2:3002/1)
5. Open your soundbank or create one
6. Set the virtual sound sources to the desired positions
7. Create a number of presets for your piece after selecting DJster parameter settings and
8. Save presets to disk

82018
create_webinterface.maxpat Normal file

File diff suppressed because it is too large Load Diff

744
djster_webcontrol.js Normal file
View File

@ -0,0 +1,744 @@
inlets = 2;
outlets = 2;
var pieces = ["Warm Rain in the Morning", "Thunderstorm in the Evening"];
var modes = ["Selected Piece", "Playlist"];
var instruments = ["none", "Bell-1.instr", "Bell-2.instr", "Hi_Voweler.instr", "Dreamers.instr", "Kalimbell.instr", "Wave_4.instr", "Dark_Monkey.instr", "Digi_Vocal.instr", "Mini_Moog.instr", "Synth_1980.instr", "E-Pad.instr", "Equinox.instr", "Galaxis.instr", "Venus_Pad.instr", "Celeste.instr", "percussion_glockenspiel_Glockenspiel-beaters_ordinario.instr", "Marimba.instr", "Stopped_Piano.instr", "Cymbales_Antiques.instr", "FretSound.instr", "Bandoneon.instr"];
var scales = ["Major", "Minor", "Dorian", "Mixolydian", "Lydian", "Phrygian", "Locrian", "Whole Tone", "Half-whole Dim.", "Whole-half Dim.", "Minor Blues", "Minor Pentatonic", "Major Pentatonic", "Harmonic Minor", "Harmonic Major", "Dorian #4", "Phrygian Dominant", "Melodic Minor", "Lydian Augmented", "Lydian Dominant", "Super Locrian", "8-Tone Spanish", "Bhairav", "Hungarian Minor", "Hirajoshi", "In-sen", "Iwato", "Kumoi", "Pelog Selisir", "Pelog Tembung", "Messiaen 3", "Messiaen 4", "Messiaen 5", "Messiaen 6", "Messiaen 7", "Chromatic"];
var meters = ["1", "2", "3", "2 2", "2+3", "3+2", "2 3", "3 2", "2+2+3", "2+3+2", "3+2+2", "2 2 2", "2+3+3", "3+2+3", "3+3+2", "3 3", "2 5", "11", "3 2 2", "2 3 2", "2 2 3"];
var css = [];
var elements = [];
var body = [];
var svg = [];
var html = {
"*" : [{
"key" : "css",
"val" : css
},
{
"key" : "html",
"val" : elements
},
{
"key" : "svg",
"val" : svg
},
{
"key" : "function",
"val" : body
}]
};
var dict = new Dict;
var checkboxes = {};
for (var i = 0; i < 5; i++) {
checkboxes[i] = {};
if (i == 0) checkboxes[i]["play"] = {};
else {
checkboxes[i]["stream"] = {};
checkboxes[i]["sorted"] = {};
checkboxes[i]["overlap"] = {};
}
}
var offset = 128;
var active = "royalblue";
var nonactive = "lightsteelblue";
var alert = "red";
var textcolor = "#737373";
var background = "ivory";
function setInstruments()
{
instruments = arrayfromargs(arguments);
bang();
}
function bang()
{
css.push({
"selector" : ".menu",
"props" : {
"background-color" : background,
"border" : "1px solid " + active,
"color" : active,
"padding" : "5px 5px",
"text-align" : "center",
"display" : "inline-block",
"font-size" : "12px",
"margin" : "4px 2px"
}
});
css.push({
"selector" : ".but",
"props" : {
"background-color" : background,
"border" : "1px solid " + active,
"color" : active,
"padding" : "4px 0",
"text-align" : "center",
"display" : "inline-block",
"font-size" : "11px",
"margin" : "4px 0px",
"width" : "20vw"
}
});
css.push({
"selector" : ".toggle",
"props" : {
"background-color" : background,
"border" : "1px solid " + active,
"color" : active,
"padding" : "4px 7.8px",
"margin" : "4px 0px"
}
});
css.push({
"selector" : ".slider",
"props" : {
"-webkit-appearance" : "none",
"height" : "6px",
"border-radius" : "6px",
"background" : "#737373",
"outline" : "none",
"opacity" : 0.7,
"-webkit-transition" : ".2s",
"transition" : "opacity .2s"
}
});
css.push({
"selector" : ".slider:hover",
"props" : {
"opacity" : 1
}
});
css.push({
"selector" : ".slider::-webkit-slider-thumb",
"props" : {
"-webkit-appearance" : "none",
"appearance" : "none",
"width" : "20px",
"height" : "20px",
"border-radius" : "50%",
"background" : active
}
});
svg.push({
"new" : "rect",
"id" : "background",
"x" : 0,
"y" : 0,
"width" : "400px",//viewport width of iphone 8; iPhone 5: 320px
"height" : "667px",//viewport height of iphone 8; iPhone 5: 568px
"fill" : background,
});
//elements = [];
addButton("forms", "basic", "Basic Mode", "color:" + active, "document.getElementById('basicDIV').style.display='block';document.getElementById('expertDIV').style.display='none';document.getElementById('roomDIV').style.display='none';document.getElementById('spat').style.display='none';document.getElementById('systemDIV').style.display='none';document.getElementById('manualDIV').style.display='none';document.getElementById('basic').style['color']='" + active + "';document.getElementById('expert').style['color']='" + nonactive + "';document.getElementById('room').style['color']='" + nonactive + "';document.getElementById('system').style['color']='" + nonactive + "';document.getElementById('manual').style['color']='" + nonactive + "';");
addButton("forms", "expert", "Expert Mode", "color:" + nonactive, "document.getElementById('basicDIV').style.display='none';document.getElementById('expertDIV').style.display='block';document.getElementById('roomDIV').style.display='none';document.getElementById('spat').style.display='none';document.getElementById('systemDIV').style.display='none';document.getElementById('manualDIV').style.display='none';document.getElementById('basic').style['color']='" + nonactive + "';document.getElementById('expert').style['color']='" + active + "';document.getElementById('room').style['color']='" + nonactive + "';document.getElementById('system').style['color']='" + nonactive + "';document.getElementById('manual').style['color']='" + nonactive + "';");
addButton("forms", "room", "Room Settings", "width:24vw;color:" + nonactive, "document.getElementById('basicDIV').style.display='none';document.getElementById('expertDIV').style.display='none';document.getElementById('roomDIV').style.display='block';document.getElementById('spat').style.display='block';document.getElementById('systemDIV').style.display='none';document.getElementById('manualDIV').style.display='none';document.getElementById('basic').style['color']='" + nonactive + "';document.getElementById('expert').style['color']='" + nonactive + "';document.getElementById('room').style['color']='" + active + "';document.getElementById('system').style['color']='" + nonactive + "';document.getElementById('manual').style['color']='" + nonactive + "';");
addButton("forms", "system", "System", "width:18vw;color:" + nonactive, "document.getElementById('basicDIV').style.display='none';document.getElementById('expertDIV').style.display='none';document.getElementById('roomDIV').style.display='none';document.getElementById('spat').style.display='none';document.getElementById('systemDIV').style.display='block';document.getElementById('manualDIV').style.display='none';document.getElementById('basic').style['bcolor']='" + nonactive + "';document.getElementById('expert').style['color']='" + nonactive + "';document.getElementById('room').style['color']='" + nonactive + "';document.getElementById('system').style['color']='" + active + "';document.getElementById('manual').style['color']='" + nonactive + "';");
addButton("forms", "manual", "Manual", "width:18vw;color:" + nonactive, "document.getElementById('basicDIV').style.display='none';document.getElementById('expertDIV').style.display='none';document.getElementById('roomDIV').style.display='none';document.getElementById('spat').style.display='none';document.getElementById('systemDIV').style.display='none';document.getElementById('manualDIV').style.display='block';document.getElementById('basic').style['color']='" + nonactive + "';document.getElementById('expert').style['color']='" + nonactive + "';document.getElementById('room').style['color']='" + nonactive + "';document.getElementById('system').style['color']='" + nonactive + "';document.getElementById('manual').style['color']='" + active + "';");
addDiv("forms", "basicDIV", "display:block");
addDiv("forms", "expertDIV", "display:none");
addDiv("forms", "roomDIV", "display:none");
addDiv("forms", "systemDIV", "display:none");
addDiv("forms", "manualDIV", "display:none");
addDiv("expertDIV", "player0", "display:block");
addDiv("expertDIV", "player1", "display:none");
addDiv("expertDIV", "player2", "display:none");
addDiv("expertDIV", "player3", "display:none");
/*
elements.push(
{
"new" : "p",
"parent" : "basicDIV",
"id" : "welcome",
"text" : "lz Musical Soundscape Intervention",
"style" : {
"top" : "-10px",
"left" : "10px",
"font-family" : "Arial",
"margin-left" : "10px"
}
});
*/
addButton("expertDIV", "p0", "Player 1", "width:24.9vw;color:" + active, "document.getElementById('p0').style['color']='" + active + "';document.getElementById('p1').style['color']='" + nonactive + "';document.getElementById('p2').style['color']='" + nonactive + "';document.getElementById('p3').style['color']='" + nonactive + "';document.getElementById('player0').style.display='block';document.getElementById('player1').style.display='none';document.getElementById('player2').style.display='none';document.getElementById('player3').style.display='none';");
addButton("expertDIV", "p1", "Player 2", "width:24.9vw;color:" + nonactive, "document.getElementById('p0').style['color']='" + nonactive + "';document.getElementById('p1').style['color']='" + active + "';document.getElementById('p2').style['color']='" + nonactive + "';document.getElementById('p3').style['color']='" + nonactive + "';document.getElementById('player0').style.display='none';document.getElementById('player1').style.display='block';document.getElementById('player2').style.display='none';document.getElementById('player3').style.display='none';");
addButton("expertDIV", "p2", "Player 3", "width:24.9vw;color:" + nonactive, "document.getElementById('p0').style['color']='" + nonactive + "';document.getElementById('p1').style['color']='" + nonactive + "';document.getElementById('p2').style['color']='" + active + "';document.getElementById('p3').style['color']='" + nonactive + "';document.getElementById('player0').style.display='none';document.getElementById('player1').style.display='none';document.getElementById('player2').style.display='block';document.getElementById('player3').style.display='none';");
addButton("expertDIV", "p3", "Player 4", "width:24.9vw;color:" + nonactive, "document.getElementById('p0').style['color']='" + nonactive + "';document.getElementById('p1').style['color']='" + nonactive + "';document.getElementById('p2').style['color']='" + nonactive + "';document.getElementById('p3').style['color']='" + active + "';document.getElementById('player0').style.display='none';document.getElementById('player1').style.display='none';document.getElementById('player2').style.display='none';document.getElementById('player3').style.display='block';");
addMenu(-1, "basicDIV", "Piece", "piece", 36, 0, pieces, "wide");
addMenu(-1, "basicDIV", "Playing Mode", "mode", 66, 0, modes, "wide");
addCheckbox(-1, "basicDIV", "Play", "play", 96, 0, "left");
addSlider(-1, "basicDIV", "Tempo", "tempo", 0, [20, 160], 1, 60, "this.value", "this.value");
addSlider(-1, "basicDIV", "Duration", "duration", 1, [0, 100], 1, 100, "this.value", "this.value");
addSlider(-1, "basicDIV", "Silence", "silence", 2, [0, 100], 1, 100, "this.value", "this.value");
for (var i = 0; i < 4; i++) {
var j = 0;
addMenu(i, "player" + i, "Instrument", "instrument", 36, 0, instruments, "narrow");
addMenu(i, "player" + i, "Scale", "scale", 66, 0, scales, "narrow");
addMenu(i, "player" + i, "Meter", "meter", 96, 11, meters, "narrow");
addCheckbox(i, "player" + i, "On", "stream", 36, 0, "right");
addCheckbox(i, "player" + i, "Sorted", "sorted", 66, 0, "right");
addCheckbox(i, "player" + i, "Overlap", "overlap", 96, 0, "right");
addSlider(i, "player" + i, "Outset Pulses", "outset_pulses", j++, [1, 16], 1, 1, "this.value", "this.value");
addSlider(i, "player" + i, "Eventfulness", "eventfulness", j++, [0, 100], 1, 100, "this.value", "this.value");
addSlider(i, "player" + i, "Event Length", "event_length", j++, [5, 100], 1, 100, "this.value", "this.value");
addSlider(i, "player" + i, "Metriclarity", "metriclarity", j++, [0, 100], 1, 100, "this.value", "this.value");
addSlider(i, "player" + i, "Harmoniclarity", "harmoniclarity", j++, [0, 100], 1, 50, "this.value", "this.value");
addSlider(i, "player" + i, "Chordal Weight", "chordal_weight", j++, [1, 5], 1, 1, "this.value", "this.value");
addSlider(i, "player" + i, "Mel. Cohesion", "melodic_cohesion", j++, [-100, 100], 1, 50, "this.value", "this.value");
addSlider(i, "player" + i, "Melody Scope", "melody_scope", j++, [0, 36], 1, 7, "this.value", "this.value");
addSlider(i, "player" + i, "Tonic Pitch", "tonic_pitch", j++, [12, 96], 1, 36, "['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'][Number(this.value) % 12] + (parseInt((this.value) / 12) - 2)", "this.value");
addSlider(i, "player" + i, "Pitch Center", "pitch_center", j++, [12, 96], 1, 60, "['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'][Number(this.value) % 12] + (parseInt((this.value) / 12) - 2)", "this.value");
addSlider(i, "player" + i, "Pitch Range", "pitch_range", j++, [0, 36], 1, 7, "this.value", "this.value");
addSlider(i, "player" + i, "Dynamics", "dynamics", j++, [0, 127], 1, 64, "this.value", "this.value");
addSlider(i, "player" + i, "Attenuation", "attenuation", j++, [0, 100], 1, 15, "this.value", "this.value");
}
createSpatBox();
addSlider(-1, "roomDIV", "Gain (dB)", "gain", 2, [-70, 6], 1, -10, "this.value", "this.value");
addSlider(-1, "roomDIV", "Room Size", "roomsize", 3, [1, 300], 1, 75, "this.value", "this.value");//
addSlider(-1, "roomDIV", "Rev. Time (ms)", "amount", 4, [0.5, 15], 0.1, 11, "this.value", "this.value");//
addSlider(-1, "roomDIV", "Spread", "spread", 5, [0, 100], 1, 23, "this.value", "this.value");//
addSlider(-1, "roomDIV", "Bandwidth", "bandwidth", 6, [0, 100], 1, 50, "this.value", "this.value"); //50
addSlider(-1, "roomDIV", "Damping", "damping", 7, [0, 100], 1, 70, "this.value", "this.value");//
addSlider(-1, "roomDIV", "Early", "early", 8, [0, 100], 1, 25, "this.value", "this.value");//
addSlider(-1, "roomDIV", "Tail", "tail", 9, [0, 100], 1, 25, "this.value", "this.value");//
addSlider(-1, "roomDIV", "Dry", "dry", 10, [0, 100], 1, 100, "this.value", "this.value");//
elements.push(
{
"new" : "h2",
"parent" : "systemDIV",
"id" : "updateheader",
"text" : "Updates",
"style" : {
"left" : "10px",
"font-family" : "Arial",
"margin-left" : "10px"
}
});
elements.push(
{
"new" : "p",
"parent" : "systemDIV",
"id" : "update",
"text" : "Check for a new software version. This requires an active Internet connection. Please refer to manual for further instructions.",
"style" : {
"left" : "10px",
"font-family" : "Arial",
"font-size" : 12,
"margin-left" : "10px"
}
});
addButton("systemDIV", "versionbutton", "Check for New Version", "width:125px;background-color:" + nonactive + ";margin-left:125px;", "none");
elements.push(
{
"new" : "h2",
"parent" : "systemDIV",
"id" : "shutdownheader",
"text" : "Shut Down",
"style" : {
"left" : "10px",
"font-family" : "Arial",
"margin-left" : "10px"
}
});
elements.push(
{
"new" : "p",
"parent" : "systemDIV",
"id" : "shutdown",
"text" : "Shutting the system down, will require you to unplug and replug the speakers before they can be operated again.",
"style" : {
"left" : "10px",
"font-family" : "Arial",
"font-size" : 12,
"margin-left" : "10px"
}
});
addButton("systemDIV", "cancelbutton", "Cancel", "background-color:" + nonactive + ";margin-left:20vw;", "document.getElementById('basicDIV').style.display='block';document.getElementById('expertDIV').style.display='none';document.getElementById('roomDIV').style.display='none';document.getElementById('spat').style.display='none';document.getElementById('systemDIV').style.display='none';document.getElementById('manualDIV').style.display='none';document.getElementById('basic').style['background-color']='" + active + "';document.getElementById('expert').style['background-color']='" + nonactive + "';document.getElementById('room').style['background-color']='" + nonactive + "';document.getElementById('system').style['background-color']='" + nonactive + "';document.getElementById('manual').style['background-color']='" + nonactive + "';");
addButton("systemDIV", "proceedbutton", "Shut Down", "background-color:" + alert + ";margin-left:15vw;", "drawsocket.send({system: {shutdown : true}})");
elements.push(
{
"new" : "iframe",
"parent" : "manualDIV",
"id" : "manualdoc",
"style" : {
"position" : "absolute",
"top" : "0px",
"left" : "0px",
"width" : "100vw",
"height" : "100vh"
},
"src" : "public/manual.html"
});
dict.parse(JSON.stringify(html));
outlet(0, "dictionary", dict.name);
outlet(1, "done");
}
function addDiv(parent, id, style)
{
var obj = {
"parent" : parent,
"new" : "div",
"id" : id
};
if (style != null) {
obj.style = {};
var properties = style.split(";");
for (var i = 0; i < properties.length; i++){
obj.style[properties[i].split(":")[0]] = properties[i].split(":")[1];
}
}
elements.push(obj);
}
function addButton(parent, id, text, style, onclick)
{
var obj = {
"parent" : parent,
"id" : id,
"new" : "button",
"text" : text,
"class" : "but",
"onclick" : onclick
};
if (style != null) {
obj.style = {};
var properties = style.split(";");
for (var i = 0; i < properties.length; i++){
obj.style[properties[i].split(":")[0]] = properties[i].split(":")[1];
}
}
elements.push(obj);
}
function addSlider(index, parent, name, id, position, range, step, value, _out, _in)
{
switch (id) {
case "tonic_pitch" :
case "pitch_center" :
value = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'][value % 12] + (parseInt((value) / 12) - 2);
break;
}
var obj = [{
"parent" : parent,
"new" : "label",
"for" : id + "_" + index,
"id" : id + "-label" + "_" + index,
"text" : name + ":",
"style" : {
"position" : "absolute",
"top" : (offset - 1 + position * 30) + "px",
"left" : "10px",
"width" : "160px",
"font-family" : "Arial",
"font-size" : 10,
"color" : textcolor
}
},
{
"parent" : parent,
"new" : "input",
"type" : "text",
"id" : id + "_num" + "_" + index,
"name" : id + "_num" + "_" + index,
"size" : 10,
"value" : value,
"disabled" : true,
"style" : {
"position" : "absolute",
"top" : (offset + position * 30) + "px",
"left" : "320px",
"width" : "30px",
"color" : textcolor
}
},
{
"parent" : parent,
"new" : "input",
"type" : "range",
"id" : id + "_" + index,
"name" : id + "_" + index,
"class" : "slider",
"min" : range[0],
"max" : range[1],
"value" : value,
"step" : step,
"style" : {
"position" : "absolute",
"top" : (offset + 5 + position * 30) + "px",
"left" : "135px",
"width" : "170px"
},
"oninput" : "[drawsocket.send({" + "djster" + ": {player: " + (index + 1) + ", " + id + ": " + _in + "}}), drawsocket.input({ key : 'html', val : { id : '" + id + "_num" + "_" + index + "', value : " + _out + "}})]"
}];
var obj2 = {
"id" : id + "_value" + "_" + index,
"args" : "v",
"body" : "document.getElementById('" + id + "_" + index + "').value = v;document.getElementById('" + id + "_num" + "_" + index + "').value = v"
};
elements.push(obj[0]);
elements.push(obj[1]);
elements.push(obj[2]);
body.push(obj2);
}
function addMenu(index, parent, name, id, position, value, array, type)
{
var width = (type == "wide") ? 180 : 90;
child = [];
for (var i = 0; i < array.length; i++) {
var id2 = "_" + array[i].replace(/#|\.|\s+/g, '_').replace(/\+/g, '-').toLowerCase() + "_" + index;
if (i != value) {
child.push({
"new" : "option",
"id" : id2,
"value" : array[i],
"text" : array[i]
});
}
else {
child.push({
"new" : "option",
"id" : id2,
"value" : array[i],
"selected" : true,
"text" : array[i]
});
}
}
var obj = [{
"parent" : parent,
"new" : "label",
"for" : id + "_" + index,
"id" : id + "-label" + "_" + index,
"text" : name + ":",
"style" : {
"position" : "absolute",
"top" : position + "px",
"left" : "10px",
"width" : "120px",
"font-family" : "Arial",
"font-size" : 10,
"color" : textcolor
}
}
, {
"parent" : parent,
"new" : "select",
"id" : id + "_" + index,
"name" : id + "_" + index,
"class" : "menu",
"child" : child,
"style" : {
"position" : "absolute",
"top" : position - 6 + "px",
"left" : "135px",
"width" : width + "px"
}
,
"oninput" : "drawsocket.send({" + "djster" + ": {player: " + (index + 1) + ", " + id + ": this.value}})"
}
];
elements.push(obj[0]);
elements.push(obj[1]);
}
function addCheckbox(index, parent, name, id, position, checked, type)
{
var left = (type == "left") ? 10 : 252;
var leftoffset = (type == "left") ? 126 : 85;
checkboxes[index + 1][id].name = name;
checkboxes[index + 1][id].pos = [left + leftoffset, position - 2];
checkboxes[index + 1][id].parent = parent;
var obj = [{
"parent" : parent,
"new" : "label",
"for" : id + "_" + index,
"id" : id + "-label" + "_" + index,
"text" : name + ":",
"style" : {
"position" : "absolute",
"top" : position + "px",
"left" : left + "px",
"width" : "80px",
"font-family" : "Arial",
"font-size" : 10,
"color" : textcolor
}
},
{
"parent" : parent,
"new" : "input",
"type" : "checkbox",
"class" : "toggle",
"id" : id + "_" + index,
"name" : id + "_" + index,
"value" : checked,
"style" : {
"position" : "absolute",
"top" : position - 2 + "px",
"left" : left + leftoffset + "px",
"border" : "none",
"width" : "20px",
"height" : "20px"
},
"oninput" : "drawsocket.send({" + "djster" + ": {player: " + (index + 1) + ", " + id + ": this.checked}})"
}];
elements.push(obj[0]);
elements.push(obj[1]);
}
function createSpatBox()
{
svg.push({
"parent" : "defs",
"new" : "path",
"id" : "speaker",
"fill" : textcolor,
"d" : "M206.2,146.2c1.4,0,2.6,1.2,2.6,2.6c0,1.4-1.2,2.6-2.6,2.6s-2.6-1.2-2.6-2.6C203.6,147.4,204.8,146.2,206.2,146.2z M206.2,141.3c-4.2,0-7.7,3.4-7.7,7.7c0,4.2,3.4,7.7,7.7,7.7c4.2,0,7.7-3.4,7.7-7.7C213.9,144.8,210.4,141.3,206.2,141.3z M206.2,134.4c8,0,14.6,6.5,14.6,14.6c0,8-6.5,14.6-14.6,14.6c-8,0-14.6-6.5-14.6-14.6C191.6,141,198.2,134.4,206.2,134.4z M206.2,117.5c1.4,0,2.6,1.2,2.6,2.6c0,1.4-1.2,2.6-2.6,2.6s-2.6-1.2-2.6-2.6C203.6,118.7,204.8,117.5,206.2,117.5z M206.2,114c-3.4,0-6.1,2.7-6.1,6.1c0,3.4,2.7,6.1,6.1,6.1s6.1-2.7,6.1-6.1C212.3,116.7,209.6,114,206.2,114z M206.2,110.5c5.3,0,9.5,4.3,9.5,9.5c0,5.3-4.3,9.5-9.5,9.5s-9.5-4.3-9.5-9.5C196.7,114.8,200.9,110.5,206.2,110.5z M184.1,102.7c-0.5,0-0.9,0.2-1.2,0.5c-0.3,0.3-0.5,0.7-0.5,1.2v66.8c0,0.5,0.2,0.9,0.5,1.2c0.3,0.3,0.7,0.5,1.2,0.5h44.2c0.5,0,0.9-0.2,1.2-0.5c0.3-0.3,0.5-0.7,0.5-1.2v-66.8c0-0.5-0.2-0.9-0.5-1.2c-0.3-0.3-0.7-0.5-1.2-0.5H184.1z",
"transform" : "matrix(0.5,0,0,0.5,100,0)"
});
svg.push({
"parent" : "main-svg",
"new" : "g",
"id" : "spat",
//"display" : "none",
"display" : "none",
"transform" : "matrix(1,0,0,1,0,50)",
"child" : [
{
"new" : "rect",
"id" : "frame",
"x" : 120,
"y" : 2,
"width" : 140,
"height" : 140,
"fill" : "none",
"stroke" : "black",
"stroke-opacity" : 1
},
{
"new" : "use",
"id" : "speaker1",
"x" : -67,
"y" : -45,
"href" : "#speaker"
},
{
"new" : "use",
"id" : "speaker2",
"x" : 41,
"y" : -45,
"href" : "#speaker"
},
{
"new" : "use",
"id" : "speaker3",
"x" : -67,
"y" : 50,
"href" : "#speaker"
},
{
"new" : "use",
"id" : "speaker4",
"x" : 41,
"y" : 50,
"href" : "#speaker"
},
{
"new" : "circle",
"id" : "src1",
"cx" : 190,
"cy" : 20,
"r" : 12.5,
"fill" : textcolor
},
{
"new" : "circle",
"id" : "src2",
"cx" : 245,
"cy" : 70,
"r" : 12.5,
"fill" : "olivedrab"
},
{
"new" : "circle",
"id" : "src3",
"cx" : 190,
"cy" : 125,
"r" : 12.5,
"fill" : "cornflowerblue"
},
{
"new" : "circle",
"id" : "src4",
"cx" : 135,
"cy" : 70,
"r" : 12.5,
"fill" : "tomato"
}
]});
}
/*
<svg width="600px" height="200px" viewBox="0 0 600 200" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1">
<defs>
<g id="speaker" transform="matrix(0.5,0,0,0.5,100,0)">
<path d="M206.2,146.2c1.4,0,2.6,1.2,2.6,2.6
c0,1.4-1.2,2.6-2.6,2.6s-2.6-1.2-2.6-2.6C203.6,147.4,204.8,146.2,206.2,146.2z M206.2,141.3c-4.2,0-7.7,3.4-7.7,7.7
c0,4.2,3.4,7.7,7.7,7.7c4.2,0,7.7-3.4,7.7-7.7C213.9,144.8,210.4,141.3,206.2,141.3z M206.2,134.4c8,0,14.6,6.5,14.6,14.6
c0,8-6.5,14.6-14.6,14.6c-8,0-14.6-6.5-14.6-14.6C191.6,141,198.2,134.4,206.2,134.4z M206.2,117.5c1.4,0,2.6,1.2,2.6,2.6
c0,1.4-1.2,2.6-2.6,2.6s-2.6-1.2-2.6-2.6C203.6,118.7,204.8,117.5,206.2,117.5z M206.2,114c-3.4,0-6.1,2.7-6.1,6.1
c0,3.4,2.7,6.1,6.1,6.1s6.1-2.7,6.1-6.1C212.3,116.7,209.6,114,206.2,114z M206.2,110.5c5.3,0,9.5,4.3,9.5,9.5
c0,5.3-4.3,9.5-9.5,9.5s-9.5-4.3-9.5-9.5C196.7,114.8,200.9,110.5,206.2,110.5z M184.1,102.7c-0.5,0-0.9,0.2-1.2,0.5
c-0.3,0.3-0.5,0.7-0.5,1.2v66.8c0,0.5,0.2,0.9,0.5,1.2c0.3,0.3,0.7,0.5,1.2,0.5h44.2c0.5,0,0.9-0.2,1.2-0.5
c0.3-0.3,0.5-0.7,0.5-1.2v-66.8c0-0.5-0.2-0.9-0.5-1.2c-0.3-0.3-0.7-0.5-1.2-0.5H184.1z"/>
</g>
</defs>
<rect id="frame" x="120" y="2" width="140" height="140" stroke="black" stroke-width="4" stroke-opacity="1" fill="none" fill-opacity="1"/>
<circle id="src1" cx="190" cy="20" r="10" fill="black"/>
<circle id="src2" cx="245" cy="70" r="10" fill="green"/>
<circle id="src3" cx="190" cy="125" r="10" fill=nonactive/>
<circle id="src4" cx="135" cy="70" r="10" fill=active/>
<use x="-67" y="-45" href="#speaker" />
<use x="41" y="-45" href="#speaker" />
<use x="-67" y="50" href="#speaker" />
<use x="41" y="50" href="#speaker" />
</svg>
*/
function dictionary()
{
var d = new Dict;
d.name = p[1];
var obj = {};
var out = new Dict;
obj["*"] = {
"key" : "html",
"val" : [{
"id" : msg + "_" + (index1 - 1),
"value" : val
}
, {
"id" : msg + "_num" + "_" + (index1 - 1),
"value" : val
}]
};
out.parse(JSON.stringify(obj));
outlet(0, "dictionary", out.name);
}
function param()
{
var p = arrayfromargs(arguments);
var d = new Dict;
d.name = p[1];
var obj = {};
var out = new Dict;
var keys = d.getkeys();
//post(d.stringify(), "\n");
var index1 = d.get("player");
var msg = keys.indexOf("player") ? keys[0] : keys[1];
var val = d.get(msg);
//post("what?", JSON.stringify(checkboxes), index1, msg, val, "\n");
//for range sliders (calc pulse_length, tonic_pitch, pitch_range)
switch (msg) {
//menus
case "piece" :
case "mode" :
case "instrument" :
case "scale" :
case "meter" :
obj["*"] = {
"key" : "html",
"val" : {
"id" : "_" + val.replace(/#|\.|\s+/g, '_').replace(/\+/g, '-').toLowerCase() + "_" + (index1 - 1),
"selected" : true
}
};
break;
//checkboxes
case "play" :
case "stream" :
case "sorted" :
case "overlap" :
elements = [];
//post(JSON.stringify(checkboxes), "\n");
//addCheckbox(checkboxes[msg].name, msg, checkboxes[msg].pos, val);
//post("checkbox", index1, msg, "\n");
var checkbox = {
"parent" : checkboxes[index1][msg].parent,
"new" : "input",
"class" : "box",
"type" : "checkbox",
"id" : msg + "_" + (index1 - 1),
"name" : msg + "_" + (index1 - 1),
"value" : val,
"style" : {
"position" : "absolute",
"top" : checkboxes[index1][msg].pos[1] + "px",
"left" : checkboxes[index1][msg].pos[0] + "px",
"border" : "none",
"width" : "20px",
"height" : "20px"
},
"oninput" : "drawsocket.send({" + "djster" + ": {player: " + index1 + ", " + msg + ": this.checked}})"
};
if (val) checkbox.checked = "";
obj["*"] = {
"key" : "html",
"val" : checkbox
};
break;
//range sliders
default :
switch (msg) {
case "tonic_pitch" :
case "pitch_center" :
val = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'][val % 12] + (parseInt((val) / 12) - 2);
break;
}
obj["*"] = {
"key" : "html",
"val" : [{
"id" : msg + "_" + (index1 - 1),
"value" : val
}
, {
"id" : msg + "_num" + "_" + (index1 - 1),
"value" : val
}]
};
}
out.parse(JSON.stringify(obj));
outlet(0, "dictionary", out.name);
elements = [];
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,3 @@
{
}

170
hss.piecemaker.js Normal file
View File

@ -0,0 +1,170 @@
inlets = 2
outlets = 4;
var jpieces = {};
var presets = [];
var hsspiece = {};
var outdict = new Dict("HSSPieces");;
var points = [[0.5, 0.5], [1., 0.], [1., 1.], [0., 1.], [0., 0.]];
var net = new Dict;
var title;
var DJsterParams = {
"attenuation" : [0, 100, "linear"], //
"chordal_weight" : [1, 5, "linear"],//
"dynamics" : [0, 127, "linear"],//
"event_length" : [60, 600, "log"],//
"eventfulness" : [0, 100, "linear"],//
"harmoniclarity" : [0, 100, "linear"],//
"melodic_cohesion" : [-100, 100, "linear"],//
"melody_scope" : [0, 48, "linear"],//
"metriclarity" : [-100, 100, "linear"],//
"outset_pulses" : [1, 16, "linear"],//
"overlap" : [0, 1, "linear"],//
"pitch_center" : [12, 108, "linear"],//
"pitch_range" : [0, 48, "linear"],//
"scale" : [1, 5, "enum"],//
"sorted" : [0, 1, "linear"],//
"stream" : [0, 1, "linear"],//
"subdivision" : [1, 5, "enum"],//
"tempo" : [20, 200, "log"],//
"timesig_denominator" : [1, 5, "enum"],//
"timesig_numerator" : [1, 12, "linear"],//
"tonic_pitch" : [12, 108, "enum"],//
};
//
function dictionary(d)
{
net.name = d;
hsspiece[title]["networkData"] = JSON.parse(net.stringify());
outdict.parse(JSON.stringify(hsspiece));
//outlet(0, "dictionary", outdict.name);
}
function readPiece(path)
{
outdict.import_json(path);
jpieces = JSON.parse(outdict.stringify());
var keys = outdict.getkeys();
for (var i = 0; i < keys.length; i++) outlet(3, keys[i]);
outlet(1, outdict.get("DefaultSetting::1::networkData");
outlet(1, predict(0.5, 0.5);
outlet(0, 0.5, 0.5;
}
function getSection(section)
{
outlet(1, outdict.get(section + "::1::networkData");
outlet(1, predict(0.5, 0.5);
outlet(0, 0.5, 0.5;
}
function writePiece()
{
outdict.export_json(this.patcher.filepath + "HSSPiece.json");
}
function anything()
{
var filenames = arrayfromargs(messagename, arguments);
for (var i = 0; i < filenames.length; i++)
{
presets[i] = new Dict;
presets[i].import_json(filenames[i]);
title = filenames[i].slice(filenames[i].lastIndexOf("/") + 1, filenames[i].lastIndexOf("."));
hsspiece[title] = {};
var slots = presets[i].get("pattrstorage::slots").getkeys();//number of slots here
post("slots", slots, "\n");
outlet(1, "clear_data");
for (var j = 0; j < slots.length; j++){
hsspiece[title][j + 1] = {};
var trainingData = [];
var data = JSON.parse(presets[i].get("pattrstorage::slots::" + (j + 1) + "::data").stringify());
for (var p = 0; p < 4; p++) {
delete data["Djster.µbus[" + p + "]::scales"];
delete data["Djster.µbus[" + p + "]::meters"];
for (var param in DJsterParams) {
var val = data["Djster.µbus[" + p + "]::" + param];
switch (DJsterParams[param][2]) {
case "linear" :
trainingData.push(scale(val, DJsterParams[param][0], DJsterParams[param][1], 0., 1.));
break;
case "log" :
trainingData.push(scale(val, DJsterParams[param][0], DJsterParams[param][1], 0., 1.));
break;
case "enum" :
trainingData.push(j/5);
break;
}
}
//var val = data["hub::instrument::instrument-" + (p + 1)];
trainingData.push(j/5);
var val = data["hub::src::src" + (p + 1)];
trainingData.push(scale(val[0], 0, 127, 0., 1.));
trainingData.push(scale(val[1], 0, 127, 0., 1.));
}
//post("data", JSON.stringify(data), "\n");
hsspiece[title][j + 1] = data;
outlet(1, "data_point", points[j].concat(trainingData));
}
outlet(1, "train", 10000);
}
}
function list()
{
var vector = arrayfromargs(arguments);
var src = [];
var currentPiece = this.patcher.getnamed("currentPiece").getvalueof();
var keys = Object.keys(DJsterParams);
for (var i = 0; i < 4; i++) {
for (var j = 0; j < vector.length/4; j++) {
var k = j + i * vector.length/4;
//post("vector", j, "\n");
switch (j) {
case 3 : //log
case 17 :
var val = scale(vector[k], 0, 1, DJsterParams[keys[j]][0], DJsterParams[keys[j]][1]);
outlet(2, "Djster.µbus[" + i + "]::" + keys[j], val);
break;
case 13 : //enum
//val = "Major";
post(vector[k], Math.floor(vector[k]/0.2 + 1), "\n");
outlet(2, "Djster.µbus[" + i + "]::" + keys[j], jpieces[currentPiece][parseInt(vector[k]/0.2 + 1)]["Djster.µbus[" + i + "]::scale"]);
break;
case 16 :
//val = "2 2 2";
outlet(2, "Djster.µbus[" + i + "]::" + keys[j], jpieces[currentPiece][parseInt(vector[k]/0.2 + 1)]["Djster.µbus[" + i + "]::meter"]);
break;
case 18 :
//val = "4"
outlet(2, "Djster.µbus[" + i + "]::" + keys[j], jpieces[currentPiece][parseInt(vector[k]/0.2 + 1)]["Djster.µbus[" + i + "]::timesig_denominator"]);
break;
case 21 :
val = "4"
outlet(2, "hub::instrument::instrument-" + (i + 1), jpieces[currentPiece][parseInt(vector[k]/0.2 + 1)]["hub::instrument::instrument-" + (i + 1)]);
break;
case 22 :
src[0] = scale(vector[k], 0, 1, 0, 127);
break;
case 23 :
src[1] = scale(vector[k], 0, 1, 0, 127);
outlet(2, "hub::src::src" + (i + 1), src);
break;
case 1 : case 9 : case 10 : case 14 : case 15 : case 19 : case 20 :
var val = Math.round(scale(vector[k], 0, 1, DJsterParams[keys[j]][0], DJsterParams[keys[j]][1]));
outlet(2, "Djster.µbus[" + i + "]::" + keys[j], val);
break;
default : //linear
var val = scale(vector[k], 0, 1, DJsterParams[keys[j]][0], DJsterParams[keys[j]][1]);
outlet(2, "Djster.µbus[" + i + "]::" + keys[j], val);
}
}
}
}
function scale(x, inputmin, inputmax, outputmin, outputmax)
{
return (x - inputmin) / (inputmax - inputmin) * (outputmax - outputmin) + outputmin;
}

22
maxnode-getmyip.js Normal file
View File

@ -0,0 +1,22 @@
'use strict';
const Max = require('max-api');
const os = require('os');
let adapter = "Wi-Fi";
//let adapter = "lo0";
Max.addHandler("bang", () => {
if (os.networkInterfaces().hasOwnProperty(adapter)) {
let instance = os.networkInterfaces()[adapter][1]["address"];
//Max.post(instance);
Max.outlet(Number(instance.slice(instance.lastIndexOf(".") + 1)) - 100);
}
});

12
node_modules/.package-lock.json generated vendored Normal file
View File

@ -0,0 +1,12 @@
{
"name": "healing-soundscapes",
"lockfileVersion": 3,
"requires": true,
"packages": {
"node_modules/os": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz",
"integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ=="
}
}
}

11
node_modules/os/README.md generated vendored Normal file
View File

@ -0,0 +1,11 @@
# os
This is a Node.js Core Module
# There's no need to install through npm
**Really, there's no need, just require/import it :)**
## API
https://nodejs.org/api/os.html

1
node_modules/os/index.js generated vendored Normal file
View File

@ -0,0 +1 @@
module.exports = require('os')

25
node_modules/os/package.json generated vendored Normal file
View File

@ -0,0 +1,25 @@
{
"name": "os",
"version": "0.1.2",
"description": "NodeJS Core Module Extended",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://github.com/DiegoRBaquero/node-os.git"
},
"keywords": [
"node",
"os",
"core",
"module"
],
"author": "Diego Rodríguez Baquero <diegorbaquero@gmail.com> (https://diegorbaquero.com)",
"license": "MIT",
"bugs": {
"url": "https://github.com/DiegoRBaquero/node-os/issues"
},
"homepage": "https://github.com/DiegoRBaquero/node-os#readme"
}

View File

@ -0,0 +1,9 @@
npm ERR! code ENOENT
npm ERR! syscall open
npm ERR! path /Users/Shared/Max 8/Library/healing-soundscapes/package.json
npm ERR! errno -2
npm ERR! enoent ENOENT: no such file or directory, open '/Users/Shared/Max 8/Library/healing-soundscapes/package.json'
npm ERR! enoent This is related to npm not being able to find a file.
npm ERR! enoent
npm ERR! A complete log of this run can be found in: /Users/hajdu/.npm/_logs/2024-06-10T05_31_41_379Z-debug-0.log

17
package-lock.json generated Normal file
View File

@ -0,0 +1,17 @@
{
"name": "healing-soundscapes",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"os": "^0.1.2"
}
},
"node_modules/os": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/os/-/os-0.1.2.tgz",
"integrity": "sha512-ZoXJkvAnljwvc56MbvhtKVWmSkzV712k42Is2mA0+0KTSRakq5XXuXpjZjgAt9ctzl51ojhQWakQQpmOvXWfjQ=="
}
}
}

5
package.json Normal file
View File

@ -0,0 +1,5 @@
{
"dependencies": {
"os": "^0.1.2"
}
}

1486
poly-vbap.maxpat Normal file

File diff suppressed because it is too large Load Diff

406
public/manual.html Normal file

File diff suppressed because one or more lines are too long

34991
temp.txt Normal file

File diff suppressed because it is too large Load Diff

BIN
vbap.mxe Executable file

Binary file not shown.

BIN
vbap.mxe64 Executable file

Binary file not shown.