├── 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 | ACIDS 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 |

19 | Lessons • 20 | Setup • 21 | Detailed lessons • 22 | Contribution • 23 | About 24 |

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 |
  1. Lessons 43 | 55 |
  2. 56 |
  3. Detailed lessons
  4. 57 |
  5. Contribution
  6. 58 |
  7. About
  8. 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 | [![Slides](https://img.shields.io/badge/Slides-online-7DA416.svg?style=flat-square&logo=googledrive)](https://docs.google.com/presentation/d/e/2PACX-1vRGy4H9JWjxK8d760O4pJT_7wfCett-rKjFV91d6jLkCHSMUntJjRA8a3r25M7_WrIDxggnjeXHdsi2/pub?start=false&loop=false&delayms=1000000&slide=id.p1) 70 | [![Colab](https://img.shields.io/badge/Notebook-colab-7DA416.svg?style=flat-square&logo=googlecolab)](https://colab.research.google.com/drive/1tAIsucXMqHJ0hVTYcuoUzBt69lSn86i0?usp=sharing) 71 | - Offline: 72 | [![Powerpoint](https://img.shields.io/badge/Slides-download-167DA4.svg?style=flat-square&logo=files)](00_introduction.pdf) 73 | [![Notebook](https://img.shields.io/badge/Notebook-download-167DA4.svg?style=flat-square&logo=jupyter)](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 | [![Slides](https://img.shields.io/badge/Slides-none-7D1616.svg?style=flat-square&logo=googledrive)]() 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 | [![Slides](https://img.shields.io/badge/Slides-online-7DA416.svg?style=flat-square&logo=googledrive)](https://docs.google.com/presentation/d/e/2PACX-1vT5O2dGSyQT2CTwXHM1HVDsunzskacJ6LhJBUMUbLRRg4C34krOSzqf8y75YD19QQrWfvBJypKlHd1Z/pub?start=false&loop=false&delayms=60000) 84 | [![Powerpoint](https://img.shields.io/badge/Slides-download-167DA4.svg?style=flat-square&logo=files)](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 | [![Slides](https://img.shields.io/badge/Slides-online-7DA416.svg?style=flat-square&logo=googledrive)](https://docs.google.com/presentation/d/e/2PACX-1vRC4PpmQEgr0c6M7REkh_--slZA7xYXjZiS1MBjUbyUBBq-u10dDyzPoLKxlNXma4dd_YQC-JlnXOrw/pub?start=false&loop=false&delayms=60000) 101 | [![Powerpoint](https://img.shields.io/badge/Slides-download-167DA4.svg?style=flat-square&logo=files)](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 | [![Slides](https://img.shields.io/badge/Slides-online-7DA416.svg?style=flat-square&logo=googledrive)](https://docs.google.com/presentation/d/e/2PACX-1vSVhSnx_dazxBS-PuLaG5Xz9DMC7IT5VM4t3xBhxgrtjjKiDJ8lZntirwDuiIfuhhB6OhYIdnwG5Ucn/pub?start=false&loop=false&delayms=3000) 116 | [![Powerpoint](https://img.shields.io/badge/Slides-download-167DA4.svg?style=flat-square&logo=files)](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 | [![Slides](https://img.shields.io/badge/Slides-online-7DA416.svg?style=flat-square&logo=googledrive)](https://docs.google.com/presentation/d/e/2PACX-1vRMJDveCOO0EkjLTf_x8usNAOcvVaGq6VdwXy3d6GKCnXFgJumYb2r27qp7RmFCmnr9P8NFxRHWnqF9/pub?start=false&loop=false&delayms=3000) 128 | [![Powerpoint](https://img.shields.io/badge/Slides-download-167DA4.svg?style=flat-square&logo=files)](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 | ampfaaaametaptch=,{ 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 | --------------------------------------------------------------------------------