├── code
├── .DS_Store
├── osc
│ ├── .DS_Store
│ ├── osc_server.py
│ └── osc_launch.py
├── 03_01_osc_server.py
└── 01_01_yamnet.py
├── images
├── .DS_Store
├── logo_cml.png
├── logo_acids.png
├── logo_todai.png
└── logo_sorbonne.png
├── patches
├── .DS_Store
├── 03_max4live
│ ├── 01_gain.amxd
│ ├── 03_simple_synth.amxd
│ ├── 04_additive_synth.amxd
│ └── 02_bitcrusher.amxd
├── 04_starter_pack
│ ├── course_04_start_deep.py
│ ├── course_04_start_osc.py
│ └── course_04_start.maxpat
├── 03_osc
│ ├── osc_ex_03_midi.maxpat
│ ├── osc_01_send_receive.maxpat
│ ├── osc_04_autostart_simple.maxpat
│ └── osc_05_autostart_python.maxpat
└── 01_rave
│ ├── 01_basic.maxpat
│ ├── 02_sources.maxpat
│ ├── 04_operations.maxpat
│ ├── 05_control.maxpat
│ └── 03_models.maxpat
└── README.md
/code/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/code/.DS_Store
--------------------------------------------------------------------------------
/code/osc/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/code/osc/.DS_Store
--------------------------------------------------------------------------------
/images/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/images/.DS_Store
--------------------------------------------------------------------------------
/patches/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/patches/.DS_Store
--------------------------------------------------------------------------------
/images/logo_cml.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/images/logo_cml.png
--------------------------------------------------------------------------------
/images/logo_acids.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/images/logo_acids.png
--------------------------------------------------------------------------------
/images/logo_todai.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/images/logo_todai.png
--------------------------------------------------------------------------------
/images/logo_sorbonne.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/images/logo_sorbonne.png
--------------------------------------------------------------------------------
/patches/03_max4live/01_gain.amxd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/patches/03_max4live/01_gain.amxd
--------------------------------------------------------------------------------
/patches/03_max4live/03_simple_synth.amxd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/patches/03_max4live/03_simple_synth.amxd
--------------------------------------------------------------------------------
/patches/03_max4live/04_additive_synth.amxd:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/esling/maxmsp_ai/HEAD/patches/03_max4live/04_additive_synth.amxd
--------------------------------------------------------------------------------
/code/03_01_osc_server.py:
--------------------------------------------------------------------------------
1 | """
2 | MaxMSP and AI - Course 03 (OSC)
3 |
4 | This script demonstrates the most basic OSC server in Python
5 |
6 | @author: esling
7 | """
8 |
9 | from pythonosc import dispatcher, osc_server
10 |
11 | def print_filter_freq(unused_addr, freq):
12 | print(f"Filter frequency: {freq}")
13 |
14 | """ Creating the message dispatcher """
15 | dispatch = dispatcher.Dispatcher()
16 | dispatch.map("/filter/frequency", print_filter_freq)
17 | """ Creating the OSC server """
18 | server = osc_server.ThreadingOSCUDPServer(("localhost", 8000), dispatch)
19 | print("Serving on {}".format(server.server_address))
20 | server.serve_forever()
21 |
--------------------------------------------------------------------------------
/code/01_01_yamnet.py:
--------------------------------------------------------------------------------
1 | # -*- coding: utf-8 -*-
2 | import tensorflow as tf
3 | import tensorflow_hub as hub
4 | import numpy as np
5 | import csv
6 | import io
7 |
8 | # Load the model.
9 | model = hub.load('https://tfhub.dev/google/yamnet/1')
10 | # Input: 3 seconds of silence as mono 16 kHz waveform samples.
11 | waveform = np.zeros(3 * 16000, dtype=np.float32)
12 | # Run the model, check the output.
13 | scores, embeddings, log_mel_spectrogram = model(waveform)
14 | scores.shape.assert_is_compatible_with([None, 521])
15 | embeddings.shape.assert_is_compatible_with([None, 1024])
16 | log_mel_spectrogram.shape.assert_is_compatible_with([None, 64])
17 |
18 | # Find the name of the class with the top score when mean-aggregated across frames.
19 | def class_names_from_csv(class_map_csv_text):
20 | """Returns list of class names corresponding to score vector."""
21 | class_map_csv = io.StringIO(class_map_csv_text)
22 | class_names = [display_name for (class_index, mid, display_name) in csv.reader(class_map_csv)]
23 | class_names = class_names[1:] # Skip CSV header
24 | return class_names
25 | class_map_path = model.class_map_path().numpy()
26 | class_names = class_names_from_csv(tf.io.read_file(class_map_path).numpy().decode('utf-8'))
27 | print(class_names[scores.numpy().mean(axis=0).argmax()]) # Should print 'Silence'.
--------------------------------------------------------------------------------
/patches/04_starter_pack/course_04_start_deep.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Thu Aug 3 12:16:11 2023
5 |
6 | @author: esling
7 | """
8 |
9 | import numpy as np
10 | import tensorflow_hub as hub
11 | import tensorflow as tf
12 | import io
13 | import csv
14 |
15 | # Find the name of the class with the top score when mean-aggregated across frames.
16 | def class_names_from_csv(class_map_csv_text):
17 | """Returns list of class names corresponding to score vector."""
18 | class_map_csv = io.StringIO(class_map_csv_text)
19 | class_names = [display_name for (class_index, mid, display_name) in csv.reader(class_map_csv)]
20 | class_names = class_names[1:] # Skip CSV header
21 | return class_names
22 |
23 | # Create our silence chunk
24 | sr = 16000
25 | len_sig = 3
26 | silence = np.zeros(len_sig * sr, dtype=np.float32)
27 | # Import the model
28 | model = hub.load('https://tfhub.dev/google/yamnet/1')
29 | # Perform classification
30 | scores, embeddings, spectro = model(silence)
31 |
32 | # Create class names associations
33 | class_map_path = model.class_map_path().numpy()
34 | # Final class names vector
35 | class_names = class_names_from_csv(tf.io.read_file(class_map_path).numpy().decode('utf-8'))
36 |
37 | # Get our overall class
38 | overall_class = class_names[scores.numpy().mean(axis=0).argmax()]
39 | print(overall_class)
--------------------------------------------------------------------------------
/patches/04_starter_pack/course_04_start_osc.py:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env python3
2 | # -*- coding: utf-8 -*-
3 | """
4 | Created on Thu Aug 3 12:13:08 2023
5 |
6 | @author: esling
7 | """
8 | from pythonosc import osc_server
9 | from pythonosc import dispatcher
10 | from pythonosc import udp_client
11 |
12 | # OSC decorator
13 | def osc_parse(func):
14 | '''decorates a python function to automatically transform args and kwargs coming from Max'''
15 | def func_embedding(address, *args):
16 | t_args = tuple(); kwargs = {}
17 | for a in args:
18 | if issubclass(type(a), str):
19 | if "=" in a:
20 | key, value = a.split("=")
21 | kwargs[key] = value
22 | else:
23 | t_args = t_args + (a,)
24 | else:
25 | t_args = t_args + (a,)
26 | return func(*t_args, **kwargs)
27 | return func_embedding
28 |
29 | class OSCServer():
30 |
31 | def __init__(self, in_port, out_port, ip="127.0.0.1", *args):
32 | self.ip = ip
33 | self.port_in = in_port
34 | self.port_out = out_port
35 | # Client object to use in functions
36 | self.client = udp_client.SimpleUDPClient(self.ip, self.port_out)
37 | # Create a dispatcher
38 | self.dispatch = dispatcher.Dispatcher()
39 | # Initialize all bindings
40 | self.init_bindings()
41 | # Create the server
42 | self.server = osc_server.BlockingOSCUDPServer((ip, self.port_in), self.dispatch)
43 |
44 | def init_bindings(self):
45 | # Mapping message to the function
46 | self.dispatch.map("/synth/frequency", self.synth_frequency)
47 | self.dispatch.map("/stop", self.stop_server)
48 |
49 | # Function to react to an incoming /synth/frequency message
50 | def synth_frequency(self, address, freq):
51 | print(f"Received frequency : {freq}")
52 | # Advanced complicated computing here
53 | new_freq = freq * 2
54 | # Send back the frequency
55 | self.client.send_message("/synth/frequency", new_freq)
56 |
57 | def start_server(self):
58 | # Launch the server
59 | self.server.serve_forever()
60 |
61 | def stop_server(self, *args):
62 | self.client.send_message("/terminated", "bang")
63 | self.server.shutdown()
64 | self.server.socket.close()
--------------------------------------------------------------------------------
/patches/03_osc/osc_ex_03_midi.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 296.0, 244.0, 640.0, 480.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "fontname" : "Arial",
44 | "fontsize" : 13.0,
45 | "id" : "obj-23",
46 | "maxclass" : "newobj",
47 | "numinlets" : 3,
48 | "numoutlets" : 2,
49 | "outlettype" : [ "float", "float" ],
50 | "patching_rect" : [ 69.0, 284.0, 176.0, 23.0 ],
51 | "text" : "makenote 80 100"
52 | }
53 |
54 | }
55 | , {
56 | "box" : {
57 | "fontname" : "Arial",
58 | "fontsize" : 13.0,
59 | "id" : "obj-24",
60 | "maxclass" : "newobj",
61 | "numinlets" : 3,
62 | "numoutlets" : 0,
63 | "patching_rect" : [ 69.0, 328.0, 175.0, 23.0 ],
64 | "text" : "noteout 1"
65 | }
66 |
67 | }
68 | , {
69 | "box" : {
70 | "fontname" : "Arial",
71 | "fontsize" : 13.0,
72 | "id" : "obj-26",
73 | "maxclass" : "number",
74 | "numinlets" : 1,
75 | "numoutlets" : 2,
76 | "outlettype" : [ "", "bang" ],
77 | "parameter_enable" : 0,
78 | "patching_rect" : [ 69.0, 234.0, 53.0, 23.0 ]
79 | }
80 |
81 | }
82 | , {
83 | "box" : {
84 | "fontname" : "Arial",
85 | "fontsize" : 13.0,
86 | "id" : "obj-28",
87 | "maxclass" : "number",
88 | "numinlets" : 1,
89 | "numoutlets" : 2,
90 | "outlettype" : [ "", "bang" ],
91 | "parameter_enable" : 0,
92 | "patching_rect" : [ 148.0, 234.0, 53.0, 23.0 ]
93 | }
94 |
95 | }
96 | , {
97 | "box" : {
98 | "id" : "obj-2",
99 | "maxclass" : "kslider",
100 | "numinlets" : 2,
101 | "numoutlets" : 2,
102 | "outlettype" : [ "int", "int" ],
103 | "parameter_enable" : 0,
104 | "patching_rect" : [ 69.0, 179.0, 196.0, 34.0 ]
105 | }
106 |
107 | }
108 | , {
109 | "box" : {
110 | "id" : "obj-1",
111 | "maxclass" : "newobj",
112 | "numinlets" : 1,
113 | "numoutlets" : 1,
114 | "outlettype" : [ "int" ],
115 | "patching_rect" : [ 187.0, 109.0, 40.0, 22.0 ],
116 | "text" : "midiin"
117 | }
118 |
119 | }
120 | ],
121 | "lines" : [ {
122 | "patchline" : {
123 | "destination" : [ "obj-26", 0 ],
124 | "source" : [ "obj-2", 0 ]
125 | }
126 |
127 | }
128 | , {
129 | "patchline" : {
130 | "destination" : [ "obj-28", 0 ],
131 | "source" : [ "obj-2", 1 ]
132 | }
133 |
134 | }
135 | , {
136 | "patchline" : {
137 | "destination" : [ "obj-24", 1 ],
138 | "midpoints" : [ 235.5, 313.0, 156.5, 313.0 ],
139 | "source" : [ "obj-23", 1 ]
140 | }
141 |
142 | }
143 | , {
144 | "patchline" : {
145 | "destination" : [ "obj-24", 0 ],
146 | "source" : [ "obj-23", 0 ]
147 | }
148 |
149 | }
150 | , {
151 | "patchline" : {
152 | "destination" : [ "obj-23", 0 ],
153 | "source" : [ "obj-26", 0 ]
154 | }
155 |
156 | }
157 | , {
158 | "patchline" : {
159 | "destination" : [ "obj-23", 1 ],
160 | "midpoints" : [ 157.5, 270.0, 157.0, 270.0 ],
161 | "source" : [ "obj-28", 0 ]
162 | }
163 |
164 | }
165 | ],
166 | "dependency_cache" : [ ],
167 | "autosave" : 0
168 | }
169 |
170 | }
171 |
--------------------------------------------------------------------------------
/code/osc/osc_server.py:
--------------------------------------------------------------------------------
1 | import numpy as np
2 | from pythonosc import udp_client
3 | from pythonosc import dispatcher
4 | from pythonosc import osc_server
5 |
6 | # Helper function to parse attribute
7 | def osc_attr(obj, attribute):
8 | def closure(*args):
9 | args = args[1:]
10 | if len(args) == 0:
11 | return getattr(obj, attribute)
12 | else:
13 | return setattr(obj, attribute, *args)
14 | return closure
15 |
16 | class OSCServer(object):
17 | '''
18 | Key class for OSCServers linking Python and Max / MSP
19 |
20 | Example :
21 | >>> server = OSCServer(1234, 1235) # Creating server
22 | >>> server.run() # Running server
23 |
24 | '''
25 | # attributes automatically bounded to OSC ports
26 | osc_attributes = []
27 | # Initialization method
28 | def __init__(self, in_port, out_port, ip='127.0.0.1', *args):
29 | super(OSCServer, self).__init__()
30 | # OSC library objects
31 | self.dispatcher = dispatcher.Dispatcher()
32 | self.client = udp_client.SimpleUDPClient(ip, out_port)
33 | # Bindings for server
34 | self.init_bindings(self.osc_attributes)
35 | self.server = osc_server.BlockingOSCUDPServer((ip, in_port), self.dispatcher)
36 | # Server properties
37 | self.debug = False
38 | self.in_port = in_port
39 | self.out_port = out_port
40 | self.ip = ip
41 |
42 | def init_bindings(self, osc_attributes=[]):
43 | '''Here we define every OSC callbacks'''
44 | self.dispatcher.map("/ping", self.ping)
45 | self.dispatcher.map("/stop", self.stopServer)
46 | for attribute in osc_attributes:
47 | print(attribute)
48 | self.dispatcher.map("/%s"%attribute, osc_attr(self, attribute))
49 |
50 | def stopServer(self, *args):
51 | '''stops the server'''
52 | self.client.send_message("/terminated", "bang")
53 | self.server.shutdown()
54 | self.server.socket.close()
55 |
56 | def run(self):
57 | '''runs the SoMax server'''
58 | self.server.serve_forever()
59 |
60 | def ping(self, *args):
61 | '''just to test the server'''
62 | print("ping", args)
63 | self.client.send_message("/from_server", "pong")
64 |
65 | def send(self, address, content):
66 | '''global method to send a message'''
67 | if (self.debug):
68 | print('Sending following message')
69 | print(address)
70 | print(content)
71 | self.client.send_message(address, content)
72 |
73 | def print(self, *args):
74 | print(*args)
75 | self.send('/print', *args)
76 |
77 | # OSC decorator
78 | def osc_parse(func):
79 | '''decorates a python function to automatically transform args and kwargs coming from Max'''
80 | def func_embedding(address, *args):
81 | t_args = tuple(); kwargs = {}
82 | for a in args:
83 | if issubclass(type(a), str):
84 | if "=" in a:
85 | key, value = a.split("=")
86 | kwargs[key] = value
87 | else:
88 | t_args = t_args + (a,)
89 | else:
90 | t_args = t_args + (a,)
91 | return func(*t_args, **kwargs)
92 | return func_embedding
93 |
94 | def max_format(v):
95 | '''Format some Python native types for Max'''
96 | if issubclass(type(v), (list, tuple)):
97 | if len(v) == 0:
98 | return ' "" '
99 | return ''.join(['%s '%(i) for i in v])
100 | else:
101 | return v
102 |
103 | def dict2str(dic):
104 | '''Convert a python dict to a Max message filling a dict object'''
105 | str = ''
106 | for k, v in dic.items():
107 | str += ', set %s %s'%(k, max_format(v))
108 | return str[2:]
109 |
110 | def extract_max(pitches, magnitudes, shape):
111 | """ Extract maximum magnitude for pitch extraction """
112 | new_pitches = []
113 | for i in range(0, shape[1]):
114 | index = magnitudes[:, i].argmax()
115 | new_pitches.append(pitches[index,i])
116 | return new_pitches
117 |
118 | def freq2midi(freq):
119 | """ Given a frequency in Hz, returns its MIDI pitch number. """
120 | MIDI_A4 = 69 # MIDI Pitch number
121 | FREQ_A4 = 440. # Hz
122 | return int(12 * (np.log2(freq) - np.log2(FREQ_A4)) + MIDI_A4)
123 |
--------------------------------------------------------------------------------
/patches/04_starter_pack/course_04_start.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 103.0, 119.0, 1203.0, 768.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "id" : "obj-18",
44 | "maxclass" : "message",
45 | "numinlets" : 2,
46 | "numoutlets" : 1,
47 | "outlettype" : [ "" ],
48 | "patching_rect" : [ 393.5, 122.0, 35.0, 22.0 ],
49 | "text" : "/stop"
50 | }
51 |
52 | }
53 | , {
54 | "box" : {
55 | "id" : "obj-15",
56 | "maxclass" : "message",
57 | "numinlets" : 2,
58 | "numoutlets" : 1,
59 | "outlettype" : [ "" ],
60 | "patching_rect" : [ 463.0, 167.5, 50.0, 22.0 ],
61 | "text" : "69."
62 | }
63 |
64 | }
65 | , {
66 | "box" : {
67 | "id" : "obj-11",
68 | "maxclass" : "newobj",
69 | "numinlets" : 1,
70 | "numoutlets" : 0,
71 | "patching_rect" : [ 533.5, 167.5, 99.0, 22.0 ],
72 | "text" : "print from_server"
73 | }
74 |
75 | }
76 | , {
77 | "box" : {
78 | "id" : "obj-10",
79 | "maxclass" : "newobj",
80 | "numinlets" : 2,
81 | "numoutlets" : 2,
82 | "outlettype" : [ "", "" ],
83 | "patching_rect" : [ 494.0, 122.0, 127.0, 22.0 ],
84 | "text" : "route /synth/frequency"
85 | }
86 |
87 | }
88 | , {
89 | "box" : {
90 | "id" : "obj-9",
91 | "maxclass" : "newobj",
92 | "numinlets" : 1,
93 | "numoutlets" : 1,
94 | "outlettype" : [ "" ],
95 | "patching_rect" : [ 494.0, 83.5, 97.0, 22.0 ],
96 | "text" : "udpreceive 1224"
97 | }
98 |
99 | }
100 | , {
101 | "box" : {
102 | "id" : "obj-7",
103 | "maxclass" : "live.dial",
104 | "numinlets" : 1,
105 | "numoutlets" : 2,
106 | "outlettype" : [ "", "float" ],
107 | "parameter_enable" : 1,
108 | "patching_rect" : [ 238.5, 57.5, 41.0, 48.0 ],
109 | "saved_attribute_attributes" : {
110 | "valueof" : {
111 | "parameter_longname" : "live.dial",
112 | "parameter_shortname" : "live.dial",
113 | "parameter_type" : 0,
114 | "parameter_unitstyle" : 0
115 | }
116 |
117 | }
118 | ,
119 | "varname" : "live.dial"
120 | }
121 |
122 | }
123 | , {
124 | "box" : {
125 | "id" : "obj-2",
126 | "maxclass" : "newobj",
127 | "numinlets" : 1,
128 | "numoutlets" : 1,
129 | "outlettype" : [ "" ],
130 | "patching_rect" : [ 238.5, 122.0, 144.0, 22.0 ],
131 | "text" : "prepend /synth/frequency"
132 | }
133 |
134 | }
135 | , {
136 | "box" : {
137 | "id" : "obj-1",
138 | "maxclass" : "newobj",
139 | "numinlets" : 1,
140 | "numoutlets" : 0,
141 | "patching_rect" : [ 238.5, 167.5, 138.0, 22.0 ],
142 | "text" : "udpsend 127.0.0.1 1223"
143 | }
144 |
145 | }
146 | ],
147 | "lines" : [ {
148 | "patchline" : {
149 | "destination" : [ "obj-11", 0 ],
150 | "order" : 0,
151 | "source" : [ "obj-10", 0 ]
152 | }
153 |
154 | }
155 | , {
156 | "patchline" : {
157 | "destination" : [ "obj-15", 1 ],
158 | "order" : 1,
159 | "source" : [ "obj-10", 0 ]
160 | }
161 |
162 | }
163 | , {
164 | "patchline" : {
165 | "destination" : [ "obj-1", 0 ],
166 | "source" : [ "obj-18", 0 ]
167 | }
168 |
169 | }
170 | , {
171 | "patchline" : {
172 | "destination" : [ "obj-1", 0 ],
173 | "source" : [ "obj-2", 0 ]
174 | }
175 |
176 | }
177 | , {
178 | "patchline" : {
179 | "destination" : [ "obj-2", 0 ],
180 | "source" : [ "obj-7", 0 ]
181 | }
182 |
183 | }
184 | , {
185 | "patchline" : {
186 | "destination" : [ "obj-10", 0 ],
187 | "source" : [ "obj-9", 0 ]
188 | }
189 |
190 | }
191 | ],
192 | "parameters" : {
193 | "obj-7" : [ "live.dial", "live.dial", 0 ],
194 | "parameterbanks" : {
195 |
196 | }
197 | ,
198 | "inherited_shortname" : 1
199 | }
200 | ,
201 | "dependency_cache" : [ ],
202 | "autosave" : 0
203 | }
204 |
205 | }
206 |
--------------------------------------------------------------------------------
/code/osc/osc_launch.py:
--------------------------------------------------------------------------------
1 | import argparse
2 | import torch
3 | import json, ast
4 | #from matplotlib import pyplot as plt
5 | from osc_server import FlowServer
6 | from osc_utils import generate_dataset
7 | from utils.data import load_dataset
8 | from evaluate import evaluate_dimensions, evaluate_dataset
9 | from torch.utils.data import DataLoader
10 | import numpy as np
11 | import os
12 | from os.path import expanduser
13 |
14 | # Debug mode
15 | __DEBUG__ = False
16 |
17 | parser = argparse.ArgumentParser()
18 | parser.add_argument('--in_port', type=int, default=1232)
19 | parser.add_argument('--out_port', type=int, default=1233)
20 | parser.add_argument('--ip', type=str, default="127.0.0.1")
21 | # Model arguments
22 | parser.add_argument('--model_path', type=str, default="results/")
23 | parser.add_argument('--model_name', type=str, default="vae_mel_mse_32_cnn_mlp_1.model")
24 | # Data arguments
25 | parser.add_argument('--path', type=str, default='data', help='')
26 | parser.add_argument('--dataset', type=str, default='64par', help='')
27 | parser.add_argument('--train_type', type=str, default='fixed', help='')
28 | parser.add_argument('--data', type=str, default='mel', help='')
29 | parser.add_argument('--projection', type=str, default='pca', help='')
30 | parser.add_argument('--batch_size', type=int, default=128, help='')
31 | parser.add_argument('--nbworkers', type=int, default=0, help='')
32 | parser.add_argument('--reanalyze', type=int, default=0, help='')
33 | parser.add_argument('--device', type=str, default='cpu', help='')
34 | args = parser.parse_args()
35 |
36 | #%%
37 | """
38 | ###################
39 | Load model
40 | ###################
41 | """
42 | model = None
43 | args.model = args.model_path + args.dataset + '/' + args.model_name
44 | if args.model:
45 | model = torch.load(args.model, map_location="cpu")
46 | model = model.eval()
47 |
48 | """
49 | ###################
50 | Load dataset
51 | ###################
52 | """
53 | print('[Loading dataset for ' + args.data + ']')
54 | if (args.train_type == 'random'):
55 | train_loader, valid_loader, test_loader, args = load_dataset(args)
56 | else:
57 | ref_split = args.path + '/reference_split_' + args.dataset + "_" + args.data + '.th'
58 | print('[About to load]')
59 | data = torch.load(ref_split)
60 | train_loader, valid_loader, test_loader = data[0], data[1], data[2]
61 | print('[Changing refs in reference]')
62 | home = expanduser("~")
63 | for t in [train_loader, valid_loader, test_loader]:
64 | t.dataset.datadir = home + '/Datasets/diva_dataset/' + args.dataset
65 | t.dataset.trans_datasets[args.data].datadir = home + '/Datasets/diva_dataset/' + args.dataset
66 | torch.save([train_loader, valid_loader, test_loader], ref_split)
67 | # Remove the shuffling from dataset
68 | train_loader = DataLoader(train_loader.dataset, batch_size=64, shuffle=False, num_workers=2)
69 | valid_loader = DataLoader(valid_loader.dataset, batch_size=64, shuffle=False, num_workers=2)
70 | test_loader = DataLoader(test_loader.dataset, batch_size=64, shuffle=False, num_workers=2)
71 |
72 |
73 | #%% Combine sets
74 | audioset = [train_loader, valid_loader, test_loader]
75 | # Handle DIVA parameters
76 | with open("synth/diva_params.txt") as f:
77 | diva_midi_desc = ast.literal_eval(f.read())
78 | rev_idx = {diva_midi_desc[key]: key for key in diva_midi_desc}
79 | # Retrieve dataset parameters
80 | with open("synth/param_default_32.json") as f:
81 | params_default = json.load(f)
82 | param_dict = params_default
83 | param_names = test_loader.dataset.final_params
84 | print('[Reference set on which model was trained]')
85 | print(param_names)
86 |
87 | #%%
88 | """
89 | ###################
90 | Perform model pre-analysis
91 | ###################
92 | """
93 | # Target file of analysis
94 | analysis_file = args.model.replace('.model', '.analysis')
95 | # Target dataset
96 | dataset_file = args.model.replace('.model', '.dataset')
97 | if (len(args.projection) > 0):
98 | analysis_file += '.' + args.projection
99 | dataset_file += '.' + args.projection
100 | # Create analysis files
101 | if (not os.path.exists(analysis_file + '.npy') or args.reanalyze):
102 | # Perform dataset evaluation
103 | final_z, final_meta, pca, z_vars, z_means = evaluate_dataset(model, [train_loader, valid_loader, test_loader], args)
104 | # Perform dimension evaluation
105 | d_idx, d_vars, d_params, d_desc, desc_max = evaluate_dimensions(model, pca, args)
106 | # Save information
107 | model_analysis = {
108 | 'd_idx':d_idx,
109 | 'd_vars':d_vars,
110 | 'd_params':d_params,
111 | 'd_desc':d_desc,
112 | 'desc_max':desc_max,
113 | 'final_z':final_z,
114 | 'final_meta':final_meta,
115 | 'pca':pca,
116 | 'z_vars':z_vars,
117 | 'z_means':z_means
118 | }
119 | # Generate offline presets dataset
120 | model_analysis = generate_dataset(dataset_file + '.txt', [train_loader, valid_loader, test_loader], model_analysis)
121 | # Keep path to the model dataset
122 | model_analysis['dataset_path'] = dataset_file + '.txt'
123 | # Save the whole analysis
124 | np.save(analysis_file, model_analysis)
125 | else:
126 | model_analysis = np.load(analysis_file + '.npy', allow_pickle=True).item()
127 |
128 | #%%
129 | """
130 | ###################
131 | Create server
132 | ###################
133 | """
134 | server = FlowServer(args.in_port, args.out_port, model=model, dataset=audioset, data=args.data, param_names=param_names, param_dict=param_dict, analysis=model_analysis, debug=__DEBUG__, args=args)
135 | #%%
136 | if (__DEBUG__):
137 | # Test pitch analysis
138 | print('[Debug mode : Testing server on given functions]')
139 | else:
140 | print('[Running server on ports in : %d - out : %d]'%(args.in_port, args.out_port))
141 | server.run()
--------------------------------------------------------------------------------
/patches/03_osc/osc_01_send_receive.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 178.0, 138.0, 747.0, 553.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "id" : "obj-7",
44 | "maxclass" : "newobj",
45 | "numinlets" : 1,
46 | "numoutlets" : 1,
47 | "outlettype" : [ "" ],
48 | "patching_rect" : [ 495.837203979492188, 167.674415111541748, 138.0, 22.0 ],
49 | "text" : "prepend /filter/frequency"
50 | }
51 |
52 | }
53 | , {
54 | "box" : {
55 | "id" : "obj-10",
56 | "maxclass" : "newobj",
57 | "numinlets" : 1,
58 | "numoutlets" : 0,
59 | "patching_rect" : [ 495.837203979492188, 204.674415111541748, 135.0, 22.0 ],
60 | "text" : "udpsend localhost 8000"
61 | }
62 |
63 | }
64 | , {
65 | "box" : {
66 | "id" : "obj-4",
67 | "maxclass" : "dial",
68 | "numinlets" : 1,
69 | "numoutlets" : 1,
70 | "outlettype" : [ "float" ],
71 | "parameter_enable" : 0,
72 | "patching_rect" : [ 496.0, 107.0, 40.0, 40.0 ]
73 | }
74 |
75 | }
76 | , {
77 | "box" : {
78 | "id" : "obj-14",
79 | "maxclass" : "newobj",
80 | "numinlets" : 1,
81 | "numoutlets" : 0,
82 | "patching_rect" : [ 207.837203979492188, 76.348836481571198, 138.0, 22.0 ],
83 | "text" : "udpsend 127.0.0.1 8000"
84 | }
85 |
86 | }
87 | , {
88 | "box" : {
89 | "id" : "obj-13",
90 | "maxclass" : "newobj",
91 | "numinlets" : 1,
92 | "numoutlets" : 0,
93 | "patching_rect" : [ 207.837203979492188, 46.232557952404022, 135.0, 22.0 ],
94 | "text" : "udpsend localhost 8000"
95 | }
96 |
97 | }
98 | , {
99 | "box" : {
100 | "id" : "obj-12",
101 | "maxclass" : "newobj",
102 | "numinlets" : 1,
103 | "numoutlets" : 1,
104 | "outlettype" : [ "" ],
105 | "patching_rect" : [ 27.720930814743042, 46.232557952404022, 97.0, 22.0 ],
106 | "text" : "udpreceive 8000"
107 | }
108 |
109 | }
110 | , {
111 | "box" : {
112 | "id" : "obj-11",
113 | "maxclass" : "message",
114 | "numinlets" : 2,
115 | "numoutlets" : 1,
116 | "outlettype" : [ "" ],
117 | "patching_rect" : [ 207.837203979492188, 133.674415111541748, 32.0, 22.0 ],
118 | "text" : "0.75"
119 | }
120 |
121 | }
122 | , {
123 | "box" : {
124 | "id" : "obj-9",
125 | "maxclass" : "comment",
126 | "numinlets" : 1,
127 | "numoutlets" : 0,
128 | "patching_rect" : [ 27.720930814743042, 243.848828881978989, 150.0, 20.0 ],
129 | "text" : "Receiving OSC messages"
130 | }
131 |
132 | }
133 | , {
134 | "box" : {
135 | "id" : "obj-8",
136 | "maxclass" : "comment",
137 | "numinlets" : 1,
138 | "numoutlets" : 0,
139 | "patching_rect" : [ 207.84882977604866, 243.848828881978989, 150.0, 20.0 ],
140 | "text" : "Sending OSC messages"
141 | }
142 |
143 | }
144 | , {
145 | "box" : {
146 | "id" : "obj-5",
147 | "maxclass" : "newobj",
148 | "numinlets" : 1,
149 | "numoutlets" : 1,
150 | "outlettype" : [ "" ],
151 | "patching_rect" : [ 207.837203979492188, 167.674415111541748, 138.0, 22.0 ],
152 | "text" : "prepend /filter/frequency"
153 | }
154 |
155 | }
156 | , {
157 | "box" : {
158 | "id" : "obj-6",
159 | "maxclass" : "newobj",
160 | "numinlets" : 1,
161 | "numoutlets" : 0,
162 | "patching_rect" : [ 207.837203979492188, 200.674415111541748, 135.0, 22.0 ],
163 | "text" : "udpsend localhost 8000"
164 | }
165 |
166 | }
167 | , {
168 | "box" : {
169 | "id" : "obj-3",
170 | "maxclass" : "newobj",
171 | "numinlets" : 1,
172 | "numoutlets" : 0,
173 | "patching_rect" : [ 27.720930814743042, 200.674415111541748, 32.0, 22.0 ],
174 | "text" : "print"
175 | }
176 |
177 | }
178 | , {
179 | "box" : {
180 | "id" : "obj-2",
181 | "maxclass" : "newobj",
182 | "numinlets" : 2,
183 | "numoutlets" : 2,
184 | "outlettype" : [ "", "" ],
185 | "patching_rect" : [ 27.720930814743042, 167.674415111541748, 121.0, 22.0 ],
186 | "text" : "route /filter/frequency"
187 | }
188 |
189 | }
190 | , {
191 | "box" : {
192 | "id" : "obj-1",
193 | "maxclass" : "newobj",
194 | "numinlets" : 1,
195 | "numoutlets" : 1,
196 | "outlettype" : [ "" ],
197 | "patching_rect" : [ 27.720930814743042, 133.674415111541748, 97.0, 22.0 ],
198 | "text" : "udpreceive 8000"
199 | }
200 |
201 | }
202 | ],
203 | "lines" : [ {
204 | "patchline" : {
205 | "destination" : [ "obj-2", 0 ],
206 | "source" : [ "obj-1", 0 ]
207 | }
208 |
209 | }
210 | , {
211 | "patchline" : {
212 | "destination" : [ "obj-5", 0 ],
213 | "source" : [ "obj-11", 0 ]
214 | }
215 |
216 | }
217 | , {
218 | "patchline" : {
219 | "destination" : [ "obj-3", 0 ],
220 | "source" : [ "obj-2", 0 ]
221 | }
222 |
223 | }
224 | , {
225 | "patchline" : {
226 | "destination" : [ "obj-7", 0 ],
227 | "source" : [ "obj-4", 0 ]
228 | }
229 |
230 | }
231 | , {
232 | "patchline" : {
233 | "destination" : [ "obj-6", 0 ],
234 | "source" : [ "obj-5", 0 ]
235 | }
236 |
237 | }
238 | , {
239 | "patchline" : {
240 | "destination" : [ "obj-10", 0 ],
241 | "source" : [ "obj-7", 0 ]
242 | }
243 |
244 | }
245 | ],
246 | "dependency_cache" : [ ],
247 | "autosave" : 0
248 | }
249 |
250 | }
251 |
--------------------------------------------------------------------------------
/patches/03_osc/osc_04_autostart_simple.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 5,
7 | "revision" : 4,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 421.0, 182.0, 716.0, 732.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "id" : "obj-59",
44 | "maxclass" : "button",
45 | "numinlets" : 1,
46 | "numoutlets" : 1,
47 | "outlettype" : [ "bang" ],
48 | "parameter_enable" : 0,
49 | "patching_rect" : [ 381.0, 135.432372999999984, 24.0, 24.0 ],
50 | "varname" : "button[4]"
51 | }
52 |
53 | }
54 | , {
55 | "box" : {
56 | "id" : "obj-58",
57 | "maxclass" : "button",
58 | "numinlets" : 1,
59 | "numoutlets" : 1,
60 | "outlettype" : [ "bang" ],
61 | "parameter_enable" : 0,
62 | "patching_rect" : [ 207.75, 138.432372999999984, 24.0, 24.0 ],
63 | "varname" : "button[3]"
64 | }
65 |
66 | }
67 | , {
68 | "box" : {
69 | "id" : "obj-45",
70 | "maxclass" : "message",
71 | "numinlets" : 2,
72 | "numoutlets" : 1,
73 | "outlettype" : [ "" ],
74 | "patching_rect" : [ 381.0, 174.932372999999984, 37.0, 22.0 ],
75 | "text" : "1235"
76 | }
77 |
78 | }
79 | , {
80 | "box" : {
81 | "id" : "obj-42",
82 | "maxclass" : "message",
83 | "numinlets" : 2,
84 | "numoutlets" : 1,
85 | "outlettype" : [ "" ],
86 | "patching_rect" : [ 207.75, 174.932372999999984, 37.0, 22.0 ],
87 | "text" : "1234"
88 | }
89 |
90 | }
91 | , {
92 | "box" : {
93 | "id" : "obj-39",
94 | "maxclass" : "newobj",
95 | "numinlets" : 1,
96 | "numoutlets" : 2,
97 | "outlettype" : [ "", "int" ],
98 | "patching_rect" : [ 34.0, 179.0, 130.0, 22.0 ],
99 | "text" : "conformpath max boot"
100 | }
101 |
102 | }
103 | , {
104 | "box" : {
105 | "id" : "obj-38",
106 | "maxclass" : "newobj",
107 | "numinlets" : 1,
108 | "numoutlets" : 1,
109 | "outlettype" : [ "" ],
110 | "patching_rect" : [ 34.0, 139.432373000000013, 59.0, 22.0 ],
111 | "text" : "tosymbol"
112 | }
113 |
114 | }
115 | , {
116 | "box" : {
117 | "id" : "obj-20",
118 | "maxclass" : "newobj",
119 | "numinlets" : 1,
120 | "numoutlets" : 1,
121 | "outlettype" : [ "" ],
122 | "patching_rect" : [ 34.0, 55.0, 56.0, 22.0 ],
123 | "text" : "deferlow"
124 | }
125 |
126 | }
127 | , {
128 | "box" : {
129 | "fontname" : "Arial",
130 | "fontsize" : 9.0,
131 | "id" : "obj-33",
132 | "maxclass" : "newobj",
133 | "numinlets" : 3,
134 | "numoutlets" : 1,
135 | "outlettype" : [ "" ],
136 | "patching_rect" : [ 34.0, 217.432372999999984, 366.0, 19.0 ],
137 | "text" : "sprintf cd '%s/../code' && /usr/local/bin/python3 osc_launch.py --in_port %d --out_port %d"
138 | }
139 |
140 | }
141 | , {
142 | "box" : {
143 | "fontname" : "Arial",
144 | "fontsize" : 9.0,
145 | "id" : "obj-34",
146 | "maxclass" : "newobj",
147 | "numinlets" : 1,
148 | "numoutlets" : 1,
149 | "outlettype" : [ "bang" ],
150 | "patching_rect" : [ 34.0, 23.0, 48.0, 19.0 ],
151 | "text" : "loadbang"
152 | }
153 |
154 | }
155 | , {
156 | "box" : {
157 | "fontname" : "Arial",
158 | "fontsize" : 9.0,
159 | "id" : "obj-35",
160 | "maxclass" : "message",
161 | "numinlets" : 2,
162 | "numoutlets" : 1,
163 | "outlettype" : [ "" ],
164 | "patching_rect" : [ 34.0, 86.5, 27.0, 19.0 ],
165 | "text" : "path"
166 | }
167 |
168 | }
169 | , {
170 | "box" : {
171 | "color" : [ 1.0, 0.890196, 0.090196, 1.0 ],
172 | "fontname" : "Arial",
173 | "fontsize" : 9.0,
174 | "id" : "obj-36",
175 | "maxclass" : "newobj",
176 | "numinlets" : 1,
177 | "numoutlets" : 2,
178 | "outlettype" : [ "", "" ],
179 | "patching_rect" : [ 34.0, 112.432373000000013, 70.0, 19.0 ],
180 | "save" : [ "#N", "thispatcher", ";", "#Q", "end", ";" ],
181 | "text" : "thispatcher"
182 | }
183 |
184 | }
185 | , {
186 | "box" : {
187 | "id" : "obj-21",
188 | "maxclass" : "newobj",
189 | "numinlets" : 1,
190 | "numoutlets" : 0,
191 | "patching_rect" : [ 34.0, 286.48913600000003, 85.0, 22.0 ],
192 | "text" : "print shell_out"
193 | }
194 |
195 | }
196 | , {
197 | "box" : {
198 | "id" : "obj-7",
199 | "maxclass" : "newobj",
200 | "numinlets" : 1,
201 | "numoutlets" : 2,
202 | "outlettype" : [ "", "bang" ],
203 | "patching_rect" : [ 34.0, 246.0, 91.0, 22.0 ],
204 | "saved_object_attributes" : {
205 | "shell" : "(default)"
206 | }
207 | ,
208 | "text" : "shell"
209 | }
210 |
211 | }
212 | ],
213 | "lines" : [ {
214 | "patchline" : {
215 | "destination" : [ "obj-35", 0 ],
216 | "order" : 2,
217 | "source" : [ "obj-20", 0 ]
218 | }
219 |
220 | }
221 | , {
222 | "patchline" : {
223 | "destination" : [ "obj-58", 0 ],
224 | "midpoints" : [ 43.5, 83.0, 110.875, 83.0, 110.875, 83.5, 217.25, 83.5 ],
225 | "order" : 1,
226 | "source" : [ "obj-20", 0 ]
227 | }
228 |
229 | }
230 | , {
231 | "patchline" : {
232 | "destination" : [ "obj-59", 0 ],
233 | "midpoints" : [ 43.5, 82.0, 111.0, 82.0, 111.0, 82.5, 390.5, 82.5 ],
234 | "order" : 0,
235 | "source" : [ "obj-20", 0 ]
236 | }
237 |
238 | }
239 | , {
240 | "patchline" : {
241 | "destination" : [ "obj-7", 0 ],
242 | "source" : [ "obj-33", 0 ]
243 | }
244 |
245 | }
246 | , {
247 | "patchline" : {
248 | "destination" : [ "obj-20", 0 ],
249 | "source" : [ "obj-34", 0 ]
250 | }
251 |
252 | }
253 | , {
254 | "patchline" : {
255 | "destination" : [ "obj-36", 0 ],
256 | "source" : [ "obj-35", 0 ]
257 | }
258 |
259 | }
260 | , {
261 | "patchline" : {
262 | "destination" : [ "obj-38", 0 ],
263 | "source" : [ "obj-36", 1 ]
264 | }
265 |
266 | }
267 | , {
268 | "patchline" : {
269 | "destination" : [ "obj-39", 0 ],
270 | "source" : [ "obj-38", 0 ]
271 | }
272 |
273 | }
274 | , {
275 | "patchline" : {
276 | "destination" : [ "obj-33", 0 ],
277 | "source" : [ "obj-39", 0 ]
278 | }
279 |
280 | }
281 | , {
282 | "patchline" : {
283 | "destination" : [ "obj-33", 1 ],
284 | "source" : [ "obj-42", 0 ]
285 | }
286 |
287 | }
288 | , {
289 | "patchline" : {
290 | "destination" : [ "obj-33", 2 ],
291 | "source" : [ "obj-45", 0 ]
292 | }
293 |
294 | }
295 | , {
296 | "patchline" : {
297 | "destination" : [ "obj-42", 0 ],
298 | "source" : [ "obj-58", 0 ]
299 | }
300 |
301 | }
302 | , {
303 | "patchline" : {
304 | "destination" : [ "obj-45", 0 ],
305 | "source" : [ "obj-59", 0 ]
306 | }
307 |
308 | }
309 | , {
310 | "patchline" : {
311 | "destination" : [ "obj-21", 0 ],
312 | "source" : [ "obj-7", 0 ]
313 | }
314 |
315 | }
316 | ],
317 | "dependency_cache" : [ {
318 | "name" : "shell.mxo",
319 | "type" : "iLaX"
320 | }
321 | ],
322 | "autosave" : 0,
323 | "styles" : [ {
324 | "name" : "AudioStatus_Menu",
325 | "default" : {
326 | "bgfillcolor" : {
327 | "angle" : 270.0,
328 | "autogradient" : 0,
329 | "color" : [ 0.294118, 0.313726, 0.337255, 1 ],
330 | "color1" : [ 0.454902, 0.462745, 0.482353, 0.0 ],
331 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
332 | "proportion" : 0.39,
333 | "type" : "color"
334 | }
335 |
336 | }
337 | ,
338 | "parentstyle" : "",
339 | "multi" : 0
340 | }
341 | , {
342 | "name" : "ksliderWhite",
343 | "default" : {
344 | "color" : [ 1.0, 1.0, 1.0, 1.0 ]
345 | }
346 | ,
347 | "parentstyle" : "",
348 | "multi" : 0
349 | }
350 | , {
351 | "name" : "m4l",
352 | "default" : {
353 | "fontname" : [ "Arial Bold" ],
354 | "fontsize" : [ 10.0 ]
355 | }
356 | ,
357 | "parentstyle" : "",
358 | "multi" : 0
359 | }
360 | , {
361 | "name" : "newobjBlue-1",
362 | "default" : {
363 | "accentcolor" : [ 0.317647, 0.654902, 0.976471, 1.0 ]
364 | }
365 | ,
366 | "parentstyle" : "",
367 | "multi" : 0
368 | }
369 | , {
370 | "name" : "newobjGreen-1",
371 | "default" : {
372 | "accentcolor" : [ 0.0, 0.533333, 0.168627, 1.0 ]
373 | }
374 | ,
375 | "parentstyle" : "",
376 | "multi" : 0
377 | }
378 | , {
379 | "name" : "numberGold-1",
380 | "default" : {
381 | "accentcolor" : [ 0.764706, 0.592157, 0.101961, 1.0 ]
382 | }
383 | ,
384 | "parentstyle" : "",
385 | "multi" : 0
386 | }
387 | ]
388 | }
389 |
390 | }
391 |
--------------------------------------------------------------------------------
/patches/01_rave/01_basic.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 723.0, 120.0, 1148.0, 739.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "fontface" : 1,
44 | "fontsize" : 14.0,
45 | "id" : "obj-12",
46 | "maxclass" : "comment",
47 | "numinlets" : 1,
48 | "numoutlets" : 0,
49 | "patching_rect" : [ 332.0, 56.0, 171.0, 22.0 ],
50 | "text" : "Enable / disable model"
51 | }
52 |
53 | }
54 | , {
55 | "box" : {
56 | "fontface" : 1,
57 | "fontsize" : 14.0,
58 | "id" : "obj-11",
59 | "maxclass" : "comment",
60 | "numinlets" : 1,
61 | "numoutlets" : 0,
62 | "patching_rect" : [ 138.0, 56.0, 153.0, 22.0 ],
63 | "text" : "Direct audio transfer"
64 | }
65 |
66 | }
67 | , {
68 | "box" : {
69 | "fontname" : "Arial",
70 | "fontsize" : 13.0,
71 | "id" : "obj-63",
72 | "maxclass" : "comment",
73 | "numinlets" : 1,
74 | "numoutlets" : 0,
75 | "patching_rect" : [ 36.0, 117.0, 72.0, 21.0 ],
76 | "text" : "Darbouka",
77 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
78 | }
79 |
80 | }
81 | , {
82 | "box" : {
83 | "fontname" : "Arial",
84 | "fontsize" : 13.0,
85 | "id" : "obj-64",
86 | "maxclass" : "comment",
87 | "numinlets" : 1,
88 | "numoutlets" : 0,
89 | "patching_rect" : [ 36.0, 101.0, 71.0, 21.0 ],
90 | "text" : "Dry",
91 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
92 | }
93 |
94 | }
95 | , {
96 | "box" : {
97 | "fontname" : "Arial",
98 | "fontsize" : 13.0,
99 | "id" : "obj-66",
100 | "maxclass" : "comment",
101 | "numinlets" : 1,
102 | "numoutlets" : 0,
103 | "patching_rect" : [ 36.0, 85.0, 71.0, 21.0 ],
104 | "text" : "None",
105 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
106 | }
107 |
108 | }
109 | , {
110 | "box" : {
111 | "disabled" : [ 0, 0, 0 ],
112 | "id" : "obj-73",
113 | "itemtype" : 0,
114 | "maxclass" : "radiogroup",
115 | "numinlets" : 1,
116 | "numoutlets" : 1,
117 | "outlettype" : [ "" ],
118 | "parameter_enable" : 0,
119 | "patching_rect" : [ 18.0, 87.0, 93.5, 50.0 ],
120 | "size" : 3,
121 | "value" : 0
122 | }
123 |
124 | }
125 | , {
126 | "box" : {
127 | "channels" : 1,
128 | "fontsize" : 13.0,
129 | "id" : "obj-27",
130 | "lastchannelcount" : 0,
131 | "maxclass" : "live.gain~",
132 | "numinlets" : 1,
133 | "numoutlets" : 4,
134 | "orientation" : 1,
135 | "outlettype" : [ "signal", "", "float", "list" ],
136 | "parameter_enable" : 1,
137 | "patching_rect" : [ 18.0, 231.0, 147.0, 35.0 ],
138 | "saved_attribute_attributes" : {
139 | "valueof" : {
140 | "parameter_initial" : [ -50 ],
141 | "parameter_initial_enable" : 1,
142 | "parameter_longname" : "live.gain~",
143 | "parameter_mmax" : 6.0,
144 | "parameter_mmin" : -70.0,
145 | "parameter_shortname" : "live.gain~",
146 | "parameter_type" : 0,
147 | "parameter_unitstyle" : 4
148 | }
149 |
150 | }
151 | ,
152 | "showname" : 0,
153 | "varname" : "live.gain~"
154 | }
155 |
156 | }
157 | , {
158 | "box" : {
159 | "id" : "obj-7",
160 | "local" : 1,
161 | "maxclass" : "ezdac~",
162 | "numinlets" : 2,
163 | "numoutlets" : 0,
164 | "patching_rect" : [ 18.0, 284.0, 44.0, 44.0 ],
165 | "prototypename" : "helpfile"
166 | }
167 |
168 | }
169 | , {
170 | "box" : {
171 | "fontname" : "Arial",
172 | "fontsize" : 13.0,
173 | "id" : "obj-9",
174 | "maxclass" : "newobj",
175 | "numinlets" : 3,
176 | "numoutlets" : 1,
177 | "outlettype" : [ "signal" ],
178 | "patching_rect" : [ 18.0, 201.0, 139.0, 23.0 ],
179 | "text" : "selector~ 2"
180 | }
181 |
182 | }
183 | , {
184 | "box" : {
185 | "fontface" : 1,
186 | "fontsize" : 20.0,
187 | "id" : "obj-26",
188 | "maxclass" : "comment",
189 | "numinlets" : 1,
190 | "numoutlets" : 0,
191 | "patching_rect" : [ 19.0, 18.0, 318.0, 29.0 ],
192 | "text" : "01 - Timbre transfer (forward)"
193 | }
194 |
195 | }
196 | , {
197 | "box" : {
198 | "basictuning" : 440,
199 | "clipheight" : 42.0,
200 | "data" : {
201 | "clips" : [ {
202 | "absolutepath" : "huge.aiff",
203 | "filename" : "huge.aiff",
204 | "filekind" : "audiofile",
205 | "id" : "u374011037",
206 | "loop" : 1,
207 | "content_state" : {
208 | "loop" : 1
209 | }
210 |
211 | }
212 | ]
213 | }
214 | ,
215 | "followglobaltempo" : 0,
216 | "formantcorrection" : 0,
217 | "id" : "obj-24",
218 | "maxclass" : "playlist~",
219 | "mode" : "basic",
220 | "numinlets" : 1,
221 | "numoutlets" : 5,
222 | "originallength" : [ 0.0, "ticks" ],
223 | "originaltempo" : 120.0,
224 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
225 | "parameter_enable" : 0,
226 | "patching_rect" : [ 138.0, 87.0, 163.0, 43.0 ],
227 | "pitchcorrection" : 0,
228 | "quality" : "basic",
229 | "timestretch" : [ 0 ]
230 | }
231 |
232 | }
233 | , {
234 | "box" : {
235 | "id" : "obj-14",
236 | "maxclass" : "newobj",
237 | "numinlets" : 1,
238 | "numoutlets" : 1,
239 | "outlettype" : [ "" ],
240 | "patching_rect" : [ 332.0, 87.0, 70.0, 22.0 ],
241 | "text" : "loadmess 0"
242 | }
243 |
244 | }
245 | , {
246 | "box" : {
247 | "id" : "obj-4",
248 | "linecount" : 4,
249 | "maxclass" : "comment",
250 | "numinlets" : 1,
251 | "numoutlets" : 0,
252 | "patching_rect" : [ 284.0, 164.0, 246.0, 60.0 ],
253 | "text" : "nn~ [model] [operation]\nArguments:\nmodel = name of the model to use\noperation = type of processing to apply"
254 | }
255 |
256 | }
257 | , {
258 | "box" : {
259 | "attr" : "enable",
260 | "id" : "obj-8",
261 | "maxclass" : "attrui",
262 | "numinlets" : 1,
263 | "numoutlets" : 1,
264 | "outlettype" : [ "" ],
265 | "patching_rect" : [ 332.0, 113.0, 150.0, 22.0 ]
266 | }
267 |
268 | }
269 | , {
270 | "box" : {
271 | "id" : "obj-1",
272 | "maxclass" : "newobj",
273 | "numinlets" : 1,
274 | "numoutlets" : 1,
275 | "outlettype" : [ "signal" ],
276 | "patching_rect" : [ 138.0, 164.0, 126.0, 22.0 ],
277 | "text" : "nn~ darbouka forward"
278 | }
279 |
280 | }
281 | ],
282 | "lines" : [ {
283 | "patchline" : {
284 | "destination" : [ "obj-9", 2 ],
285 | "source" : [ "obj-1", 0 ]
286 | }
287 |
288 | }
289 | , {
290 | "patchline" : {
291 | "destination" : [ "obj-8", 0 ],
292 | "midpoints" : [ 341.5, 107.0, 341.5, 107.0 ],
293 | "source" : [ "obj-14", 0 ]
294 | }
295 |
296 | }
297 | , {
298 | "patchline" : {
299 | "destination" : [ "obj-1", 0 ],
300 | "midpoints" : [ 147.5, 136.0, 147.5, 136.0 ],
301 | "order" : 0,
302 | "source" : [ "obj-24", 0 ]
303 | }
304 |
305 | }
306 | , {
307 | "patchline" : {
308 | "destination" : [ "obj-9", 1 ],
309 | "midpoints" : [ 147.5, 153.0, 87.5, 153.0 ],
310 | "order" : 1,
311 | "source" : [ "obj-24", 0 ]
312 | }
313 |
314 | }
315 | , {
316 | "patchline" : {
317 | "destination" : [ "obj-7", 1 ],
318 | "order" : 0,
319 | "source" : [ "obj-27", 0 ]
320 | }
321 |
322 | }
323 | , {
324 | "patchline" : {
325 | "destination" : [ "obj-7", 0 ],
326 | "order" : 1,
327 | "source" : [ "obj-27", 0 ]
328 | }
329 |
330 | }
331 | , {
332 | "patchline" : {
333 | "destination" : [ "obj-9", 0 ],
334 | "source" : [ "obj-73", 0 ]
335 | }
336 |
337 | }
338 | , {
339 | "patchline" : {
340 | "destination" : [ "obj-1", 0 ],
341 | "midpoints" : [ 341.5, 149.0, 147.5, 149.0 ],
342 | "source" : [ "obj-8", 0 ]
343 | }
344 |
345 | }
346 | , {
347 | "patchline" : {
348 | "destination" : [ "obj-27", 0 ],
349 | "source" : [ "obj-9", 0 ]
350 | }
351 |
352 | }
353 | ],
354 | "parameters" : {
355 | "obj-27" : [ "live.gain~", "live.gain~", 0 ],
356 | "parameterbanks" : {
357 |
358 | }
359 | ,
360 | "inherited_shortname" : 1
361 | }
362 | ,
363 | "dependency_cache" : [ {
364 | "name" : "huge.aiff",
365 | "bootpath" : "C74:/docs/tutorial-patchers/msp-tut",
366 | "type" : "AIFF",
367 | "implicit" : 1
368 | }
369 | , {
370 | "name" : "nn~.mxo",
371 | "type" : "iLaX"
372 | }
373 | ],
374 | "autosave" : 0
375 | }
376 |
377 | }
378 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Deep machine learning in MaxMSP and Ableton Live
7 |
8 |
9 |
10 |
Deep machine Learning course for MaxMSP with tutorials in JAX, PyTorch and Numpy.
11 |
12 |
13 |
14 | Course given at the MaxMSP summer school (Tokyo university of the arts, Japan)
15 | Professor: Philippe Esling
16 |
17 |
18 |
25 |
26 |
27 | This repository contains the courses in creative machine learning applied to music and other creative mediums and how to develop and use these models inside MaxMSP and Ableton Live.
28 | This course is given at the [MaxMSP summer school](https://www.u-tokyo.ac.jp/en/index.html) ((Tokyo university of the arts, Japan)).
29 | The courses slides along with a set of MaxMSP patches, Max4Live devices and interactive Jupyter Notebooks will be updated along the course to provide all the examples.
30 | This course is proudly provided by the ACIDS group, part of the [Analysis / Synthesis](http://anasynth.ircam.fr/home/english) team at IRCAM.
31 | This course can be followed entirely online through the set of [Google slides](http://slides.google.com) and [Colab](http://colab.google.com) notebooks links provided openly along each lesson.
32 | However, we do recommend to fork the entire environment and follow the interactive notebooks through Jupyter lab to develop your
33 | own coding environment.
34 |
35 | **This course is meant to be only an introduction to all of these complex ideas.**
36 | **We highly recommend to follow the companion "[Creative Machine Learning](http://www.github.com/acids-ircam/creative_ml)" course to truly acheive mastery of deep models development**.
37 |
38 |
39 |
40 | Table of Contents
41 |
42 | - Lessons
43 |
55 |
56 | - Detailed lessons
57 | - Contribution
58 | - About
59 |
60 |
61 |
62 |
63 | ## Lessons
64 |
65 | **Quick explanation.** For each of the following lessons, you will find a set of badges containing links to different parts of the course, which allows you to follow either the _online_
66 | or _offline_ versions.
67 |
68 | - Online:
69 | [](https://docs.google.com/presentation/d/e/2PACX-1vRGy4H9JWjxK8d760O4pJT_7wfCett-rKjFV91d6jLkCHSMUntJjRA8a3r25M7_WrIDxggnjeXHdsi2/pub?start=false&loop=false&delayms=1000000&slide=id.p1)
70 | [](https://colab.research.google.com/drive/1tAIsucXMqHJ0hVTYcuoUzBt69lSn86i0?usp=sharing)
71 | - Offline:
72 | [](00_introduction.pdf)
73 | [](00_setup.ipynb)
74 |
75 | Simply click on the corresponding badge to follow the lesson. Note that if the badge is displayed in red color as follows
76 | []()
77 | it means that the content is not available yet and will be uploaded later.
78 |
79 | ---
80 |
81 | ### [01 - Creative machine learning](https://docs.google.com/presentation/d/e/2PACX-1vT5O2dGSyQT2CTwXHM1HVDsunzskacJ6LhJBUMUbLRRg4C34krOSzqf8y75YD19QQrWfvBJypKlHd1Z/pub?start=false&loop=false&delayms=60000)
82 |
83 | [](https://docs.google.com/presentation/d/e/2PACX-1vT5O2dGSyQT2CTwXHM1HVDsunzskacJ6LhJBUMUbLRRg4C34krOSzqf8y75YD19QQrWfvBJypKlHd1Z/pub?start=false&loop=false&delayms=60000)
84 | [](https://nubo.ircam.fr/index.php/s/p9HEpNy5yYWtQyy)
85 |
86 |
87 | This course provides a brief history of the development of artificial intelligence and introduces the general concepts of machine learning
88 | through a series of recent applications in the creative fields. This course also presents the pre-requisites, course specificities, toolboxes
89 | and tutorials that will be covered and how to setup the overall environment.
90 | Finally, we introduce the formal notions required to understand machine learning along with classic problems of linear models
91 | for regression and classification. We discuss the mathematical derivation for optimization and various problems of overfitting, cross-validation
92 | and model properties and complexity that are still quintessential in modern machine learning.
93 | We finish with a quick roundup of how to use existing deep models on GitHub.
94 |
95 |
96 | ---
97 |
98 | ### [02 - Using and developing deep models](https://docs.google.com/presentation/d/e/2PACX-1vRC4PpmQEgr0c6M7REkh_--slZA7xYXjZiS1MBjUbyUBBq-u10dDyzPoLKxlNXma4dd_YQC-JlnXOrw/pub?start=false&loop=false&delayms=60000)
99 |
100 | [](https://docs.google.com/presentation/d/e/2PACX-1vRC4PpmQEgr0c6M7REkh_--slZA7xYXjZiS1MBjUbyUBBq-u10dDyzPoLKxlNXma4dd_YQC-JlnXOrw/pub?start=false&loop=false&delayms=60000)
101 | [](https://nubo.ircam.fr/index.php/s/3nsrd7TM7yzL8RL)
102 |
103 | This course provides a brief history of the development of neural networks along with all mathematical and implementation details.
104 | We discuss geometric perspectives on neurons and gradient descent and how these interpretation naturally extend to the case
105 | of multi-layer perceptrons. We further introduce more advanced types of neural networks such as convolutional and recurrent architectures, along
106 | with more advanced models (LSTM, GRU) and recent developments such as residual architectures.
107 | We further discuss issues of regularization and initialization in networks.
108 | Finally, we finish this course by discussing the recent attention mechanism and transformer architectures and
109 | provide a set of modern applications.
110 |
111 | ---
112 |
113 | ### [03 - Embedding deep models in Max4Live](https://nubo.ircam.fr/index.php/s/mWZ9gcEt9Qgopa7)
114 |
115 | [](https://docs.google.com/presentation/d/e/2PACX-1vSVhSnx_dazxBS-PuLaG5Xz9DMC7IT5VM4t3xBhxgrtjjKiDJ8lZntirwDuiIfuhhB6OhYIdnwG5Ucn/pub?start=false&loop=false&delayms=3000)
116 | [](https://nubo.ircam.fr/index.php/s/mWZ9gcEt9Qgopa7)
117 |
118 | In this course, we will discuss how to embed existing deep models into MaxMSP.
119 | In order to capitalize on existing body of work in ML research, we will seek to run the model from Python (as most research is being done in this language).
120 | Hence, we will first discuss OSC communication and how to setup an OSC protocol and exchange between MaxMSP and Python.
121 | We briefly introduce the basics of Max4Live devices and show how to use these through the case study of the [FlowSynth](https://github.com/acids-ircam/flow_synthesizer) AI-based synthesizer control.
122 |
123 | ---
124 |
125 | ### [04 - Developing AI-based externals](https://nubo.ircam.fr/index.php/s/Yi66YqgZMBNySqF)
126 |
127 | [](https://docs.google.com/presentation/d/e/2PACX-1vRMJDveCOO0EkjLTf_x8usNAOcvVaGq6VdwXy3d6GKCnXFgJumYb2r27qp7RmFCmnr9P8NFxRHWnqF9/pub?start=false&loop=false&delayms=3000)
128 | [](https://nubo.ircam.fr/index.php/s/Yi66YqgZMBNySqF)
129 |
130 | In this course, we go further in how we can potentially embed existing deep models into MaxMSP.
131 | One of the key problem of the previous method (OSC and Python) resides in the lack of computational efficiency.
132 | Hence, we seek here to learn how to develop our own externals. We provide an introduction to the Max SDK in order to develop our own externals in C.
133 | We further discuss the Torchscript and Tensorflow Lite interfaces that allow to embed Python models into efficient C codes.
134 | We show how to use these skills through the case study of the [RAVE](https://github.com/acids-ircam/rave) real-time deep audio generation.
135 |
136 | ---
137 |
138 |
139 | ## Setup
140 |
141 | Along the tutorials, we provide a reference code for each section.
142 | This code contains helper functions that will alleviate you from the burden of data import and other sideline implementations.
143 | You will find designated spaces in each file to develop your solutions.
144 | The code is in Python (notebooks impending) and relies on the concept of [code sections](https://fr.mathworks.com/help/matlab/matlab_prog/run-sections-of-programs.html),
145 | which allows you to evaluate only part of the code (to avoid running long import tasks multiple times and concentrate on the question at hand.
146 |
147 | **Please refer to the setup notebook to check if your configuration is correct**
148 |
149 | ### Dependencies
150 |
151 | #### Python installation
152 |
153 | In order to get the baseline scripts and notebooks to work, you need to have a working distribution of `Python 3.7` as a minimum (we also recommend to update your version to `Python 3.9`). We will also be using a large set of libraries, with the following ones being the most prohiminent
154 |
155 | - [Numpy](https://numpy.org/)
156 | - [Scikit-Learn](https://scikit-learn.org/)
157 | - [PyTorch](https://pytorch.org/)
158 | - [Jax](https://pytorch.org/)
159 | - [Librosa](http://librosa.github.io/librosa/index.html)
160 | - [Matplotlib](https://matplotlib.org/)
161 |
162 | We highly recommend that you install [Pip](https://pypi.python.org/pypi/pip/) or [Anaconda](https://www.anaconda.com/download/) that will manage the automatic installation of those Python libraries (along with their dependencies). If you are using `Pip`, you can use the following commands
163 |
164 | ```
165 | pip install -r requirements.txt
166 | ```
167 |
168 | If you prefer to install all the libraries by hand to check their version, you can use individual commands
169 |
170 | ```
171 | pip install numpy
172 | pip install scikit-learn
173 | pip install torch
174 | pip install jax
175 | pip install librosa
176 | pip install matplotlib
177 | ```
178 |
179 | For those of you who have never coded in Python, here are a few interesting resources to get started.
180 |
181 | - [TutorialPoint](https://www.tutorialspoint.com/python/)
182 | - [Programiz](https://www.programiz.com/python-programming)
183 |
184 | #### Jupyter notebooks and lab
185 |
186 | In order to ease following the exercises along with the course, we will be relying on [**Jupyter Notebooks**](https://jupyter.org/). If you have never used a notebook before, we recommend that you look at their website to understand the concept. Here we also provide the instructions to install **Jupyter Lab** which is a more integrative version of notebooks. You can install it on your computer as follows (if you use `pip`)
187 |
188 | ```
189 | pip install jupyterlab
190 | ```
191 |
192 | Then, once installed, you can go to the folder where you cloned this repository, and type in
193 |
194 | ```
195 | jupyter lab
196 | ```
197 |
198 | ## Contribution
199 |
200 | Please take a look at our [contributing](CONTRIBUTING.md) guidelines if you're interested in helping!
201 |
202 | ## About
203 |
204 | Code and documentation copyright 2012-2023 by all members of ACIDS.
205 |
206 | Code released under the [CC-BY-NC-SA 4.0 licence](https://creativecommons.org/licenses/by-nc-sa/4.0/).
207 |
--------------------------------------------------------------------------------
/patches/03_max4live/02_bitcrusher.amxd:
--------------------------------------------------------------------------------
1 | ampf aaaameta ptch=, {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 5,
7 | "revision" : 4,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 809.0, 254.0, 727.0, 464.0 ],
14 | "openrect" : [ 0.0, 0.0, 0.0, 169.0 ],
15 | "bglocked" : 0,
16 | "openinpresentation" : 1,
17 | "default_fontsize" : 10.0,
18 | "default_fontface" : 0,
19 | "default_fontname" : "Arial Bold",
20 | "gridonopen" : 1,
21 | "gridsize" : [ 8.0, 8.0 ],
22 | "gridsnaponopen" : 1,
23 | "objectsnaponopen" : 1,
24 | "statusbarvisible" : 2,
25 | "toolbarvisible" : 1,
26 | "lefttoolbarpinned" : 0,
27 | "toptoolbarpinned" : 0,
28 | "righttoolbarpinned" : 0,
29 | "bottomtoolbarpinned" : 0,
30 | "toolbars_unpinned_last_save" : 0,
31 | "tallnewobj" : 0,
32 | "boxanimatetime" : 500,
33 | "enablehscroll" : 1,
34 | "enablevscroll" : 1,
35 | "devicewidth" : 0.0,
36 | "description" : "",
37 | "digest" : "",
38 | "tags" : "",
39 | "style" : "",
40 | "subpatcher_template" : "",
41 | "assistshowspatchername" : 0,
42 | "boxes" : [ {
43 | "box" : {
44 | "fontname" : "Arial",
45 | "fontsize" : 13.0,
46 | "id" : "obj-35",
47 | "maxclass" : "newobj",
48 | "numinlets" : 3,
49 | "numoutlets" : 1,
50 | "outlettype" : [ "signal" ],
51 | "patching_rect" : [ 133.0, 161.5, 67.0, 23.0 ],
52 | "text" : "degrade~"
53 | }
54 |
55 | }
56 | , {
57 | "box" : {
58 | "fontsize" : 14.0,
59 | "id" : "obj-34",
60 | "maxclass" : "live.slider",
61 | "numinlets" : 1,
62 | "numoutlets" : 2,
63 | "orientation" : 1,
64 | "outlettype" : [ "", "float" ],
65 | "parameter_enable" : 1,
66 | "patching_rect" : [ 337.0, 56.0, 137.0, 33.0 ],
67 | "presentation" : 1,
68 | "presentation_rect" : [ 13.0, 105.0, 123.0, 33.0 ],
69 | "saved_attribute_attributes" : {
70 | "valueof" : {
71 | "parameter_longname" : "bits",
72 | "parameter_mmax" : 1.0,
73 | "parameter_shortname" : "bits",
74 | "parameter_type" : 0,
75 | "parameter_unitstyle" : 1
76 | }
77 |
78 | }
79 | ,
80 | "shownumber" : 0,
81 | "varname" : "live.slider[2]"
82 | }
83 |
84 | }
85 | , {
86 | "box" : {
87 | "fontsize" : 14.0,
88 | "id" : "obj-25",
89 | "maxclass" : "live.comment",
90 | "numinlets" : 1,
91 | "numoutlets" : 0,
92 | "patching_rect" : [ 441.0, 32.0, 61.0, 23.0 ],
93 | "presentation" : 1,
94 | "presentation_rect" : [ 123.0, 140.0, 61.0, 23.0 ],
95 | "text" : "24",
96 | "textjustification" : 0
97 | }
98 |
99 | }
100 | , {
101 | "box" : {
102 | "fontsize" : 14.0,
103 | "id" : "obj-29",
104 | "maxclass" : "live.comment",
105 | "numinlets" : 1,
106 | "numoutlets" : 0,
107 | "patching_rect" : [ 390.0, 32.0, 61.0, 23.0 ],
108 | "text" : "12",
109 | "textjustification" : 0
110 | }
111 |
112 | }
113 | , {
114 | "box" : {
115 | "fontsize" : 14.0,
116 | "id" : "obj-31",
117 | "maxclass" : "live.comment",
118 | "numinlets" : 1,
119 | "numoutlets" : 0,
120 | "patching_rect" : [ 339.0, 32.0, 61.0, 23.0 ],
121 | "presentation" : 1,
122 | "presentation_rect" : [ 13.0, 140.0, 61.0, 23.0 ],
123 | "text" : "1",
124 | "textjustification" : 0
125 | }
126 |
127 | }
128 | , {
129 | "box" : {
130 | "fontsize" : 14.0,
131 | "id" : "obj-24",
132 | "maxclass" : "live.comment",
133 | "numinlets" : 1,
134 | "numoutlets" : 0,
135 | "patching_rect" : [ 242.0, 32.0, 61.0, 23.0 ],
136 | "presentation" : 1,
137 | "presentation_rect" : [ 109.0, 82.0, 61.0, 23.0 ],
138 | "text" : "full",
139 | "textjustification" : 0
140 | }
141 |
142 | }
143 | , {
144 | "box" : {
145 | "fontsize" : 14.0,
146 | "id" : "obj-21",
147 | "maxclass" : "live.comment",
148 | "numinlets" : 1,
149 | "numoutlets" : 0,
150 | "patching_rect" : [ 191.0, 32.0, 61.0, 23.0 ],
151 | "text" : "half",
152 | "textjustification" : 0
153 | }
154 |
155 | }
156 | , {
157 | "box" : {
158 | "fontsize" : 14.0,
159 | "id" : "obj-20",
160 | "maxclass" : "live.slider",
161 | "numinlets" : 1,
162 | "numoutlets" : 2,
163 | "orientation" : 1,
164 | "outlettype" : [ "", "float" ],
165 | "parameter_enable" : 1,
166 | "patching_rect" : [ 139.5, 52.0, 137.0, 33.0 ],
167 | "presentation" : 1,
168 | "presentation_rect" : [ 9.5, 47.0, 126.0, 33.0 ],
169 | "saved_attribute_attributes" : {
170 | "valueof" : {
171 | "parameter_longname" : "rate",
172 | "parameter_mmax" : 1.0,
173 | "parameter_shortname" : "rate",
174 | "parameter_type" : 0,
175 | "parameter_unitstyle" : 1
176 | }
177 |
178 | }
179 | ,
180 | "shownumber" : 0,
181 | "varname" : "live.slider[1]"
182 | }
183 |
184 | }
185 | , {
186 | "box" : {
187 | "cantchange" : 1,
188 | "fontname" : "Arial",
189 | "fontsize" : 13.0,
190 | "id" : "obj-23",
191 | "maxclass" : "number",
192 | "numinlets" : 1,
193 | "numoutlets" : 2,
194 | "outlettype" : [ "", "bang" ],
195 | "parameter_enable" : 0,
196 | "patching_rect" : [ 337.0, 98.0, 54.0, 23.0 ],
197 | "triangle" : 0,
198 | "triscale" : 0.9
199 | }
200 |
201 | }
202 | , {
203 | "box" : {
204 | "cantchange" : 1,
205 | "fontname" : "Arial",
206 | "fontsize" : 13.0,
207 | "format" : 6,
208 | "id" : "obj-32",
209 | "maxclass" : "flonum",
210 | "numinlets" : 1,
211 | "numoutlets" : 2,
212 | "outlettype" : [ "", "bang" ],
213 | "parameter_enable" : 0,
214 | "patching_rect" : [ 139.5, 98.0, 56.0, 23.0 ],
215 | "triangle" : 0,
216 | "triscale" : 0.9
217 | }
218 |
219 | }
220 | , {
221 | "box" : {
222 | "fontname" : "Arial",
223 | "fontsize" : 13.0,
224 | "id" : "obj-33",
225 | "maxclass" : "newobj",
226 | "numinlets" : 3,
227 | "numoutlets" : 1,
228 | "outlettype" : [ "signal" ],
229 | "patching_rect" : [ 47.0, 161.5, 67.0, 23.0 ],
230 | "text" : "degrade~"
231 | }
232 |
233 | }
234 | , {
235 | "box" : {
236 | "fontsize" : 13.0,
237 | "id" : "obj-12",
238 | "maxclass" : "live.comment",
239 | "numinlets" : 1,
240 | "numoutlets" : 0,
241 | "patching_rect" : [ 536.0, 32.0, 168.0, 22.0 ],
242 | "presentation" : 1,
243 | "presentation_rect" : [ 13.0, 5.0, 122.0, 22.0 ],
244 | "text" : "Our own bitcrusher",
245 | "textjustification" : 0
246 | }
247 |
248 | }
249 | , {
250 | "box" : {
251 | "id" : "obj-4",
252 | "lastchannelcount" : 0,
253 | "maxclass" : "live.gain~",
254 | "numinlets" : 2,
255 | "numoutlets" : 5,
256 | "outlettype" : [ "signal", "signal", "", "float", "list" ],
257 | "parameter_enable" : 1,
258 | "patching_rect" : [ 47.0, 230.0, 48.0, 136.0 ],
259 | "presentation" : 1,
260 | "presentation_rect" : [ 145.0, 13.0, 85.0, 141.0 ],
261 | "saved_attribute_attributes" : {
262 | "valueof" : {
263 | "parameter_longname" : "live.gain~",
264 | "parameter_mmax" : 6.0,
265 | "parameter_mmin" : -70.0,
266 | "parameter_shortname" : "live.gain~",
267 | "parameter_type" : 0,
268 | "parameter_unitstyle" : 4
269 | }
270 |
271 | }
272 | ,
273 | "varname" : "live.gain~"
274 | }
275 |
276 | }
277 | , {
278 | "box" : {
279 | "fontsize" : 14.0,
280 | "id" : "obj-11",
281 | "maxclass" : "live.comment",
282 | "numinlets" : 1,
283 | "numoutlets" : 0,
284 | "patching_rect" : [ 140.0, 32.0, 61.0, 23.0 ],
285 | "presentation" : 1,
286 | "presentation_rect" : [ 9.5, 82.0, 61.0, 23.0 ],
287 | "text" : "zero",
288 | "textjustification" : 0
289 | }
290 |
291 | }
292 | , {
293 | "box" : {
294 | "id" : "obj-10",
295 | "maxclass" : "live.comment",
296 | "numinlets" : 1,
297 | "numoutlets" : 0,
298 | "patching_rect" : [ 32.0, 34.0, 19.0, 18.0 ],
299 | "text" : "L",
300 | "textjustification" : 0
301 | }
302 |
303 | }
304 | , {
305 | "box" : {
306 | "id" : "obj-8",
307 | "maxclass" : "live.comment",
308 | "numinlets" : 1,
309 | "numoutlets" : 0,
310 | "patching_rect" : [ 105.0, 35.0, 19.0, 18.0 ],
311 | "text" : "R",
312 | "textjustification" : 0
313 | }
314 |
315 | }
316 | , {
317 | "box" : {
318 | "id" : "obj-6",
319 | "maxclass" : "live.comment",
320 | "numinlets" : 1,
321 | "numoutlets" : 0,
322 | "patching_rect" : [ 536.0, 56.0, 126.0, 18.0 ],
323 | "presentation" : 1,
324 | "presentation_rect" : [ 13.0, 23.0, 122.0, 18.0 ],
325 | "text" : "Max Summer School 2023",
326 | "textjustification" : 0
327 | }
328 |
329 | }
330 | , {
331 | "box" : {
332 | "id" : "obj-5",
333 | "maxclass" : "live.comment",
334 | "numinlets" : 1,
335 | "numoutlets" : 0,
336 | "patching_rect" : [ 47.0, 420.0, 63.0, 18.0 ],
337 | "text" : "Audio to Live",
338 | "textjustification" : 0
339 | }
340 |
341 | }
342 | , {
343 | "box" : {
344 | "id" : "obj-3",
345 | "maxclass" : "live.comment",
346 | "numinlets" : 1,
347 | "numoutlets" : 0,
348 | "patching_rect" : [ 38.0, 16.0, 74.0, 18.0 ],
349 | "text" : "Audio from Live",
350 | "textjustification" : 0
351 | }
352 |
353 | }
354 | , {
355 | "box" : {
356 | "fontname" : "Arial Bold",
357 | "fontsize" : 10.0,
358 | "id" : "obj-2",
359 | "maxclass" : "newobj",
360 | "numinlets" : 2,
361 | "numoutlets" : 2,
362 | "outlettype" : [ "signal", "signal" ],
363 | "patching_rect" : [ 47.0, 392.0, 53.0, 20.0 ],
364 | "text" : "plugout~"
365 | }
366 |
367 | }
368 | , {
369 | "box" : {
370 | "fontname" : "Arial Bold",
371 | "fontsize" : 10.0,
372 | "id" : "obj-1",
373 | "maxclass" : "newobj",
374 | "numinlets" : 2,
375 | "numoutlets" : 2,
376 | "outlettype" : [ "signal", "signal" ],
377 | "patching_rect" : [ 48.0, 34.0, 53.0, 20.0 ],
378 | "text" : "plugin~"
379 | }
380 |
381 | }
382 | ],
383 | "lines" : [ {
384 | "patchline" : {
385 | "destination" : [ "obj-33", 0 ],
386 | "source" : [ "obj-1", 0 ]
387 | }
388 |
389 | }
390 | , {
391 | "patchline" : {
392 | "destination" : [ "obj-35", 0 ],
393 | "source" : [ "obj-1", 1 ]
394 | }
395 |
396 | }
397 | , {
398 | "patchline" : {
399 | "destination" : [ "obj-32", 0 ],
400 | "source" : [ "obj-20", 0 ]
401 | }
402 |
403 | }
404 | , {
405 | "patchline" : {
406 | "destination" : [ "obj-33", 2 ],
407 | "midpoints" : [ 346.5, 145.5, 104.5, 145.5 ],
408 | "order" : 1,
409 | "source" : [ "obj-23", 0 ]
410 | }
411 |
412 | }
413 | , {
414 | "patchline" : {
415 | "destination" : [ "obj-35", 2 ],
416 | "order" : 0,
417 | "source" : [ "obj-23", 0 ]
418 | }
419 |
420 | }
421 | , {
422 | "patchline" : {
423 | "destination" : [ "obj-33", 1 ],
424 | "midpoints" : [ 149.0, 138.0, 80.5, 138.0 ],
425 | "order" : 1,
426 | "source" : [ "obj-32", 0 ]
427 | }
428 |
429 | }
430 | , {
431 | "patchline" : {
432 | "destination" : [ "obj-35", 1 ],
433 | "order" : 0,
434 | "source" : [ "obj-32", 0 ]
435 | }
436 |
437 | }
438 | , {
439 | "patchline" : {
440 | "destination" : [ "obj-4", 0 ],
441 | "source" : [ "obj-33", 0 ]
442 | }
443 |
444 | }
445 | , {
446 | "patchline" : {
447 | "destination" : [ "obj-23", 0 ],
448 | "source" : [ "obj-34", 0 ]
449 | }
450 |
451 | }
452 | , {
453 | "patchline" : {
454 | "destination" : [ "obj-4", 1 ],
455 | "source" : [ "obj-35", 0 ]
456 | }
457 |
458 | }
459 | , {
460 | "patchline" : {
461 | "destination" : [ "obj-2", 1 ],
462 | "source" : [ "obj-4", 1 ]
463 | }
464 |
465 | }
466 | , {
467 | "patchline" : {
468 | "destination" : [ "obj-2", 0 ],
469 | "source" : [ "obj-4", 0 ]
470 | }
471 |
472 | }
473 | ],
474 | "parameters" : {
475 | "obj-20" : [ "rate", "rate", 0 ],
476 | "obj-34" : [ "bits", "bits", 0 ],
477 | "obj-4" : [ "live.gain~", "live.gain~", 0 ],
478 | "parameterbanks" : {
479 | "0" : {
480 | "index" : 0,
481 | "name" : "",
482 | "parameters" : [ "-", "-", "-", "-", "-", "-", "-", "-" ]
483 | }
484 |
485 | }
486 | ,
487 | "inherited_shortname" : 1
488 | }
489 | ,
490 | "dependency_cache" : [ ],
491 | "latency" : 0,
492 | "is_mpe" : 0,
493 | "minimum_live_version" : "",
494 | "minimum_max_version" : "",
495 | "platform_compatibility" : 0,
496 | "project" : {
497 | "version" : 1,
498 | "creationdate" : 3590052493,
499 | "modificationdate" : 3590052493,
500 | "viewrect" : [ 0.0, 0.0, 300.0, 500.0 ],
501 | "autoorganize" : 1,
502 | "hideprojectwindow" : 1,
503 | "showdependencies" : 1,
504 | "autolocalize" : 0,
505 | "contents" : {
506 | "patchers" : {
507 |
508 | }
509 |
510 | }
511 | ,
512 | "layout" : {
513 |
514 | }
515 | ,
516 | "searchpath" : {
517 |
518 | }
519 | ,
520 | "detailsvisible" : 0,
521 | "amxdtype" : 1633771873,
522 | "readonly" : 0,
523 | "devpathtype" : 0,
524 | "devpath" : ".",
525 | "sortmode" : 0,
526 | "viewmode" : 0,
527 | "includepackages" : 0
528 | }
529 | ,
530 | "autosave" : 0,
531 | "saved_attribute_attributes" : {
532 | "default_plcolor" : {
533 | "expression" : ""
534 | }
535 |
536 | }
537 |
538 | }
539 |
540 | }
541 |
--------------------------------------------------------------------------------
/patches/01_rave/02_sources.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 59.0, 119.0, 853.0, 480.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "id" : "obj-24",
44 | "maxclass" : "dial",
45 | "numinlets" : 1,
46 | "numoutlets" : 1,
47 | "outlettype" : [ "float" ],
48 | "parameter_enable" : 0,
49 | "patching_rect" : [ 402.0, 93.5, 40.0, 40.0 ]
50 | }
51 |
52 | }
53 | , {
54 | "box" : {
55 | "fontname" : "Arial",
56 | "fontsize" : 13.0,
57 | "id" : "obj-23",
58 | "maxclass" : "comment",
59 | "numinlets" : 1,
60 | "numoutlets" : 0,
61 | "patching_rect" : [ 37.25, 135.0, 79.75, 21.0 ],
62 | "text" : "Synthesizer",
63 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
64 | }
65 |
66 | }
67 | , {
68 | "box" : {
69 | "fontname" : "Arial",
70 | "fontsize" : 13.0,
71 | "id" : "obj-19",
72 | "maxclass" : "comment",
73 | "numinlets" : 1,
74 | "numoutlets" : 0,
75 | "patching_rect" : [ 37.25, 119.0, 79.75, 21.0 ],
76 | "presentation_linecount" : 2,
77 | "text" : "Microphone",
78 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
79 | }
80 |
81 | }
82 | , {
83 | "box" : {
84 | "fontname" : "Arial",
85 | "fontsize" : 13.0,
86 | "id" : "obj-20",
87 | "maxclass" : "comment",
88 | "numinlets" : 1,
89 | "numoutlets" : 0,
90 | "patching_rect" : [ 37.25, 103.0, 78.75, 21.0 ],
91 | "text" : "Sample",
92 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
93 | }
94 |
95 | }
96 | , {
97 | "box" : {
98 | "fontname" : "Arial",
99 | "fontsize" : 13.0,
100 | "id" : "obj-21",
101 | "maxclass" : "comment",
102 | "numinlets" : 1,
103 | "numoutlets" : 0,
104 | "patching_rect" : [ 37.25, 87.0, 78.75, 21.0 ],
105 | "text" : "None",
106 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
107 | }
108 |
109 | }
110 | , {
111 | "box" : {
112 | "disabled" : [ 0, 0, 0, 0 ],
113 | "id" : "obj-22",
114 | "itemtype" : 0,
115 | "maxclass" : "radiogroup",
116 | "numinlets" : 1,
117 | "numoutlets" : 1,
118 | "outlettype" : [ "" ],
119 | "parameter_enable" : 0,
120 | "patching_rect" : [ 19.25, 89.0, 101.25, 66.0 ],
121 | "size" : 4,
122 | "value" : 2
123 | }
124 |
125 | }
126 | , {
127 | "box" : {
128 | "fontname" : "Arial",
129 | "fontsize" : 13.0,
130 | "id" : "obj-18",
131 | "maxclass" : "newobj",
132 | "numinlets" : 4,
133 | "numoutlets" : 1,
134 | "outlettype" : [ "signal" ],
135 | "patching_rect" : [ 146.0, 229.0, 169.0, 23.0 ],
136 | "text" : "selector~ 3"
137 | }
138 |
139 | }
140 | , {
141 | "box" : {
142 | "id" : "obj-17",
143 | "maxclass" : "ezadc~",
144 | "numinlets" : 1,
145 | "numoutlets" : 2,
146 | "outlettype" : [ "signal", "signal" ],
147 | "patching_rect" : [ 286.0, 88.0, 76.0, 76.0 ]
148 | }
149 |
150 | }
151 | , {
152 | "box" : {
153 | "id" : "obj-16",
154 | "maxclass" : "newobj",
155 | "numinlets" : 2,
156 | "numoutlets" : 1,
157 | "outlettype" : [ "signal" ],
158 | "patching_rect" : [ 402.0, 142.0, 60.0, 22.0 ],
159 | "text" : "saw~ 440"
160 | }
161 |
162 | }
163 | , {
164 | "box" : {
165 | "basictuning" : 440,
166 | "clipheight" : 29.0,
167 | "data" : {
168 | "clips" : [ {
169 | "absolutepath" : "morph.256.rom.aif",
170 | "filename" : "morph.256.rom.aif",
171 | "filekind" : "audiofile",
172 | "id" : "u741009561",
173 | "loop" : 1,
174 | "content_state" : {
175 | "loop" : 1
176 | }
177 |
178 | }
179 | ]
180 | }
181 | ,
182 | "followglobaltempo" : 0,
183 | "formantcorrection" : 0,
184 | "id" : "obj-13",
185 | "maxclass" : "playlist~",
186 | "mode" : "basic",
187 | "numinlets" : 1,
188 | "numoutlets" : 5,
189 | "originallength" : [ 0.0, "ticks" ],
190 | "originaltempo" : 120.0,
191 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
192 | "parameter_enable" : 0,
193 | "patching_rect" : [ 145.0, 125.0, 126.0, 29.0 ],
194 | "pitchcorrection" : 0,
195 | "quality" : "basic",
196 | "timestretch" : [ 0 ]
197 | }
198 |
199 | }
200 | , {
201 | "box" : {
202 | "basictuning" : 440,
203 | "clipheight" : 29.0,
204 | "data" : {
205 | "clips" : [ {
206 | "absolutepath" : "eroica.aiff",
207 | "filename" : "eroica.aiff",
208 | "filekind" : "audiofile",
209 | "id" : "u702009436",
210 | "loop" : 1,
211 | "content_state" : {
212 | "loop" : 1
213 | }
214 |
215 | }
216 | ]
217 | }
218 | ,
219 | "followglobaltempo" : 0,
220 | "formantcorrection" : 0,
221 | "id" : "obj-6",
222 | "maxclass" : "playlist~",
223 | "mode" : "basic",
224 | "numinlets" : 1,
225 | "numoutlets" : 5,
226 | "originallength" : [ 0.0, "ticks" ],
227 | "originaltempo" : 120.0,
228 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
229 | "parameter_enable" : 0,
230 | "patching_rect" : [ 145.0, 157.0, 126.0, 29.0 ],
231 | "pitchcorrection" : 0,
232 | "quality" : "basic",
233 | "timestretch" : [ 0 ]
234 | }
235 |
236 | }
237 | , {
238 | "box" : {
239 | "basictuning" : 440,
240 | "clipheight" : 29.0,
241 | "data" : {
242 | "clips" : [ {
243 | "absolutepath" : "drumLoop.aif",
244 | "filename" : "drumLoop.aif",
245 | "filekind" : "audiofile",
246 | "id" : "u689009351",
247 | "loop" : 1,
248 | "content_state" : {
249 | "loop" : 1
250 | }
251 |
252 | }
253 | ]
254 | }
255 | ,
256 | "followglobaltempo" : 0,
257 | "formantcorrection" : 0,
258 | "id" : "obj-15",
259 | "maxclass" : "playlist~",
260 | "mode" : "basic",
261 | "numinlets" : 1,
262 | "numoutlets" : 5,
263 | "originallength" : [ 0.0, "ticks" ],
264 | "originaltempo" : 120.0,
265 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
266 | "parameter_enable" : 0,
267 | "patching_rect" : [ 145.0, 88.0, 126.0, 29.0 ],
268 | "pitchcorrection" : 0,
269 | "quality" : "basic",
270 | "timestretch" : [ 0 ]
271 | }
272 |
273 | }
274 | , {
275 | "box" : {
276 | "fontface" : 0,
277 | "fontsize" : 14.0,
278 | "id" : "obj-11",
279 | "maxclass" : "comment",
280 | "numinlets" : 1,
281 | "numoutlets" : 0,
282 | "patching_rect" : [ 19.0, 49.0, 442.0, 22.0 ],
283 | "presentation_linecount" : 2,
284 | "text" : "This idea of audio timbre transfer works for any type of input sounds."
285 | }
286 |
287 | }
288 | , {
289 | "box" : {
290 | "fontname" : "Arial",
291 | "fontsize" : 13.0,
292 | "id" : "obj-63",
293 | "maxclass" : "comment",
294 | "numinlets" : 1,
295 | "numoutlets" : 0,
296 | "patching_rect" : [ 45.0, 261.0, 72.0, 21.0 ],
297 | "text" : "Darbouka",
298 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
299 | }
300 |
301 | }
302 | , {
303 | "box" : {
304 | "fontname" : "Arial",
305 | "fontsize" : 13.0,
306 | "id" : "obj-64",
307 | "maxclass" : "comment",
308 | "numinlets" : 1,
309 | "numoutlets" : 0,
310 | "patching_rect" : [ 45.0, 245.0, 71.0, 21.0 ],
311 | "text" : "Dry",
312 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
313 | }
314 |
315 | }
316 | , {
317 | "box" : {
318 | "fontname" : "Arial",
319 | "fontsize" : 13.0,
320 | "id" : "obj-66",
321 | "maxclass" : "comment",
322 | "numinlets" : 1,
323 | "numoutlets" : 0,
324 | "patching_rect" : [ 45.0, 229.0, 71.0, 21.0 ],
325 | "text" : "None",
326 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
327 | }
328 |
329 | }
330 | , {
331 | "box" : {
332 | "disabled" : [ 0, 0, 0 ],
333 | "id" : "obj-73",
334 | "itemtype" : 0,
335 | "maxclass" : "radiogroup",
336 | "numinlets" : 1,
337 | "numoutlets" : 1,
338 | "outlettype" : [ "" ],
339 | "parameter_enable" : 0,
340 | "patching_rect" : [ 27.0, 231.0, 93.5, 50.0 ],
341 | "size" : 3,
342 | "value" : 2
343 | }
344 |
345 | }
346 | , {
347 | "box" : {
348 | "channels" : 1,
349 | "fontsize" : 13.0,
350 | "id" : "obj-27",
351 | "lastchannelcount" : 0,
352 | "maxclass" : "live.gain~",
353 | "numinlets" : 1,
354 | "numoutlets" : 4,
355 | "orientation" : 1,
356 | "outlettype" : [ "signal", "", "float", "list" ],
357 | "parameter_enable" : 1,
358 | "patching_rect" : [ 26.0, 355.0, 147.0, 35.0 ],
359 | "saved_attribute_attributes" : {
360 | "valueof" : {
361 | "parameter_initial" : [ -50 ],
362 | "parameter_initial_enable" : 1,
363 | "parameter_longname" : "live.gain~",
364 | "parameter_mmax" : 6.0,
365 | "parameter_mmin" : -70.0,
366 | "parameter_shortname" : "live.gain~",
367 | "parameter_type" : 0,
368 | "parameter_unitstyle" : 4
369 | }
370 |
371 | }
372 | ,
373 | "showname" : 0,
374 | "varname" : "live.gain~"
375 | }
376 |
377 | }
378 | , {
379 | "box" : {
380 | "id" : "obj-7",
381 | "local" : 1,
382 | "maxclass" : "ezdac~",
383 | "numinlets" : 2,
384 | "numoutlets" : 0,
385 | "patching_rect" : [ 26.0, 408.0, 44.0, 44.0 ],
386 | "prototypename" : "helpfile"
387 | }
388 |
389 | }
390 | , {
391 | "box" : {
392 | "fontname" : "Arial",
393 | "fontsize" : 13.0,
394 | "id" : "obj-9",
395 | "maxclass" : "newobj",
396 | "numinlets" : 3,
397 | "numoutlets" : 1,
398 | "outlettype" : [ "signal" ],
399 | "patching_rect" : [ 26.0, 324.0, 139.0, 23.0 ],
400 | "text" : "selector~ 2"
401 | }
402 |
403 | }
404 | , {
405 | "box" : {
406 | "fontface" : 1,
407 | "fontsize" : 20.0,
408 | "id" : "obj-26",
409 | "maxclass" : "comment",
410 | "numinlets" : 1,
411 | "numoutlets" : 0,
412 | "patching_rect" : [ 19.0, 18.0, 318.0, 29.0 ],
413 | "text" : "02 - Different audio sources"
414 | }
415 |
416 | }
417 | , {
418 | "box" : {
419 | "id" : "obj-1",
420 | "maxclass" : "newobj",
421 | "numinlets" : 1,
422 | "numoutlets" : 1,
423 | "outlettype" : [ "signal" ],
424 | "patching_rect" : [ 146.0, 274.0, 131.0, 22.0 ],
425 | "text" : "nn~ darbouka forward"
426 | }
427 |
428 | }
429 | ],
430 | "lines" : [ {
431 | "patchline" : {
432 | "destination" : [ "obj-9", 2 ],
433 | "source" : [ "obj-1", 0 ]
434 | }
435 |
436 | }
437 | , {
438 | "patchline" : {
439 | "destination" : [ "obj-18", 1 ],
440 | "midpoints" : [ 154.5, 156.0, 132.0, 156.0, 132.0, 202.0, 205.5, 202.0 ],
441 | "source" : [ "obj-13", 0 ]
442 | }
443 |
444 | }
445 | , {
446 | "patchline" : {
447 | "destination" : [ "obj-18", 1 ],
448 | "midpoints" : [ 154.5, 120.0, 134.0, 120.0, 134.0, 203.0, 205.5, 203.0 ],
449 | "source" : [ "obj-15", 0 ]
450 | }
451 |
452 | }
453 | , {
454 | "patchline" : {
455 | "destination" : [ "obj-18", 3 ],
456 | "midpoints" : [ 411.5, 203.0, 305.5, 203.0 ],
457 | "source" : [ "obj-16", 0 ]
458 | }
459 |
460 | }
461 | , {
462 | "patchline" : {
463 | "destination" : [ "obj-18", 2 ],
464 | "midpoints" : [ 352.5, 203.0, 255.5, 203.0 ],
465 | "source" : [ "obj-17", 1 ]
466 | }
467 |
468 | }
469 | , {
470 | "patchline" : {
471 | "destination" : [ "obj-18", 2 ],
472 | "midpoints" : [ 295.5, 203.0, 255.5, 203.0 ],
473 | "source" : [ "obj-17", 0 ]
474 | }
475 |
476 | }
477 | , {
478 | "patchline" : {
479 | "destination" : [ "obj-1", 0 ],
480 | "order" : 0,
481 | "source" : [ "obj-18", 0 ]
482 | }
483 |
484 | }
485 | , {
486 | "patchline" : {
487 | "destination" : [ "obj-9", 1 ],
488 | "order" : 1,
489 | "source" : [ "obj-18", 0 ]
490 | }
491 |
492 | }
493 | , {
494 | "patchline" : {
495 | "destination" : [ "obj-18", 0 ],
496 | "midpoints" : [ 28.75, 202.0, 155.5, 202.0 ],
497 | "source" : [ "obj-22", 0 ]
498 | }
499 |
500 | }
501 | , {
502 | "patchline" : {
503 | "destination" : [ "obj-16", 0 ],
504 | "source" : [ "obj-24", 0 ]
505 | }
506 |
507 | }
508 | , {
509 | "patchline" : {
510 | "destination" : [ "obj-7", 1 ],
511 | "order" : 0,
512 | "source" : [ "obj-27", 0 ]
513 | }
514 |
515 | }
516 | , {
517 | "patchline" : {
518 | "destination" : [ "obj-7", 0 ],
519 | "order" : 1,
520 | "source" : [ "obj-27", 0 ]
521 | }
522 |
523 | }
524 | , {
525 | "patchline" : {
526 | "destination" : [ "obj-18", 1 ],
527 | "midpoints" : [ 154.5, 202.0, 205.5, 202.0 ],
528 | "source" : [ "obj-6", 0 ]
529 | }
530 |
531 | }
532 | , {
533 | "patchline" : {
534 | "destination" : [ "obj-9", 0 ],
535 | "source" : [ "obj-73", 0 ]
536 | }
537 |
538 | }
539 | , {
540 | "patchline" : {
541 | "destination" : [ "obj-27", 0 ],
542 | "source" : [ "obj-9", 0 ]
543 | }
544 |
545 | }
546 | ],
547 | "parameters" : {
548 | "obj-27" : [ "live.gain~", "live.gain~", 0 ],
549 | "parameterbanks" : {
550 |
551 | }
552 | ,
553 | "inherited_shortname" : 1
554 | }
555 | ,
556 | "dependency_cache" : [ {
557 | "name" : "drumLoop.aif",
558 | "bootpath" : "C74:/media/msp",
559 | "type" : "AIFF",
560 | "implicit" : 1
561 | }
562 | , {
563 | "name" : "eroica.aiff",
564 | "bootpath" : "C74:/docs/tutorial-patchers/msp-tut",
565 | "type" : "AIFF",
566 | "implicit" : 1
567 | }
568 | , {
569 | "name" : "morph.256.rom.aif",
570 | "bootpath" : "C74:/packages/BEAP/misc",
571 | "type" : "AIFF",
572 | "implicit" : 1
573 | }
574 | , {
575 | "name" : "nn~.mxo",
576 | "type" : "iLaX"
577 | }
578 | ],
579 | "autosave" : 0
580 | }
581 |
582 | }
583 |
--------------------------------------------------------------------------------
/patches/01_rave/04_operations.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 59.0, 119.0, 853.0, 480.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "fontface" : 0,
44 | "fontsize" : 14.0,
45 | "id" : "obj-48",
46 | "maxclass" : "comment",
47 | "numinlets" : 1,
48 | "numoutlets" : 0,
49 | "patching_rect" : [ 470.52380833014297, 98.196080923080444, 442.0, 22.0 ],
50 | "text" : "Unconditional (infinite) generation"
51 | }
52 |
53 | }
54 | , {
55 | "box" : {
56 | "fontface" : 1,
57 | "fontsize" : 14.0,
58 | "id" : "obj-47",
59 | "maxclass" : "comment",
60 | "numinlets" : 1,
61 | "numoutlets" : 0,
62 | "patching_rect" : [ 470.52380833014297, 80.0, 126.0, 22.0 ],
63 | "text" : "Prior"
64 | }
65 |
66 | }
67 | , {
68 | "box" : {
69 | "fontface" : 1,
70 | "fontsize" : 14.0,
71 | "id" : "obj-12",
72 | "maxclass" : "comment",
73 | "numinlets" : 1,
74 | "numoutlets" : 0,
75 | "patching_rect" : [ 323.0, 80.0, 126.0, 22.0 ],
76 | "text" : "Encode / Decode"
77 | }
78 |
79 | }
80 | , {
81 | "box" : {
82 | "fontface" : 1,
83 | "fontsize" : 14.0,
84 | "id" : "obj-46",
85 | "maxclass" : "comment",
86 | "numinlets" : 1,
87 | "numoutlets" : 0,
88 | "patching_rect" : [ 168.0, 80.0, 74.904751896858215, 22.0 ],
89 | "text" : "Forward"
90 | }
91 |
92 | }
93 | , {
94 | "box" : {
95 | "id" : "obj-43",
96 | "maxclass" : "newobj",
97 | "numinlets" : 8,
98 | "numoutlets" : 1,
99 | "outlettype" : [ "signal" ],
100 | "patching_rect" : [ 470.523808181285858, 194.428575456142426, 106.0, 22.0 ],
101 | "text" : "nn~ wheel decode"
102 | }
103 |
104 | }
105 | , {
106 | "box" : {
107 | "id" : "obj-42",
108 | "maxclass" : "newobj",
109 | "numinlets" : 1,
110 | "numoutlets" : 8,
111 | "outlettype" : [ "signal", "signal", "signal", "signal", "signal", "signal", "signal", "signal" ],
112 | "patching_rect" : [ 470.52380833014297, 160.0, 105.999999479000394, 22.0 ],
113 | "text" : "nn~ wheel prior"
114 | }
115 |
116 | }
117 | , {
118 | "box" : {
119 | "id" : "obj-41",
120 | "maxclass" : "newobj",
121 | "numinlets" : 8,
122 | "numoutlets" : 1,
123 | "outlettype" : [ "signal" ],
124 | "patching_rect" : [ 323.0, 193.0, 106.0, 22.0 ],
125 | "text" : "nn~ wheel decode"
126 | }
127 |
128 | }
129 | , {
130 | "box" : {
131 | "basictuning" : 440,
132 | "clipheight" : 29.0,
133 | "data" : {
134 | "clips" : [ {
135 | "absolutepath" : "drumLoop.aif",
136 | "filename" : "drumLoop.aif",
137 | "filekind" : "audiofile",
138 | "id" : "u689009351",
139 | "loop" : 1,
140 | "content_state" : {
141 | "loop" : 1
142 | }
143 |
144 | }
145 | ]
146 | }
147 | ,
148 | "followglobaltempo" : 0,
149 | "formantcorrection" : 0,
150 | "id" : "obj-39",
151 | "maxclass" : "playlist~",
152 | "mode" : "basic",
153 | "numinlets" : 1,
154 | "numoutlets" : 5,
155 | "originallength" : [ 0.0, "ticks" ],
156 | "originaltempo" : 120.0,
157 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
158 | "parameter_enable" : 0,
159 | "patching_rect" : [ 323.0, 111.0, 126.0, 29.0 ],
160 | "pitchcorrection" : 0,
161 | "quality" : "basic",
162 | "timestretch" : [ 0 ]
163 | }
164 |
165 | }
166 | , {
167 | "box" : {
168 | "id" : "obj-40",
169 | "maxclass" : "newobj",
170 | "numinlets" : 1,
171 | "numoutlets" : 8,
172 | "outlettype" : [ "signal", "signal", "signal", "signal", "signal", "signal", "signal", "signal" ],
173 | "patching_rect" : [ 323.0, 160.0, 106.0, 22.0 ],
174 | "text" : "nn~ wheel encode"
175 | }
176 |
177 | }
178 | , {
179 | "box" : {
180 | "fontname" : "Arial",
181 | "fontsize" : 13.0,
182 | "id" : "obj-38",
183 | "maxclass" : "comment",
184 | "numinlets" : 1,
185 | "numoutlets" : 0,
186 | "patching_rect" : [ 45.0, 160.0, 72.0, 21.0 ],
187 | "text" : "Prior",
188 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
189 | }
190 |
191 | }
192 | , {
193 | "box" : {
194 | "basictuning" : 440,
195 | "clipheight" : 29.0,
196 | "data" : {
197 | "clips" : [ {
198 | "absolutepath" : "drumLoop.aif",
199 | "filename" : "drumLoop.aif",
200 | "filekind" : "audiofile",
201 | "id" : "u689009351",
202 | "loop" : 1,
203 | "content_state" : {
204 | "loop" : 1
205 | }
206 |
207 | }
208 | ]
209 | }
210 | ,
211 | "followglobaltempo" : 0,
212 | "formantcorrection" : 0,
213 | "id" : "obj-15",
214 | "maxclass" : "playlist~",
215 | "mode" : "basic",
216 | "numinlets" : 1,
217 | "numoutlets" : 5,
218 | "originallength" : [ 0.0, "ticks" ],
219 | "originaltempo" : 120.0,
220 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
221 | "parameter_enable" : 0,
222 | "patching_rect" : [ 175.0, 111.0, 126.0, 29.0 ],
223 | "pitchcorrection" : 0,
224 | "quality" : "basic",
225 | "timestretch" : [ 0 ]
226 | }
227 |
228 | }
229 | , {
230 | "box" : {
231 | "fontface" : 0,
232 | "fontsize" : 14.0,
233 | "id" : "obj-11",
234 | "maxclass" : "comment",
235 | "numinlets" : 1,
236 | "numoutlets" : 0,
237 | "patching_rect" : [ 19.0, 49.0, 442.0, 22.0 ],
238 | "text" : "There are different ways of operating the model. "
239 | }
240 |
241 | }
242 | , {
243 | "box" : {
244 | "fontname" : "Arial",
245 | "fontsize" : 13.0,
246 | "id" : "obj-63",
247 | "maxclass" : "comment",
248 | "numinlets" : 1,
249 | "numoutlets" : 0,
250 | "patching_rect" : [ 45.0, 143.0, 72.0, 21.0 ],
251 | "text" : "Decode",
252 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
253 | }
254 |
255 | }
256 | , {
257 | "box" : {
258 | "fontname" : "Arial",
259 | "fontsize" : 13.0,
260 | "id" : "obj-64",
261 | "maxclass" : "comment",
262 | "numinlets" : 1,
263 | "numoutlets" : 0,
264 | "patching_rect" : [ 45.0, 127.0, 71.0, 21.0 ],
265 | "text" : "Forward",
266 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
267 | }
268 |
269 | }
270 | , {
271 | "box" : {
272 | "fontname" : "Arial",
273 | "fontsize" : 13.0,
274 | "id" : "obj-66",
275 | "maxclass" : "comment",
276 | "numinlets" : 1,
277 | "numoutlets" : 0,
278 | "patching_rect" : [ 45.0, 111.0, 71.0, 21.0 ],
279 | "text" : "None",
280 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
281 | }
282 |
283 | }
284 | , {
285 | "box" : {
286 | "disabled" : [ 0, 0, 0, 0 ],
287 | "id" : "obj-73",
288 | "itemtype" : 0,
289 | "maxclass" : "radiogroup",
290 | "numinlets" : 1,
291 | "numoutlets" : 1,
292 | "outlettype" : [ "" ],
293 | "parameter_enable" : 0,
294 | "patching_rect" : [ 27.0, 113.0, 93.5, 66.0 ],
295 | "size" : 4,
296 | "value" : 3
297 | }
298 |
299 | }
300 | , {
301 | "box" : {
302 | "channels" : 1,
303 | "fontsize" : 13.0,
304 | "id" : "obj-27",
305 | "lastchannelcount" : 0,
306 | "maxclass" : "live.gain~",
307 | "numinlets" : 1,
308 | "numoutlets" : 4,
309 | "orientation" : 1,
310 | "outlettype" : [ "signal", "", "float", "list" ],
311 | "parameter_enable" : 1,
312 | "patching_rect" : [ 27.0, 280.0, 147.0, 35.0 ],
313 | "saved_attribute_attributes" : {
314 | "valueof" : {
315 | "parameter_initial" : [ -50 ],
316 | "parameter_initial_enable" : 1,
317 | "parameter_longname" : "live.gain~",
318 | "parameter_mmax" : 6.0,
319 | "parameter_mmin" : -70.0,
320 | "parameter_shortname" : "live.gain~",
321 | "parameter_type" : 0,
322 | "parameter_unitstyle" : 4
323 | }
324 |
325 | }
326 | ,
327 | "showname" : 0,
328 | "varname" : "live.gain~"
329 | }
330 |
331 | }
332 | , {
333 | "box" : {
334 | "id" : "obj-7",
335 | "local" : 1,
336 | "maxclass" : "ezdac~",
337 | "numinlets" : 2,
338 | "numoutlets" : 0,
339 | "patching_rect" : [ 27.0, 333.0, 44.0, 44.0 ],
340 | "prototypename" : "helpfile"
341 | }
342 |
343 | }
344 | , {
345 | "box" : {
346 | "fontname" : "Arial",
347 | "fontsize" : 13.0,
348 | "id" : "obj-9",
349 | "maxclass" : "newobj",
350 | "numinlets" : 4,
351 | "numoutlets" : 1,
352 | "outlettype" : [ "signal" ],
353 | "patching_rect" : [ 27.0, 249.0, 462.999999999999943, 23.0 ],
354 | "text" : "selector~ 3"
355 | }
356 |
357 | }
358 | , {
359 | "box" : {
360 | "fontface" : 1,
361 | "fontsize" : 20.0,
362 | "id" : "obj-26",
363 | "maxclass" : "comment",
364 | "numinlets" : 1,
365 | "numoutlets" : 0,
366 | "patching_rect" : [ 19.0, 18.0, 447.0, 29.0 ],
367 | "text" : "04 - Different operations"
368 | }
369 |
370 | }
371 | , {
372 | "box" : {
373 | "id" : "obj-1",
374 | "maxclass" : "newobj",
375 | "numinlets" : 1,
376 | "numoutlets" : 1,
377 | "outlettype" : [ "signal" ],
378 | "patching_rect" : [ 175.0, 160.0, 107.0, 22.0 ],
379 | "text" : "nn~ wheel forward"
380 | }
381 |
382 | }
383 | , {
384 | "box" : {
385 | "attr" : "enable",
386 | "id" : "obj-45",
387 | "maxclass" : "attrui",
388 | "numinlets" : 1,
389 | "numoutlets" : 1,
390 | "outlettype" : [ "" ],
391 | "patching_rect" : [ 470.52380833014297, 126.0, 150.0, 22.0 ]
392 | }
393 |
394 | }
395 | ],
396 | "lines" : [ {
397 | "patchline" : {
398 | "destination" : [ "obj-9", 1 ],
399 | "source" : [ "obj-1", 0 ]
400 | }
401 |
402 | }
403 | , {
404 | "patchline" : {
405 | "destination" : [ "obj-1", 0 ],
406 | "source" : [ "obj-15", 0 ]
407 | }
408 |
409 | }
410 | , {
411 | "patchline" : {
412 | "destination" : [ "obj-7", 1 ],
413 | "order" : 0,
414 | "source" : [ "obj-27", 0 ]
415 | }
416 |
417 | }
418 | , {
419 | "patchline" : {
420 | "destination" : [ "obj-7", 0 ],
421 | "order" : 1,
422 | "source" : [ "obj-27", 0 ]
423 | }
424 |
425 | }
426 | , {
427 | "patchline" : {
428 | "destination" : [ "obj-40", 0 ],
429 | "source" : [ "obj-39", 0 ]
430 | }
431 |
432 | }
433 | , {
434 | "patchline" : {
435 | "destination" : [ "obj-41", 7 ],
436 | "source" : [ "obj-40", 7 ]
437 | }
438 |
439 | }
440 | , {
441 | "patchline" : {
442 | "destination" : [ "obj-41", 6 ],
443 | "source" : [ "obj-40", 6 ]
444 | }
445 |
446 | }
447 | , {
448 | "patchline" : {
449 | "destination" : [ "obj-41", 5 ],
450 | "source" : [ "obj-40", 5 ]
451 | }
452 |
453 | }
454 | , {
455 | "patchline" : {
456 | "destination" : [ "obj-41", 4 ],
457 | "source" : [ "obj-40", 4 ]
458 | }
459 |
460 | }
461 | , {
462 | "patchline" : {
463 | "destination" : [ "obj-41", 3 ],
464 | "source" : [ "obj-40", 3 ]
465 | }
466 |
467 | }
468 | , {
469 | "patchline" : {
470 | "destination" : [ "obj-41", 2 ],
471 | "source" : [ "obj-40", 2 ]
472 | }
473 |
474 | }
475 | , {
476 | "patchline" : {
477 | "destination" : [ "obj-41", 1 ],
478 | "source" : [ "obj-40", 1 ]
479 | }
480 |
481 | }
482 | , {
483 | "patchline" : {
484 | "destination" : [ "obj-41", 0 ],
485 | "source" : [ "obj-40", 0 ]
486 | }
487 |
488 | }
489 | , {
490 | "patchline" : {
491 | "destination" : [ "obj-9", 2 ],
492 | "midpoints" : [ 332.5, 231.5, 332.499999999999943, 231.5 ],
493 | "source" : [ "obj-41", 0 ]
494 | }
495 |
496 | }
497 | , {
498 | "patchline" : {
499 | "destination" : [ "obj-43", 7 ],
500 | "source" : [ "obj-42", 7 ]
501 | }
502 |
503 | }
504 | , {
505 | "patchline" : {
506 | "destination" : [ "obj-43", 6 ],
507 | "source" : [ "obj-42", 6 ]
508 | }
509 |
510 | }
511 | , {
512 | "patchline" : {
513 | "destination" : [ "obj-43", 5 ],
514 | "source" : [ "obj-42", 5 ]
515 | }
516 |
517 | }
518 | , {
519 | "patchline" : {
520 | "destination" : [ "obj-43", 4 ],
521 | "source" : [ "obj-42", 4 ]
522 | }
523 |
524 | }
525 | , {
526 | "patchline" : {
527 | "destination" : [ "obj-43", 3 ],
528 | "source" : [ "obj-42", 3 ]
529 | }
530 |
531 | }
532 | , {
533 | "patchline" : {
534 | "destination" : [ "obj-43", 2 ],
535 | "source" : [ "obj-42", 2 ]
536 | }
537 |
538 | }
539 | , {
540 | "patchline" : {
541 | "destination" : [ "obj-43", 1 ],
542 | "source" : [ "obj-42", 1 ]
543 | }
544 |
545 | }
546 | , {
547 | "patchline" : {
548 | "destination" : [ "obj-43", 0 ],
549 | "source" : [ "obj-42", 0 ]
550 | }
551 |
552 | }
553 | , {
554 | "patchline" : {
555 | "destination" : [ "obj-9", 3 ],
556 | "source" : [ "obj-43", 0 ]
557 | }
558 |
559 | }
560 | , {
561 | "patchline" : {
562 | "destination" : [ "obj-42", 0 ],
563 | "source" : [ "obj-45", 0 ]
564 | }
565 |
566 | }
567 | , {
568 | "patchline" : {
569 | "destination" : [ "obj-9", 0 ],
570 | "source" : [ "obj-73", 0 ]
571 | }
572 |
573 | }
574 | , {
575 | "patchline" : {
576 | "destination" : [ "obj-27", 0 ],
577 | "source" : [ "obj-9", 0 ]
578 | }
579 |
580 | }
581 | ],
582 | "parameters" : {
583 | "obj-27" : [ "live.gain~", "live.gain~", 0 ],
584 | "parameterbanks" : {
585 |
586 | }
587 | ,
588 | "inherited_shortname" : 1
589 | }
590 | ,
591 | "dependency_cache" : [ {
592 | "name" : "drumLoop.aif",
593 | "bootpath" : "C74:/media/msp",
594 | "type" : "AIFF",
595 | "implicit" : 1
596 | }
597 | , {
598 | "name" : "nn~.mxo",
599 | "type" : "iLaX"
600 | }
601 | ],
602 | "autosave" : 0
603 | }
604 |
605 | }
606 |
--------------------------------------------------------------------------------
/patches/01_rave/05_control.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 59.0, 119.0, 1005.0, 714.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "fontface" : 1,
44 | "fontsize" : 14.0,
45 | "id" : "obj-22",
46 | "maxclass" : "comment",
47 | "numinlets" : 1,
48 | "numoutlets" : 0,
49 | "patching_rect" : [ 378.0, 92.0, 197.904751896858215, 22.0 ],
50 | "text" : "Multiple dimension control"
51 | }
52 |
53 | }
54 | , {
55 | "box" : {
56 | "fontname" : "Arial",
57 | "fontsize" : 13.0,
58 | "id" : "obj-63",
59 | "maxclass" : "comment",
60 | "numinlets" : 1,
61 | "numoutlets" : 0,
62 | "patching_rect" : [ 45.0, 347.928575456142426, 72.0, 21.0 ],
63 | "text" : "Multiple",
64 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
65 | }
66 |
67 | }
68 | , {
69 | "box" : {
70 | "fontname" : "Arial",
71 | "fontsize" : 13.0,
72 | "id" : "obj-64",
73 | "maxclass" : "comment",
74 | "numinlets" : 1,
75 | "numoutlets" : 0,
76 | "patching_rect" : [ 45.0, 331.928575456142426, 71.0, 21.0 ],
77 | "text" : "Single",
78 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
79 | }
80 |
81 | }
82 | , {
83 | "box" : {
84 | "fontname" : "Arial",
85 | "fontsize" : 13.0,
86 | "id" : "obj-66",
87 | "maxclass" : "comment",
88 | "numinlets" : 1,
89 | "numoutlets" : 0,
90 | "patching_rect" : [ 45.0, 315.928575456142426, 71.0, 21.0 ],
91 | "text" : "None",
92 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
93 | }
94 |
95 | }
96 | , {
97 | "box" : {
98 | "disabled" : [ 0, 0, 0 ],
99 | "id" : "obj-73",
100 | "itemtype" : 0,
101 | "maxclass" : "radiogroup",
102 | "numinlets" : 1,
103 | "numoutlets" : 1,
104 | "outlettype" : [ "" ],
105 | "parameter_enable" : 0,
106 | "patching_rect" : [ 27.0, 317.928575456142426, 93.5, 50.0 ],
107 | "size" : 3,
108 | "value" : 1
109 | }
110 |
111 | }
112 | , {
113 | "box" : {
114 | "channels" : 1,
115 | "fontsize" : 13.0,
116 | "id" : "obj-27",
117 | "lastchannelcount" : 0,
118 | "maxclass" : "live.gain~",
119 | "numinlets" : 1,
120 | "numoutlets" : 4,
121 | "orientation" : 1,
122 | "outlettype" : [ "signal", "", "float", "list" ],
123 | "parameter_enable" : 1,
124 | "patching_rect" : [ 27.0, 416.928575456142426, 147.0, 35.0 ],
125 | "saved_attribute_attributes" : {
126 | "valueof" : {
127 | "parameter_initial" : [ -50 ],
128 | "parameter_initial_enable" : 1,
129 | "parameter_longname" : "live.gain~",
130 | "parameter_mmax" : 6.0,
131 | "parameter_mmin" : -70.0,
132 | "parameter_shortname" : "live.gain~",
133 | "parameter_type" : 0,
134 | "parameter_unitstyle" : 4
135 | }
136 |
137 | }
138 | ,
139 | "showname" : 0,
140 | "varname" : "live.gain~"
141 | }
142 |
143 | }
144 | , {
145 | "box" : {
146 | "id" : "obj-7",
147 | "local" : 1,
148 | "maxclass" : "ezdac~",
149 | "numinlets" : 2,
150 | "numoutlets" : 0,
151 | "patching_rect" : [ 27.0, 469.928575456142426, 44.0, 44.0 ],
152 | "prototypename" : "helpfile"
153 | }
154 |
155 | }
156 | , {
157 | "box" : {
158 | "fontname" : "Arial",
159 | "fontsize" : 13.0,
160 | "id" : "obj-9",
161 | "maxclass" : "newobj",
162 | "numinlets" : 3,
163 | "numoutlets" : 1,
164 | "outlettype" : [ "signal" ],
165 | "patching_rect" : [ 27.0, 385.928575456142426, 287.0, 23.0 ],
166 | "text" : "selector~ 2"
167 | }
168 |
169 | }
170 | , {
171 | "box" : {
172 | "id" : "obj-21",
173 | "maxclass" : "newobj",
174 | "numinlets" : 6,
175 | "numoutlets" : 1,
176 | "outlettype" : [ "" ],
177 | "patching_rect" : [ 44.0, 206.928575456142426, 107.0, 22.0 ],
178 | "text" : "scale 0. 127. -3. 3."
179 | }
180 |
181 | }
182 | , {
183 | "box" : {
184 | "id" : "obj-20",
185 | "maxclass" : "newobj",
186 | "numinlets" : 1,
187 | "numoutlets" : 1,
188 | "outlettype" : [ "signal" ],
189 | "patching_rect" : [ 44.0, 238.928575456142426, 31.0, 22.0 ],
190 | "text" : "sig~"
191 | }
192 |
193 | }
194 | , {
195 | "box" : {
196 | "id" : "obj-19",
197 | "maxclass" : "slider",
198 | "numinlets" : 1,
199 | "numoutlets" : 1,
200 | "outlettype" : [ "" ],
201 | "parameter_enable" : 0,
202 | "patching_rect" : [ 44.0, 120.928575456142426, 43.0, 74.0 ]
203 | }
204 |
205 | }
206 | , {
207 | "box" : {
208 | "id" : "obj-10",
209 | "maxclass" : "newobj",
210 | "numinlets" : 8,
211 | "numoutlets" : 1,
212 | "outlettype" : [ "signal" ],
213 | "patching_rect" : [ 161.0, 274.928575456142426, 203.0, 22.0 ],
214 | "text" : "nn~ wheel decode"
215 | }
216 |
217 | }
218 | , {
219 | "box" : {
220 | "id" : "obj-14",
221 | "maxclass" : "newobj",
222 | "numinlets" : 1,
223 | "numoutlets" : 8,
224 | "outlettype" : [ "signal", "signal", "signal", "signal", "signal", "signal", "signal", "signal" ],
225 | "patching_rect" : [ 161.0, 202.928575456142426, 203.0, 22.0 ],
226 | "text" : "nn~ wheel encode"
227 | }
228 |
229 | }
230 | , {
231 | "box" : {
232 | "id" : "obj-16",
233 | "maxclass" : "newobj",
234 | "numinlets" : 1,
235 | "numoutlets" : 1,
236 | "outlettype" : [ "signal" ],
237 | "patching_rect" : [ 733.0, 233.428575456142426, 41.0, 22.0 ],
238 | "text" : "sig~"
239 | }
240 |
241 | }
242 | , {
243 | "box" : {
244 | "id" : "obj-2",
245 | "maxclass" : "newobj",
246 | "numinlets" : 6,
247 | "numoutlets" : 1,
248 | "outlettype" : [ "" ],
249 | "patching_rect" : [ 733.0, 203.428575456142426, 107.0, 22.0 ],
250 | "text" : "scale 0. 127. -3. 3."
251 | }
252 |
253 | }
254 | , {
255 | "box" : {
256 | "id" : "obj-13",
257 | "maxclass" : "newobj",
258 | "numinlets" : 6,
259 | "numoutlets" : 1,
260 | "outlettype" : [ "" ],
261 | "patching_rect" : [ 604.0, 203.428575456142426, 107.0, 22.0 ],
262 | "text" : "scale 0. 127. -3. 3."
263 | }
264 |
265 | }
266 | , {
267 | "box" : {
268 | "id" : "obj-3",
269 | "maxclass" : "pictslider",
270 | "numinlets" : 2,
271 | "numoutlets" : 2,
272 | "outlettype" : [ "int", "int" ],
273 | "parameter_enable" : 0,
274 | "patching_rect" : [ 604.0, 70.428575456142426, 147.0, 125.0 ]
275 | }
276 |
277 | }
278 | , {
279 | "box" : {
280 | "id" : "obj-6",
281 | "maxclass" : "newobj",
282 | "numinlets" : 1,
283 | "numoutlets" : 1,
284 | "outlettype" : [ "signal" ],
285 | "patching_rect" : [ 604.0, 232.428575456142426, 41.0, 22.0 ],
286 | "text" : "sig~"
287 | }
288 |
289 | }
290 | , {
291 | "box" : {
292 | "id" : "obj-5",
293 | "maxclass" : "newobj",
294 | "numinlets" : 8,
295 | "numoutlets" : 1,
296 | "outlettype" : [ "signal" ],
297 | "patching_rect" : [ 378.0, 274.928575456142426, 203.0, 22.0 ],
298 | "text" : "nn~ wheel decode"
299 | }
300 |
301 | }
302 | , {
303 | "box" : {
304 | "basictuning" : 440,
305 | "data" : {
306 | "clips" : [ {
307 | "absolutepath" : "huge.aiff",
308 | "filename" : "huge.aiff",
309 | "filekind" : "audiofile",
310 | "id" : "u374011037",
311 | "loop" : 1,
312 | "content_state" : {
313 | "loop" : 1
314 | }
315 |
316 | }
317 | ]
318 | }
319 | ,
320 | "followglobaltempo" : 0,
321 | "formantcorrection" : 0,
322 | "id" : "obj-24",
323 | "maxclass" : "playlist~",
324 | "mode" : "basic",
325 | "numinlets" : 1,
326 | "numoutlets" : 5,
327 | "originallength" : [ 0.0, "ticks" ],
328 | "originaltempo" : 120.0,
329 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
330 | "parameter_enable" : 0,
331 | "patching_rect" : [ 161.0, 129.928575456142426, 150.0, 30.0 ],
332 | "pitchcorrection" : 0,
333 | "quality" : "basic",
334 | "timestretch" : [ 0 ]
335 | }
336 |
337 | }
338 | , {
339 | "box" : {
340 | "id" : "obj-8",
341 | "maxclass" : "newobj",
342 | "numinlets" : 1,
343 | "numoutlets" : 8,
344 | "outlettype" : [ "signal", "signal", "signal", "signal", "signal", "signal", "signal", "signal" ],
345 | "patching_rect" : [ 378.0, 202.928575456142426, 203.0, 22.0 ],
346 | "text" : "nn~ wheel encode"
347 | }
348 |
349 | }
350 | , {
351 | "box" : {
352 | "fontface" : 1,
353 | "fontsize" : 14.0,
354 | "id" : "obj-46",
355 | "maxclass" : "comment",
356 | "numinlets" : 1,
357 | "numoutlets" : 0,
358 | "patching_rect" : [ 44.0, 92.0, 197.904751896858215, 22.0 ],
359 | "text" : "Single dimension control"
360 | }
361 |
362 | }
363 | , {
364 | "box" : {
365 | "fontface" : 0,
366 | "fontsize" : 14.0,
367 | "id" : "obj-11",
368 | "maxclass" : "comment",
369 | "numinlets" : 1,
370 | "numoutlets" : 0,
371 | "patching_rect" : [ 19.0, 49.0, 442.0, 22.0 ],
372 | "text" : "We can tweak and control all of the dimensions in real-time"
373 | }
374 |
375 | }
376 | , {
377 | "box" : {
378 | "fontface" : 1,
379 | "fontsize" : 20.0,
380 | "id" : "obj-26",
381 | "maxclass" : "comment",
382 | "numinlets" : 1,
383 | "numoutlets" : 0,
384 | "patching_rect" : [ 19.0, 18.0, 447.0, 29.0 ],
385 | "text" : "05 - Dimensions control"
386 | }
387 |
388 | }
389 | ],
390 | "lines" : [ {
391 | "patchline" : {
392 | "destination" : [ "obj-9", 1 ],
393 | "source" : [ "obj-10", 0 ]
394 | }
395 |
396 | }
397 | , {
398 | "patchline" : {
399 | "destination" : [ "obj-6", 0 ],
400 | "midpoints" : [ 613.5, 227.428575456142426, 613.5, 227.428575456142426 ],
401 | "source" : [ "obj-13", 0 ]
402 | }
403 |
404 | }
405 | , {
406 | "patchline" : {
407 | "destination" : [ "obj-10", 7 ],
408 | "midpoints" : [ 354.5, 225.928575456142426, 354.5, 225.928575456142426 ],
409 | "source" : [ "obj-14", 7 ]
410 | }
411 |
412 | }
413 | , {
414 | "patchline" : {
415 | "destination" : [ "obj-10", 6 ],
416 | "midpoints" : [ 328.214285714285722, 225.928575456142426, 328.214285714285722, 225.928575456142426 ],
417 | "source" : [ "obj-14", 6 ]
418 | }
419 |
420 | }
421 | , {
422 | "patchline" : {
423 | "destination" : [ "obj-10", 5 ],
424 | "midpoints" : [ 301.928571428571445, 225.928575456142426, 301.928571428571445, 225.928575456142426 ],
425 | "source" : [ "obj-14", 5 ]
426 | }
427 |
428 | }
429 | , {
430 | "patchline" : {
431 | "destination" : [ "obj-10", 4 ],
432 | "source" : [ "obj-14", 4 ]
433 | }
434 |
435 | }
436 | , {
437 | "patchline" : {
438 | "destination" : [ "obj-10", 3 ],
439 | "midpoints" : [ 249.357142857142861, 225.928575456142426, 249.357142857142861, 225.928575456142426 ],
440 | "source" : [ "obj-14", 3 ]
441 | }
442 |
443 | }
444 | , {
445 | "patchline" : {
446 | "destination" : [ "obj-10", 2 ],
447 | "midpoints" : [ 223.071428571428555, 225.928575456142426, 223.071428571428555, 225.928575456142426 ],
448 | "source" : [ "obj-14", 2 ]
449 | }
450 |
451 | }
452 | , {
453 | "patchline" : {
454 | "destination" : [ "obj-10", 0 ],
455 | "midpoints" : [ 170.5, 225.928575456142426, 170.5, 225.928575456142426 ],
456 | "source" : [ "obj-14", 0 ]
457 | }
458 |
459 | }
460 | , {
461 | "patchline" : {
462 | "destination" : [ "obj-5", 4 ],
463 | "source" : [ "obj-16", 0 ]
464 | }
465 |
466 | }
467 | , {
468 | "patchline" : {
469 | "destination" : [ "obj-21", 0 ],
470 | "source" : [ "obj-19", 0 ]
471 | }
472 |
473 | }
474 | , {
475 | "patchline" : {
476 | "destination" : [ "obj-16", 0 ],
477 | "midpoints" : [ 742.5, 227.428575456142426, 742.5, 227.428575456142426 ],
478 | "source" : [ "obj-2", 0 ]
479 | }
480 |
481 | }
482 | , {
483 | "patchline" : {
484 | "destination" : [ "obj-10", 1 ],
485 | "source" : [ "obj-20", 0 ]
486 | }
487 |
488 | }
489 | , {
490 | "patchline" : {
491 | "destination" : [ "obj-20", 0 ],
492 | "source" : [ "obj-21", 0 ]
493 | }
494 |
495 | }
496 | , {
497 | "patchline" : {
498 | "destination" : [ "obj-14", 0 ],
499 | "order" : 1,
500 | "source" : [ "obj-24", 0 ]
501 | }
502 |
503 | }
504 | , {
505 | "patchline" : {
506 | "destination" : [ "obj-8", 0 ],
507 | "midpoints" : [ 170.5, 187.928575456142426, 387.5, 187.928575456142426 ],
508 | "order" : 0,
509 | "source" : [ "obj-24", 0 ]
510 | }
511 |
512 | }
513 | , {
514 | "patchline" : {
515 | "destination" : [ "obj-7", 1 ],
516 | "order" : 0,
517 | "source" : [ "obj-27", 0 ]
518 | }
519 |
520 | }
521 | , {
522 | "patchline" : {
523 | "destination" : [ "obj-7", 0 ],
524 | "order" : 1,
525 | "source" : [ "obj-27", 0 ]
526 | }
527 |
528 | }
529 | , {
530 | "patchline" : {
531 | "destination" : [ "obj-13", 0 ],
532 | "midpoints" : [ 613.5, 197.428575456142426, 613.5, 197.428575456142426 ],
533 | "source" : [ "obj-3", 0 ]
534 | }
535 |
536 | }
537 | , {
538 | "patchline" : {
539 | "destination" : [ "obj-2", 0 ],
540 | "midpoints" : [ 741.5, 196.928575456142426, 742.5, 196.928575456142426 ],
541 | "source" : [ "obj-3", 1 ]
542 | }
543 |
544 | }
545 | , {
546 | "patchline" : {
547 | "destination" : [ "obj-9", 2 ],
548 | "source" : [ "obj-5", 0 ]
549 | }
550 |
551 | }
552 | , {
553 | "patchline" : {
554 | "destination" : [ "obj-5", 1 ],
555 | "source" : [ "obj-6", 0 ]
556 | }
557 |
558 | }
559 | , {
560 | "patchline" : {
561 | "destination" : [ "obj-9", 0 ],
562 | "source" : [ "obj-73", 0 ]
563 | }
564 |
565 | }
566 | , {
567 | "patchline" : {
568 | "destination" : [ "obj-5", 7 ],
569 | "midpoints" : [ 571.5, 225.928575456142426, 571.5, 225.928575456142426 ],
570 | "source" : [ "obj-8", 7 ]
571 | }
572 |
573 | }
574 | , {
575 | "patchline" : {
576 | "destination" : [ "obj-5", 6 ],
577 | "midpoints" : [ 545.214285714285779, 225.928575456142426, 545.214285714285779, 225.928575456142426 ],
578 | "source" : [ "obj-8", 6 ]
579 | }
580 |
581 | }
582 | , {
583 | "patchline" : {
584 | "destination" : [ "obj-5", 5 ],
585 | "midpoints" : [ 518.928571428571445, 225.928575456142426, 518.928571428571445, 225.928575456142426 ],
586 | "source" : [ "obj-8", 5 ]
587 | }
588 |
589 | }
590 | , {
591 | "patchline" : {
592 | "destination" : [ "obj-5", 3 ],
593 | "midpoints" : [ 466.35714285714289, 225.928575456142426, 466.35714285714289, 225.928575456142426 ],
594 | "source" : [ "obj-8", 3 ]
595 | }
596 |
597 | }
598 | , {
599 | "patchline" : {
600 | "destination" : [ "obj-5", 2 ],
601 | "midpoints" : [ 440.071428571428555, 225.928575456142426, 440.071428571428555, 225.928575456142426 ],
602 | "source" : [ "obj-8", 2 ]
603 | }
604 |
605 | }
606 | , {
607 | "patchline" : {
608 | "destination" : [ "obj-5", 0 ],
609 | "midpoints" : [ 387.5, 225.928575456142426, 387.5, 225.928575456142426 ],
610 | "source" : [ "obj-8", 0 ]
611 | }
612 |
613 | }
614 | , {
615 | "patchline" : {
616 | "destination" : [ "obj-27", 0 ],
617 | "source" : [ "obj-9", 0 ]
618 | }
619 |
620 | }
621 | ],
622 | "parameters" : {
623 | "obj-27" : [ "live.gain~", "live.gain~", 0 ],
624 | "parameterbanks" : {
625 |
626 | }
627 | ,
628 | "inherited_shortname" : 1
629 | }
630 | ,
631 | "dependency_cache" : [ {
632 | "name" : "huge.aiff",
633 | "bootpath" : "C74:/docs/tutorial-patchers/msp-tut",
634 | "type" : "AIFF",
635 | "implicit" : 1
636 | }
637 | , {
638 | "name" : "nn~.mxo",
639 | "type" : "iLaX"
640 | }
641 | ],
642 | "autosave" : 0
643 | }
644 |
645 | }
646 |
--------------------------------------------------------------------------------
/patches/03_osc/osc_05_autostart_python.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 5,
7 | "revision" : 4,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 421.0, 182.0, 1094.0, 732.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "id" : "obj-59",
44 | "maxclass" : "button",
45 | "numinlets" : 1,
46 | "numoutlets" : 1,
47 | "outlettype" : [ "bang" ],
48 | "parameter_enable" : 0,
49 | "patching_rect" : [ 473.0, 145.5, 24.0, 24.0 ],
50 | "varname" : "button[4]"
51 | }
52 |
53 | }
54 | , {
55 | "box" : {
56 | "id" : "obj-58",
57 | "maxclass" : "button",
58 | "numinlets" : 1,
59 | "numoutlets" : 1,
60 | "outlettype" : [ "bang" ],
61 | "parameter_enable" : 0,
62 | "patching_rect" : [ 300.75, 148.5, 24.0, 24.0 ],
63 | "varname" : "button[3]"
64 | }
65 |
66 | }
67 | , {
68 | "box" : {
69 | "id" : "obj-55",
70 | "maxclass" : "newobj",
71 | "numinlets" : 2,
72 | "numoutlets" : 1,
73 | "outlettype" : [ "int" ],
74 | "patching_rect" : [ 522.5, 220.432373000000013, 29.5, 22.0 ],
75 | "text" : "* 2"
76 | }
77 |
78 | }
79 | , {
80 | "box" : {
81 | "id" : "obj-57",
82 | "maxclass" : "newobj",
83 | "numinlets" : 2,
84 | "numoutlets" : 1,
85 | "outlettype" : [ "int" ],
86 | "patching_rect" : [ 473.0, 225.432373000000013, 29.5, 22.0 ],
87 | "text" : "+ 0"
88 | }
89 |
90 | }
91 | , {
92 | "box" : {
93 | "id" : "obj-54",
94 | "maxclass" : "button",
95 | "numinlets" : 1,
96 | "numoutlets" : 1,
97 | "outlettype" : [ "bang" ],
98 | "parameter_enable" : 0,
99 | "patching_rect" : [ 350.5, 425.550964000000022, 24.0, 24.0 ],
100 | "varname" : "button[2]"
101 | }
102 |
103 | }
104 | , {
105 | "box" : {
106 | "id" : "obj-53",
107 | "maxclass" : "newobj",
108 | "numinlets" : 0,
109 | "numoutlets" : 1,
110 | "outlettype" : [ "" ],
111 | "patching_rect" : [ 350.5, 395.550964000000022, 131.0, 22.0 ],
112 | "text" : "r global_instance_ping"
113 | }
114 |
115 | }
116 | , {
117 | "box" : {
118 | "id" : "obj-52",
119 | "maxclass" : "newobj",
120 | "numinlets" : 1,
121 | "numoutlets" : 0,
122 | "patching_rect" : [ 350.5, 459.5, 159.0, 22.0 ],
123 | "text" : "s global_instance_response"
124 | }
125 |
126 | }
127 | , {
128 | "box" : {
129 | "id" : "obj-51",
130 | "maxclass" : "newobj",
131 | "numinlets" : 2,
132 | "numoutlets" : 1,
133 | "outlettype" : [ "int" ],
134 | "patching_rect" : [ 350.25, 225.432373000000013, 29.5, 22.0 ],
135 | "text" : "* 2"
136 | }
137 |
138 | }
139 | , {
140 | "box" : {
141 | "id" : "obj-49",
142 | "maxclass" : "newobj",
143 | "numinlets" : 5,
144 | "numoutlets" : 4,
145 | "outlettype" : [ "int", "", "", "int" ],
146 | "patching_rect" : [ 555.0, 124.0, 81.0, 22.0 ],
147 | "text" : "counter -1 64"
148 | }
149 |
150 | }
151 | , {
152 | "box" : {
153 | "id" : "obj-48",
154 | "maxclass" : "newobj",
155 | "numinlets" : 2,
156 | "numoutlets" : 1,
157 | "outlettype" : [ "int" ],
158 | "patching_rect" : [ 300.75, 225.432373000000013, 29.5, 22.0 ],
159 | "text" : "+ 0"
160 | }
161 |
162 | }
163 | , {
164 | "box" : {
165 | "id" : "obj-47",
166 | "maxclass" : "newobj",
167 | "numinlets" : 0,
168 | "numoutlets" : 1,
169 | "outlettype" : [ "" ],
170 | "patching_rect" : [ 405.0, 86.5, 157.0, 22.0 ],
171 | "text" : "r global_instance_response"
172 | }
173 |
174 | }
175 | , {
176 | "box" : {
177 | "id" : "obj-46",
178 | "maxclass" : "newobj",
179 | "numinlets" : 1,
180 | "numoutlets" : 0,
181 | "patching_rect" : [ 573.0, 86.5, 133.0, 22.0 ],
182 | "text" : "s global_instance_ping"
183 | }
184 |
185 | }
186 | , {
187 | "box" : {
188 | "id" : "obj-45",
189 | "maxclass" : "message",
190 | "numinlets" : 2,
191 | "numoutlets" : 1,
192 | "outlettype" : [ "" ],
193 | "patching_rect" : [ 473.0, 185.0, 37.0, 22.0 ],
194 | "text" : "1235"
195 | }
196 |
197 | }
198 | , {
199 | "box" : {
200 | "id" : "obj-42",
201 | "maxclass" : "message",
202 | "numinlets" : 2,
203 | "numoutlets" : 1,
204 | "outlettype" : [ "" ],
205 | "patching_rect" : [ 300.75, 185.0, 37.0, 22.0 ],
206 | "text" : "1234"
207 | }
208 |
209 | }
210 | , {
211 | "box" : {
212 | "id" : "obj-24",
213 | "maxclass" : "newobj",
214 | "numinlets" : 1,
215 | "numoutlets" : 0,
216 | "patching_rect" : [ 513.0, 291.0, 94.0, 22.0 ],
217 | "text" : "s #0-port_out"
218 | }
219 |
220 | }
221 | , {
222 | "box" : {
223 | "id" : "obj-29",
224 | "maxclass" : "message",
225 | "numinlets" : 2,
226 | "numoutlets" : 1,
227 | "outlettype" : [ "" ],
228 | "patching_rect" : [ 513.0, 260.067627000000016, 48.0, 22.0 ],
229 | "text" : "port $1"
230 | }
231 |
232 | }
233 | , {
234 | "box" : {
235 | "id" : "obj-30",
236 | "maxclass" : "newobj",
237 | "numinlets" : 1,
238 | "numoutlets" : 0,
239 | "patching_rect" : [ 322.0, 291.0, 86.0, 22.0 ],
240 | "text" : "s #0-port_in"
241 | }
242 |
243 | }
244 | , {
245 | "box" : {
246 | "id" : "obj-40",
247 | "maxclass" : "message",
248 | "numinlets" : 2,
249 | "numoutlets" : 1,
250 | "outlettype" : [ "" ],
251 | "patching_rect" : [ 322.0, 260.067627000000016, 48.0, 22.0 ],
252 | "text" : "port $1"
253 | }
254 |
255 | }
256 | , {
257 | "box" : {
258 | "id" : "obj-16",
259 | "maxclass" : "newobj",
260 | "numinlets" : 1,
261 | "numoutlets" : 1,
262 | "outlettype" : [ "" ],
263 | "patching_rect" : [ 102.0, 444.5, 72.0, 22.0 ],
264 | "text" : "loadmess 1"
265 | }
266 |
267 | }
268 | , {
269 | "box" : {
270 | "id" : "obj-44",
271 | "maxclass" : "toggle",
272 | "numinlets" : 1,
273 | "numoutlets" : 1,
274 | "outlettype" : [ "int" ],
275 | "parameter_enable" : 0,
276 | "patching_rect" : [ 102.0, 481.006713999999988, 24.0, 24.0 ],
277 | "varname" : "shell_output_toggle"
278 | }
279 |
280 | }
281 | , {
282 | "box" : {
283 | "id" : "obj-43",
284 | "int" : 1,
285 | "maxclass" : "gswitch",
286 | "numinlets" : 3,
287 | "numoutlets" : 1,
288 | "outlettype" : [ "" ],
289 | "parameter_enable" : 0,
290 | "patching_rect" : [ 102.0, 514.506713999999988, 41.0, 32.0 ],
291 | "varname" : "shell_output"
292 | }
293 |
294 | }
295 | , {
296 | "box" : {
297 | "id" : "obj-39",
298 | "maxclass" : "newobj",
299 | "numinlets" : 1,
300 | "numoutlets" : 2,
301 | "outlettype" : [ "", "int" ],
302 | "patching_rect" : [ 127.0, 291.0, 130.0, 22.0 ],
303 | "text" : "conformpath max boot"
304 | }
305 |
306 | }
307 | , {
308 | "box" : {
309 | "id" : "obj-38",
310 | "maxclass" : "newobj",
311 | "numinlets" : 1,
312 | "numoutlets" : 1,
313 | "outlettype" : [ "" ],
314 | "patching_rect" : [ 127.0, 251.432373000000013, 59.0, 22.0 ],
315 | "text" : "tosymbol"
316 | }
317 |
318 | }
319 | , {
320 | "box" : {
321 | "id" : "obj-20",
322 | "maxclass" : "newobj",
323 | "numinlets" : 1,
324 | "numoutlets" : 1,
325 | "outlettype" : [ "" ],
326 | "patching_rect" : [ 127.0, 167.0, 56.0, 22.0 ],
327 | "text" : "deferlow"
328 | }
329 |
330 | }
331 | , {
332 | "box" : {
333 | "fontname" : "Arial",
334 | "fontsize" : 9.0,
335 | "id" : "obj-33",
336 | "maxclass" : "newobj",
337 | "numinlets" : 3,
338 | "numoutlets" : 1,
339 | "outlettype" : [ "" ],
340 | "patching_rect" : [ 127.0, 329.432372999999984, 366.0, 19.0 ],
341 | "text" : "sprintf cd '%s/../code' && /usr/local/bin/python3 osc_launch.py --in_port %d --out_port %d"
342 | }
343 |
344 | }
345 | , {
346 | "box" : {
347 | "fontname" : "Arial",
348 | "fontsize" : 9.0,
349 | "id" : "obj-34",
350 | "maxclass" : "newobj",
351 | "numinlets" : 1,
352 | "numoutlets" : 1,
353 | "outlettype" : [ "bang" ],
354 | "patching_rect" : [ 127.0, 43.0, 48.0, 19.0 ],
355 | "text" : "loadbang"
356 | }
357 |
358 | }
359 | , {
360 | "box" : {
361 | "fontname" : "Arial",
362 | "fontsize" : 9.0,
363 | "id" : "obj-35",
364 | "maxclass" : "message",
365 | "numinlets" : 2,
366 | "numoutlets" : 1,
367 | "outlettype" : [ "" ],
368 | "patching_rect" : [ 127.0, 198.5, 27.0, 19.0 ],
369 | "text" : "path"
370 | }
371 |
372 | }
373 | , {
374 | "box" : {
375 | "color" : [ 1.0, 0.890196, 0.090196, 1.0 ],
376 | "fontname" : "Arial",
377 | "fontsize" : 9.0,
378 | "id" : "obj-36",
379 | "maxclass" : "newobj",
380 | "numinlets" : 1,
381 | "numoutlets" : 2,
382 | "outlettype" : [ "", "" ],
383 | "patching_rect" : [ 127.0, 224.432373000000013, 70.0, 19.0 ],
384 | "save" : [ "#N", "thispatcher", ";", "#Q", "end", ";" ],
385 | "text" : "thispatcher"
386 | }
387 |
388 | }
389 | , {
390 | "box" : {
391 | "id" : "obj-21",
392 | "maxclass" : "newobj",
393 | "numinlets" : 1,
394 | "numoutlets" : 0,
395 | "patching_rect" : [ 102.0, 559.48913600000003, 85.0, 22.0 ],
396 | "text" : "print shell_out"
397 | }
398 |
399 | }
400 | , {
401 | "box" : {
402 | "id" : "obj-7",
403 | "maxclass" : "newobj",
404 | "numinlets" : 1,
405 | "numoutlets" : 2,
406 | "outlettype" : [ "", "bang" ],
407 | "patching_rect" : [ 218.0, 401.0, 91.0, 22.0 ],
408 | "saved_object_attributes" : {
409 | "shell" : "(default)"
410 | }
411 | ,
412 | "text" : "shell"
413 | }
414 |
415 | }
416 | , {
417 | "box" : {
418 | "attr" : "stderr",
419 | "id" : "obj-32",
420 | "maxclass" : "attrui",
421 | "numinlets" : 1,
422 | "numoutlets" : 1,
423 | "outlettype" : [ "" ],
424 | "parameter_enable" : 0,
425 | "patching_rect" : [ 25.0, 398.5, 150.0, 22.0 ]
426 | }
427 |
428 | }
429 | ],
430 | "lines" : [ {
431 | "patchline" : {
432 | "destination" : [ "obj-44", 0 ],
433 | "source" : [ "obj-16", 0 ]
434 | }
435 |
436 | }
437 | , {
438 | "patchline" : {
439 | "destination" : [ "obj-35", 0 ],
440 | "order" : 2,
441 | "source" : [ "obj-20", 0 ]
442 | }
443 |
444 | }
445 | , {
446 | "patchline" : {
447 | "destination" : [ "obj-58", 0 ],
448 | "midpoints" : [ 136.5, 195.0, 203.875, 195.0, 203.875, 133.5, 310.25, 133.5 ],
449 | "order" : 1,
450 | "source" : [ "obj-20", 0 ]
451 | }
452 |
453 | }
454 | , {
455 | "patchline" : {
456 | "destination" : [ "obj-59", 0 ],
457 | "midpoints" : [ 136.5, 194.0, 204.0, 194.0, 204.0, 132.5, 482.5, 132.5 ],
458 | "order" : 0,
459 | "source" : [ "obj-20", 0 ]
460 | }
461 |
462 | }
463 | , {
464 | "patchline" : {
465 | "destination" : [ "obj-24", 0 ],
466 | "source" : [ "obj-29", 0 ]
467 | }
468 |
469 | }
470 | , {
471 | "patchline" : {
472 | "destination" : [ "obj-7", 0 ],
473 | "source" : [ "obj-32", 0 ]
474 | }
475 |
476 | }
477 | , {
478 | "patchline" : {
479 | "destination" : [ "obj-7", 0 ],
480 | "source" : [ "obj-33", 0 ]
481 | }
482 |
483 | }
484 | , {
485 | "patchline" : {
486 | "destination" : [ "obj-20", 0 ],
487 | "order" : 1,
488 | "source" : [ "obj-34", 0 ]
489 | }
490 |
491 | }
492 | , {
493 | "patchline" : {
494 | "destination" : [ "obj-46", 0 ],
495 | "midpoints" : [ 136.5, 79.0, 582.5, 79.0 ],
496 | "order" : 0,
497 | "source" : [ "obj-34", 0 ]
498 | }
499 |
500 | }
501 | , {
502 | "patchline" : {
503 | "destination" : [ "obj-36", 0 ],
504 | "source" : [ "obj-35", 0 ]
505 | }
506 |
507 | }
508 | , {
509 | "patchline" : {
510 | "destination" : [ "obj-38", 0 ],
511 | "source" : [ "obj-36", 1 ]
512 | }
513 |
514 | }
515 | , {
516 | "patchline" : {
517 | "destination" : [ "obj-39", 0 ],
518 | "source" : [ "obj-38", 0 ]
519 | }
520 |
521 | }
522 | , {
523 | "patchline" : {
524 | "destination" : [ "obj-33", 0 ],
525 | "source" : [ "obj-39", 0 ]
526 | }
527 |
528 | }
529 | , {
530 | "patchline" : {
531 | "destination" : [ "obj-30", 0 ],
532 | "source" : [ "obj-40", 0 ]
533 | }
534 |
535 | }
536 | , {
537 | "patchline" : {
538 | "destination" : [ "obj-48", 0 ],
539 | "midpoints" : [ 310.25, 216.25, 310.25, 216.25 ],
540 | "source" : [ "obj-42", 0 ]
541 | }
542 |
543 | }
544 | , {
545 | "patchline" : {
546 | "destination" : [ "obj-21", 0 ],
547 | "source" : [ "obj-43", 0 ]
548 | }
549 |
550 | }
551 | , {
552 | "patchline" : {
553 | "destination" : [ "obj-43", 0 ],
554 | "source" : [ "obj-44", 0 ]
555 | }
556 |
557 | }
558 | , {
559 | "patchline" : {
560 | "destination" : [ "obj-57", 0 ],
561 | "source" : [ "obj-45", 0 ]
562 | }
563 |
564 | }
565 | , {
566 | "patchline" : {
567 | "destination" : [ "obj-49", 0 ],
568 | "midpoints" : [ 414.5, 116.25, 564.5, 116.25 ],
569 | "source" : [ "obj-47", 0 ]
570 | }
571 |
572 | }
573 | , {
574 | "patchline" : {
575 | "destination" : [ "obj-33", 1 ],
576 | "order" : 1,
577 | "source" : [ "obj-48", 0 ]
578 | }
579 |
580 | }
581 | , {
582 | "patchline" : {
583 | "destination" : [ "obj-40", 0 ],
584 | "order" : 0,
585 | "source" : [ "obj-48", 0 ]
586 | }
587 |
588 | }
589 | , {
590 | "patchline" : {
591 | "destination" : [ "obj-51", 0 ],
592 | "midpoints" : [ 564.5, 213.716186999999991, 359.75, 213.716186999999991 ],
593 | "order" : 1,
594 | "source" : [ "obj-49", 0 ]
595 | }
596 |
597 | }
598 | , {
599 | "patchline" : {
600 | "destination" : [ "obj-55", 0 ],
601 | "midpoints" : [ 564.5, 213.716186999999991, 532.0, 213.716186999999991 ],
602 | "order" : 0,
603 | "source" : [ "obj-49", 0 ]
604 | }
605 |
606 | }
607 | , {
608 | "patchline" : {
609 | "destination" : [ "obj-48", 1 ],
610 | "midpoints" : [ 359.75, 255.432372999999984, 340.25, 255.432372999999984, 340.25, 214.432373000000013, 320.75, 214.432373000000013 ],
611 | "source" : [ "obj-51", 0 ]
612 | }
613 |
614 | }
615 | , {
616 | "patchline" : {
617 | "destination" : [ "obj-54", 0 ],
618 | "source" : [ "obj-53", 0 ]
619 | }
620 |
621 | }
622 | , {
623 | "patchline" : {
624 | "destination" : [ "obj-52", 0 ],
625 | "source" : [ "obj-54", 0 ]
626 | }
627 |
628 | }
629 | , {
630 | "patchline" : {
631 | "destination" : [ "obj-57", 1 ],
632 | "midpoints" : [ 532.0, 248.432372999999984, 512.5, 248.432372999999984, 512.5, 214.432373000000013, 493.0, 214.432373000000013 ],
633 | "source" : [ "obj-55", 0 ]
634 | }
635 |
636 | }
637 | , {
638 | "patchline" : {
639 | "destination" : [ "obj-29", 0 ],
640 | "order" : 0,
641 | "source" : [ "obj-57", 0 ]
642 | }
643 |
644 | }
645 | , {
646 | "patchline" : {
647 | "destination" : [ "obj-33", 2 ],
648 | "order" : 1,
649 | "source" : [ "obj-57", 0 ]
650 | }
651 |
652 | }
653 | , {
654 | "patchline" : {
655 | "destination" : [ "obj-42", 0 ],
656 | "source" : [ "obj-58", 0 ]
657 | }
658 |
659 | }
660 | , {
661 | "patchline" : {
662 | "destination" : [ "obj-45", 0 ],
663 | "source" : [ "obj-59", 0 ]
664 | }
665 |
666 | }
667 | , {
668 | "patchline" : {
669 | "destination" : [ "obj-43", 2 ],
670 | "source" : [ "obj-7", 0 ]
671 | }
672 |
673 | }
674 | ],
675 | "dependency_cache" : [ {
676 | "name" : "shell.mxo",
677 | "type" : "iLaX"
678 | }
679 | ],
680 | "autosave" : 0,
681 | "styles" : [ {
682 | "name" : "AudioStatus_Menu",
683 | "default" : {
684 | "bgfillcolor" : {
685 | "angle" : 270.0,
686 | "autogradient" : 0,
687 | "color" : [ 0.294118, 0.313726, 0.337255, 1 ],
688 | "color1" : [ 0.454902, 0.462745, 0.482353, 0.0 ],
689 | "color2" : [ 0.290196, 0.309804, 0.301961, 1.0 ],
690 | "proportion" : 0.39,
691 | "type" : "color"
692 | }
693 |
694 | }
695 | ,
696 | "parentstyle" : "",
697 | "multi" : 0
698 | }
699 | , {
700 | "name" : "ksliderWhite",
701 | "default" : {
702 | "color" : [ 1.0, 1.0, 1.0, 1.0 ]
703 | }
704 | ,
705 | "parentstyle" : "",
706 | "multi" : 0
707 | }
708 | , {
709 | "name" : "m4l",
710 | "default" : {
711 | "fontname" : [ "Arial Bold" ],
712 | "fontsize" : [ 10.0 ]
713 | }
714 | ,
715 | "parentstyle" : "",
716 | "multi" : 0
717 | }
718 | , {
719 | "name" : "newobjBlue-1",
720 | "default" : {
721 | "accentcolor" : [ 0.317647, 0.654902, 0.976471, 1.0 ]
722 | }
723 | ,
724 | "parentstyle" : "",
725 | "multi" : 0
726 | }
727 | , {
728 | "name" : "newobjGreen-1",
729 | "default" : {
730 | "accentcolor" : [ 0.0, 0.533333, 0.168627, 1.0 ]
731 | }
732 | ,
733 | "parentstyle" : "",
734 | "multi" : 0
735 | }
736 | , {
737 | "name" : "numberGold-1",
738 | "default" : {
739 | "accentcolor" : [ 0.764706, 0.592157, 0.101961, 1.0 ]
740 | }
741 | ,
742 | "parentstyle" : "",
743 | "multi" : 0
744 | }
745 | ]
746 | }
747 |
748 | }
749 |
--------------------------------------------------------------------------------
/patches/01_rave/03_models.maxpat:
--------------------------------------------------------------------------------
1 | {
2 | "patcher" : {
3 | "fileversion" : 1,
4 | "appversion" : {
5 | "major" : 8,
6 | "minor" : 2,
7 | "revision" : 1,
8 | "architecture" : "x64",
9 | "modernui" : 1
10 | }
11 | ,
12 | "classnamespace" : "box",
13 | "rect" : [ 59.0, 119.0, 853.0, 480.0 ],
14 | "bglocked" : 0,
15 | "openinpresentation" : 0,
16 | "default_fontsize" : 12.0,
17 | "default_fontface" : 0,
18 | "default_fontname" : "Arial",
19 | "gridonopen" : 1,
20 | "gridsize" : [ 15.0, 15.0 ],
21 | "gridsnaponopen" : 1,
22 | "objectsnaponopen" : 1,
23 | "statusbarvisible" : 2,
24 | "toolbarvisible" : 1,
25 | "lefttoolbarpinned" : 0,
26 | "toptoolbarpinned" : 0,
27 | "righttoolbarpinned" : 0,
28 | "bottomtoolbarpinned" : 0,
29 | "toolbars_unpinned_last_save" : 0,
30 | "tallnewobj" : 0,
31 | "boxanimatetime" : 200,
32 | "enablehscroll" : 1,
33 | "enablevscroll" : 1,
34 | "devicewidth" : 0.0,
35 | "description" : "",
36 | "digest" : "",
37 | "tags" : "",
38 | "style" : "",
39 | "subpatcher_template" : "",
40 | "assistshowspatchername" : 0,
41 | "boxes" : [ {
42 | "box" : {
43 | "id" : "obj-37",
44 | "maxclass" : "newobj",
45 | "numinlets" : 1,
46 | "numoutlets" : 1,
47 | "outlettype" : [ "" ],
48 | "patching_rect" : [ 432.0, 280.0, 70.0, 22.0 ],
49 | "text" : "loadmess 0"
50 | }
51 |
52 | }
53 | , {
54 | "box" : {
55 | "id" : "obj-32",
56 | "maxclass" : "newobj",
57 | "numinlets" : 2,
58 | "numoutlets" : 1,
59 | "outlettype" : [ "signal" ],
60 | "patching_rect" : [ 266.0, 312.0, 29.5, 22.0 ],
61 | "text" : "+~"
62 | }
63 |
64 | }
65 | , {
66 | "box" : {
67 | "id" : "obj-30",
68 | "maxclass" : "newobj",
69 | "numinlets" : 1,
70 | "numoutlets" : 1,
71 | "outlettype" : [ "signal" ],
72 | "patching_rect" : [ 582.0, 344.0, 131.0, 22.0 ],
73 | "text" : "nn~ darbouka forward"
74 | }
75 |
76 | }
77 | , {
78 | "box" : {
79 | "id" : "obj-29",
80 | "maxclass" : "newobj",
81 | "numinlets" : 1,
82 | "numoutlets" : 1,
83 | "outlettype" : [ "signal" ],
84 | "patching_rect" : [ 432.0, 344.0, 131.0, 22.0 ],
85 | "text" : "nn~ darbouka forward"
86 | }
87 |
88 | }
89 | , {
90 | "box" : {
91 | "id" : "obj-28",
92 | "maxclass" : "newobj",
93 | "numinlets" : 1,
94 | "numoutlets" : 1,
95 | "outlettype" : [ "signal" ],
96 | "patching_rect" : [ 293.0, 274.0, 107.0, 22.0 ],
97 | "text" : "nn~ wheel forward"
98 | }
99 |
100 | }
101 | , {
102 | "box" : {
103 | "fontface" : 0,
104 | "fontsize" : 14.0,
105 | "id" : "obj-25",
106 | "linecount" : 2,
107 | "maxclass" : "comment",
108 | "numinlets" : 1,
109 | "numoutlets" : 0,
110 | "patching_rect" : [ 432.0, 230.5, 319.0, 38.0 ],
111 | "presentation_linecount" : 2,
112 | "text" : "As the model is stochastic, we can have a great stereo image by simply doubling the model"
113 | }
114 |
115 | }
116 | , {
117 | "box" : {
118 | "id" : "obj-24",
119 | "maxclass" : "dial",
120 | "numinlets" : 1,
121 | "numoutlets" : 1,
122 | "outlettype" : [ "float" ],
123 | "parameter_enable" : 0,
124 | "patching_rect" : [ 377.0, 88.0, 40.0, 40.0 ]
125 | }
126 |
127 | }
128 | , {
129 | "box" : {
130 | "fontname" : "Arial",
131 | "fontsize" : 13.0,
132 | "id" : "obj-23",
133 | "maxclass" : "comment",
134 | "numinlets" : 1,
135 | "numoutlets" : 0,
136 | "patching_rect" : [ 37.25, 135.0, 79.75, 21.0 ],
137 | "text" : "Synthesizer",
138 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
139 | }
140 |
141 | }
142 | , {
143 | "box" : {
144 | "fontname" : "Arial",
145 | "fontsize" : 13.0,
146 | "id" : "obj-19",
147 | "maxclass" : "comment",
148 | "numinlets" : 1,
149 | "numoutlets" : 0,
150 | "patching_rect" : [ 37.25, 119.0, 79.75, 21.0 ],
151 | "presentation_linecount" : 2,
152 | "text" : "Microphone",
153 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
154 | }
155 |
156 | }
157 | , {
158 | "box" : {
159 | "fontname" : "Arial",
160 | "fontsize" : 13.0,
161 | "id" : "obj-20",
162 | "maxclass" : "comment",
163 | "numinlets" : 1,
164 | "numoutlets" : 0,
165 | "patching_rect" : [ 37.25, 103.0, 78.75, 21.0 ],
166 | "text" : "Sample",
167 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
168 | }
169 |
170 | }
171 | , {
172 | "box" : {
173 | "fontname" : "Arial",
174 | "fontsize" : 13.0,
175 | "id" : "obj-21",
176 | "maxclass" : "comment",
177 | "numinlets" : 1,
178 | "numoutlets" : 0,
179 | "patching_rect" : [ 37.25, 87.0, 78.75, 21.0 ],
180 | "text" : "None",
181 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
182 | }
183 |
184 | }
185 | , {
186 | "box" : {
187 | "disabled" : [ 0, 0, 0, 0 ],
188 | "id" : "obj-22",
189 | "itemtype" : 0,
190 | "maxclass" : "radiogroup",
191 | "numinlets" : 1,
192 | "numoutlets" : 1,
193 | "outlettype" : [ "" ],
194 | "parameter_enable" : 0,
195 | "patching_rect" : [ 19.25, 89.0, 101.25, 66.0 ],
196 | "size" : 4,
197 | "value" : 2
198 | }
199 |
200 | }
201 | , {
202 | "box" : {
203 | "fontname" : "Arial",
204 | "fontsize" : 13.0,
205 | "id" : "obj-18",
206 | "maxclass" : "newobj",
207 | "numinlets" : 4,
208 | "numoutlets" : 1,
209 | "outlettype" : [ "signal" ],
210 | "patching_rect" : [ 146.0, 229.0, 169.0, 23.0 ],
211 | "text" : "selector~ 3"
212 | }
213 |
214 | }
215 | , {
216 | "box" : {
217 | "id" : "obj-17",
218 | "maxclass" : "ezadc~",
219 | "numinlets" : 1,
220 | "numoutlets" : 2,
221 | "outlettype" : [ "signal", "signal" ],
222 | "patching_rect" : [ 286.0, 88.0, 76.0, 76.0 ]
223 | }
224 |
225 | }
226 | , {
227 | "box" : {
228 | "id" : "obj-16",
229 | "maxclass" : "newobj",
230 | "numinlets" : 2,
231 | "numoutlets" : 1,
232 | "outlettype" : [ "signal" ],
233 | "patching_rect" : [ 377.0, 136.5, 60.0, 22.0 ],
234 | "text" : "saw~ 440"
235 | }
236 |
237 | }
238 | , {
239 | "box" : {
240 | "basictuning" : 440,
241 | "clipheight" : 29.0,
242 | "data" : {
243 | "clips" : [ {
244 | "absolutepath" : "morph.256.rom.aif",
245 | "filename" : "morph.256.rom.aif",
246 | "filekind" : "audiofile",
247 | "id" : "u741009561",
248 | "loop" : 1,
249 | "content_state" : {
250 | "loop" : 1
251 | }
252 |
253 | }
254 | ]
255 | }
256 | ,
257 | "followglobaltempo" : 0,
258 | "formantcorrection" : 0,
259 | "id" : "obj-13",
260 | "maxclass" : "playlist~",
261 | "mode" : "basic",
262 | "numinlets" : 1,
263 | "numoutlets" : 5,
264 | "originallength" : [ 0.0, "ticks" ],
265 | "originaltempo" : 120.0,
266 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
267 | "parameter_enable" : 0,
268 | "patching_rect" : [ 145.0, 125.0, 126.0, 29.0 ],
269 | "pitchcorrection" : 0,
270 | "quality" : "basic",
271 | "timestretch" : [ 0 ]
272 | }
273 |
274 | }
275 | , {
276 | "box" : {
277 | "basictuning" : 440,
278 | "clipheight" : 29.0,
279 | "data" : {
280 | "clips" : [ {
281 | "absolutepath" : "eroica.aiff",
282 | "filename" : "eroica.aiff",
283 | "filekind" : "audiofile",
284 | "id" : "u702009436",
285 | "loop" : 1,
286 | "content_state" : {
287 | "loop" : 1
288 | }
289 |
290 | }
291 | ]
292 | }
293 | ,
294 | "followglobaltempo" : 0,
295 | "formantcorrection" : 0,
296 | "id" : "obj-6",
297 | "maxclass" : "playlist~",
298 | "mode" : "basic",
299 | "numinlets" : 1,
300 | "numoutlets" : 5,
301 | "originallength" : [ 0.0, "ticks" ],
302 | "originaltempo" : 120.0,
303 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
304 | "parameter_enable" : 0,
305 | "patching_rect" : [ 145.0, 157.0, 126.0, 29.0 ],
306 | "pitchcorrection" : 0,
307 | "quality" : "basic",
308 | "timestretch" : [ 0 ]
309 | }
310 |
311 | }
312 | , {
313 | "box" : {
314 | "basictuning" : 440,
315 | "clipheight" : 29.0,
316 | "data" : {
317 | "clips" : [ {
318 | "absolutepath" : "drumLoop.aif",
319 | "filename" : "drumLoop.aif",
320 | "filekind" : "audiofile",
321 | "id" : "u689009351",
322 | "loop" : 1,
323 | "content_state" : {
324 | "loop" : 1
325 | }
326 |
327 | }
328 | ]
329 | }
330 | ,
331 | "followglobaltempo" : 0,
332 | "formantcorrection" : 0,
333 | "id" : "obj-15",
334 | "maxclass" : "playlist~",
335 | "mode" : "basic",
336 | "numinlets" : 1,
337 | "numoutlets" : 5,
338 | "originallength" : [ 0.0, "ticks" ],
339 | "originaltempo" : 120.0,
340 | "outlettype" : [ "signal", "signal", "signal", "", "dictionary" ],
341 | "parameter_enable" : 0,
342 | "patching_rect" : [ 145.0, 88.0, 126.0, 29.0 ],
343 | "pitchcorrection" : 0,
344 | "quality" : "basic",
345 | "timestretch" : [ 0 ]
346 | }
347 |
348 | }
349 | , {
350 | "box" : {
351 | "fontface" : 0,
352 | "fontsize" : 14.0,
353 | "id" : "obj-11",
354 | "maxclass" : "comment",
355 | "numinlets" : 1,
356 | "numoutlets" : 0,
357 | "patching_rect" : [ 19.0, 49.0, 442.0, 22.0 ],
358 | "presentation_linecount" : 2,
359 | "text" : "We can route the audio to different models (or addition) "
360 | }
361 |
362 | }
363 | , {
364 | "box" : {
365 | "fontname" : "Arial",
366 | "fontsize" : 13.0,
367 | "id" : "obj-63",
368 | "maxclass" : "comment",
369 | "numinlets" : 1,
370 | "numoutlets" : 0,
371 | "patching_rect" : [ 43.0, 261.0, 72.0, 21.0 ],
372 | "text" : "Darbouka",
373 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
374 | }
375 |
376 | }
377 | , {
378 | "box" : {
379 | "fontname" : "Arial",
380 | "fontsize" : 13.0,
381 | "id" : "obj-64",
382 | "maxclass" : "comment",
383 | "numinlets" : 1,
384 | "numoutlets" : 0,
385 | "patching_rect" : [ 43.0, 245.0, 71.0, 21.0 ],
386 | "text" : "Dry",
387 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
388 | }
389 |
390 | }
391 | , {
392 | "box" : {
393 | "fontname" : "Arial",
394 | "fontsize" : 13.0,
395 | "id" : "obj-66",
396 | "maxclass" : "comment",
397 | "numinlets" : 1,
398 | "numoutlets" : 0,
399 | "patching_rect" : [ 43.0, 229.0, 71.0, 21.0 ],
400 | "text" : "None",
401 | "textcolor" : [ 0.803922, 0.898039, 0.909804, 1.0 ]
402 | }
403 |
404 | }
405 | , {
406 | "box" : {
407 | "disabled" : [ 0, 0, 0, 0, 0, 0 ],
408 | "id" : "obj-73",
409 | "itemtype" : 0,
410 | "maxclass" : "radiogroup",
411 | "numinlets" : 1,
412 | "numoutlets" : 1,
413 | "outlettype" : [ "" ],
414 | "parameter_enable" : 0,
415 | "patching_rect" : [ 25.0, 231.0, 93.5, 98.0 ],
416 | "size" : 6,
417 | "value" : 2
418 | }
419 |
420 | }
421 | , {
422 | "box" : {
423 | "channels" : 1,
424 | "fontsize" : 13.0,
425 | "id" : "obj-27",
426 | "lastchannelcount" : 0,
427 | "maxclass" : "live.gain~",
428 | "numinlets" : 1,
429 | "numoutlets" : 4,
430 | "orientation" : 1,
431 | "outlettype" : [ "signal", "", "float", "list" ],
432 | "parameter_enable" : 1,
433 | "patching_rect" : [ 26.0, 374.0, 147.0, 35.0 ],
434 | "saved_attribute_attributes" : {
435 | "valueof" : {
436 | "parameter_initial" : [ -50 ],
437 | "parameter_initial_enable" : 1,
438 | "parameter_longname" : "live.gain~",
439 | "parameter_mmax" : 6.0,
440 | "parameter_mmin" : -70.0,
441 | "parameter_shortname" : "live.gain~",
442 | "parameter_type" : 0,
443 | "parameter_unitstyle" : 4
444 | }
445 |
446 | }
447 | ,
448 | "showname" : 0,
449 | "varname" : "live.gain~"
450 | }
451 |
452 | }
453 | , {
454 | "box" : {
455 | "id" : "obj-7",
456 | "local" : 1,
457 | "maxclass" : "ezdac~",
458 | "numinlets" : 2,
459 | "numoutlets" : 0,
460 | "patching_rect" : [ 26.0, 427.0, 44.0, 44.0 ],
461 | "prototypename" : "helpfile"
462 | }
463 |
464 | }
465 | , {
466 | "box" : {
467 | "fontname" : "Arial",
468 | "fontsize" : 13.0,
469 | "id" : "obj-9",
470 | "maxclass" : "newobj",
471 | "numinlets" : 5,
472 | "numoutlets" : 1,
473 | "outlettype" : [ "signal" ],
474 | "patching_rect" : [ 26.0, 343.0, 259.0, 23.0 ],
475 | "text" : "selector~ 4"
476 | }
477 |
478 | }
479 | , {
480 | "box" : {
481 | "fontface" : 1,
482 | "fontsize" : 20.0,
483 | "id" : "obj-26",
484 | "maxclass" : "comment",
485 | "numinlets" : 1,
486 | "numoutlets" : 0,
487 | "patching_rect" : [ 19.0, 18.0, 447.0, 29.0 ],
488 | "text" : "03 - Different audio models (and stereo trick)"
489 | }
490 |
491 | }
492 | , {
493 | "box" : {
494 | "id" : "obj-1",
495 | "maxclass" : "newobj",
496 | "numinlets" : 1,
497 | "numoutlets" : 1,
498 | "outlettype" : [ "signal" ],
499 | "patching_rect" : [ 146.0, 274.0, 131.0, 22.0 ],
500 | "text" : "nn~ darbouka forward"
501 | }
502 |
503 | }
504 | , {
505 | "box" : {
506 | "attr" : "enable",
507 | "id" : "obj-31",
508 | "maxclass" : "attrui",
509 | "numinlets" : 1,
510 | "numoutlets" : 1,
511 | "outlettype" : [ "" ],
512 | "patching_rect" : [ 432.0, 310.0, 150.0, 22.0 ]
513 | }
514 |
515 | }
516 | ],
517 | "lines" : [ {
518 | "patchline" : {
519 | "destination" : [ "obj-32", 0 ],
520 | "order" : 0,
521 | "source" : [ "obj-1", 0 ]
522 | }
523 |
524 | }
525 | , {
526 | "patchline" : {
527 | "destination" : [ "obj-9", 2 ],
528 | "order" : 1,
529 | "source" : [ "obj-1", 0 ]
530 | }
531 |
532 | }
533 | , {
534 | "patchline" : {
535 | "destination" : [ "obj-18", 1 ],
536 | "midpoints" : [ 154.5, 156.0, 132.0, 156.0, 132.0, 202.0, 205.5, 202.0 ],
537 | "source" : [ "obj-13", 0 ]
538 | }
539 |
540 | }
541 | , {
542 | "patchline" : {
543 | "destination" : [ "obj-18", 1 ],
544 | "midpoints" : [ 154.5, 120.0, 134.0, 120.0, 134.0, 203.0, 205.5, 203.0 ],
545 | "source" : [ "obj-15", 0 ]
546 | }
547 |
548 | }
549 | , {
550 | "patchline" : {
551 | "destination" : [ "obj-18", 3 ],
552 | "midpoints" : [ 386.5, 203.0, 305.5, 203.0 ],
553 | "source" : [ "obj-16", 0 ]
554 | }
555 |
556 | }
557 | , {
558 | "patchline" : {
559 | "destination" : [ "obj-18", 2 ],
560 | "midpoints" : [ 352.5, 203.0, 255.5, 203.0 ],
561 | "source" : [ "obj-17", 1 ]
562 | }
563 |
564 | }
565 | , {
566 | "patchline" : {
567 | "destination" : [ "obj-18", 2 ],
568 | "midpoints" : [ 295.5, 203.0, 255.5, 203.0 ],
569 | "source" : [ "obj-17", 0 ]
570 | }
571 |
572 | }
573 | , {
574 | "patchline" : {
575 | "destination" : [ "obj-1", 0 ],
576 | "order" : 2,
577 | "source" : [ "obj-18", 0 ]
578 | }
579 |
580 | }
581 | , {
582 | "patchline" : {
583 | "destination" : [ "obj-29", 0 ],
584 | "midpoints" : [ 155.5, 255.0, 132.0, 255.0, 132.0, 304.0, 417.0, 304.0, 417.0, 338.0, 441.5, 338.0 ],
585 | "order" : 1,
586 | "source" : [ "obj-18", 0 ]
587 | }
588 |
589 | }
590 | , {
591 | "patchline" : {
592 | "destination" : [ "obj-30", 0 ],
593 | "midpoints" : [ 155.5, 255.0, 132.0, 255.0, 132.0, 304.0, 417.0, 304.0, 417.0, 338.0, 579.0, 338.0, 579.0, 345.0, 591.5, 345.0 ],
594 | "order" : 0,
595 | "source" : [ "obj-18", 0 ]
596 | }
597 |
598 | }
599 | , {
600 | "patchline" : {
601 | "destination" : [ "obj-9", 1 ],
602 | "midpoints" : [ 155.5, 255.0, 129.0, 255.0, 129.0, 336.0, 95.5, 336.0 ],
603 | "order" : 3,
604 | "source" : [ "obj-18", 0 ]
605 | }
606 |
607 | }
608 | , {
609 | "patchline" : {
610 | "destination" : [ "obj-18", 0 ],
611 | "source" : [ "obj-22", 0 ]
612 | }
613 |
614 | }
615 | , {
616 | "patchline" : {
617 | "destination" : [ "obj-16", 0 ],
618 | "source" : [ "obj-24", 0 ]
619 | }
620 |
621 | }
622 | , {
623 | "patchline" : {
624 | "destination" : [ "obj-7", 1 ],
625 | "order" : 0,
626 | "source" : [ "obj-27", 0 ]
627 | }
628 |
629 | }
630 | , {
631 | "patchline" : {
632 | "destination" : [ "obj-7", 0 ],
633 | "order" : 1,
634 | "source" : [ "obj-27", 0 ]
635 | }
636 |
637 | }
638 | , {
639 | "patchline" : {
640 | "destination" : [ "obj-32", 1 ],
641 | "order" : 0,
642 | "source" : [ "obj-28", 0 ]
643 | }
644 |
645 | }
646 | , {
647 | "patchline" : {
648 | "destination" : [ "obj-9", 3 ],
649 | "midpoints" : [ 302.5, 302.0, 252.0, 302.0, 252.0, 330.0, 215.5, 330.0 ],
650 | "order" : 1,
651 | "source" : [ "obj-28", 0 ]
652 | }
653 |
654 | }
655 | , {
656 | "patchline" : {
657 | "destination" : [ "obj-7", 0 ],
658 | "midpoints" : [ 441.5, 419.0, 35.5, 419.0 ],
659 | "source" : [ "obj-29", 0 ]
660 | }
661 |
662 | }
663 | , {
664 | "patchline" : {
665 | "destination" : [ "obj-7", 1 ],
666 | "midpoints" : [ 591.5, 419.0, 60.5, 419.0 ],
667 | "source" : [ "obj-30", 0 ]
668 | }
669 |
670 | }
671 | , {
672 | "patchline" : {
673 | "destination" : [ "obj-29", 0 ],
674 | "source" : [ "obj-31", 0 ]
675 | }
676 |
677 | }
678 | , {
679 | "patchline" : {
680 | "destination" : [ "obj-9", 4 ],
681 | "source" : [ "obj-32", 0 ]
682 | }
683 |
684 | }
685 | , {
686 | "patchline" : {
687 | "destination" : [ "obj-31", 0 ],
688 | "source" : [ "obj-37", 0 ]
689 | }
690 |
691 | }
692 | , {
693 | "patchline" : {
694 | "destination" : [ "obj-18", 1 ],
695 | "midpoints" : [ 154.5, 202.0, 205.5, 202.0 ],
696 | "source" : [ "obj-6", 0 ]
697 | }
698 |
699 | }
700 | , {
701 | "patchline" : {
702 | "destination" : [ "obj-9", 0 ],
703 | "source" : [ "obj-73", 0 ]
704 | }
705 |
706 | }
707 | , {
708 | "patchline" : {
709 | "destination" : [ "obj-27", 0 ],
710 | "source" : [ "obj-9", 0 ]
711 | }
712 |
713 | }
714 | ],
715 | "parameters" : {
716 | "obj-27" : [ "live.gain~", "live.gain~", 0 ],
717 | "parameterbanks" : {
718 |
719 | }
720 | ,
721 | "inherited_shortname" : 1
722 | }
723 | ,
724 | "dependency_cache" : [ {
725 | "name" : "drumLoop.aif",
726 | "bootpath" : "C74:/media/msp",
727 | "type" : "AIFF",
728 | "implicit" : 1
729 | }
730 | , {
731 | "name" : "eroica.aiff",
732 | "bootpath" : "C74:/docs/tutorial-patchers/msp-tut",
733 | "type" : "AIFF",
734 | "implicit" : 1
735 | }
736 | , {
737 | "name" : "morph.256.rom.aif",
738 | "bootpath" : "C74:/packages/BEAP/misc",
739 | "type" : "AIFF",
740 | "implicit" : 1
741 | }
742 | , {
743 | "name" : "nn~.mxo",
744 | "type" : "iLaX"
745 | }
746 | ],
747 | "autosave" : 0
748 | }
749 |
750 | }
751 |
--------------------------------------------------------------------------------