aboutsummaryrefslogtreecommitdiff
path: root/memento/tutorial
diff options
context:
space:
mode:
Diffstat (limited to 'memento/tutorial')
-rw-r--r--memento/tutorial/0-START.pd30
-rw-r--r--memento/tutorial/0-tut.pd17
-rw-r--r--memento/tutorial/1-tut.pd22
-rw-r--r--memento/tutorial/10-tut.pd41
-rw-r--r--memento/tutorial/11-tut.pd25
-rw-r--r--memento/tutorial/12-tut.pd61
-rw-r--r--memento/tutorial/2-tut.pd22
-rw-r--r--memento/tutorial/3-tut.pd30
-rw-r--r--memento/tutorial/4-tut.pd41
-rw-r--r--memento/tutorial/5-tut.pd51
-rw-r--r--memento/tutorial/6-tut.pd39
-rw-r--r--memento/tutorial/7-tut.pd16
-rw-r--r--memento/tutorial/8-tut.pd13
-rw-r--r--memento/tutorial/9-tut.pd20
-rw-r--r--memento/tutorial/MoreStates.dat22
-rw-r--r--memento/tutorial/OSCAbstraction.pd32
-rw-r--r--memento/tutorial/TheStateName.dat6
-rw-r--r--memento/tutorial/anAbstraction.pd29
-rw-r--r--memento/tutorial/miniab.pd18
-rw-r--r--memento/tutorial/neu.dat22
-rw-r--r--memento/tutorial/savedState.dat6
-rw-r--r--memento/tutorial/tutorial.pd15
22 files changed, 578 insertions, 0 deletions
diff --git a/memento/tutorial/0-START.pd b/memento/tutorial/0-START.pd
new file mode 100644
index 0000000..c992182
--- /dev/null
+++ b/memento/tutorial/0-START.pd
@@ -0,0 +1,30 @@
+#N canvas 440 304 450 300 10;
+#X obj 124 153 hradio 15 0 0 13 part empty Goto_part 0 -6 128 8 -262144
+-1 -1 0;
+#X obj 9 7 cnv 15 100 20 empty empty Using_Memento 20 12 1 14 -262144
+-66577 0;
+#N canvas 0 0 504 355 nav 0;
+#X obj 82 38 r part;
+#X msg 99 83 \; pd open \$1-tut.pd .;
+#X obj 65 120 - 1;
+#X obj 68 168 del 10;
+#X obj 66 143 t b f;
+#X obj 71 190 f;
+#X obj 68 248 makefilename pd-%s;
+#X msg 67 219 symbol \$1-tut.pd;
+#X msg 68 280 \; pd \$1 menu_close \;;
+#X connect 0 0 1 0;
+#X connect 0 0 2 0;
+#X connect 2 0 4 0;
+#X connect 3 0 5 0;
+#X connect 4 0 3 0;
+#X connect 4 1 5 1;
+#X connect 5 0 7 0;
+#X connect 6 0 8 0;
+#X connect 7 0 6 0;
+#X restore 317 15 pd nav;
+#X text 19 65 This is a tutorial explaing the Memento preset system.
+To use it \, make sure \, the directory containing the memento patches
+is in you pd-path \, then navigate through the tutorial parts with
+the following radio button:;
+#X floatatom 158 192 5 0 0 0 currently_viewing part -;
diff --git a/memento/tutorial/0-tut.pd b/memento/tutorial/0-tut.pd
new file mode 100644
index 0000000..53c010d
--- /dev/null
+++ b/memento/tutorial/0-tut.pd
@@ -0,0 +1,17 @@
+#N canvas 489 406 539 307 10;
+#X obj 9 7 cnv 15 100 20 empty empty Overview 20 12 1 14 -262144 -66577
+0;
+#X text 44 168 The caretaker exists only once \, the originator exists
+for every abstraction \, that needs to save something \, and commun
+objects exists for every bit of a save.;
+#X text 46 221 Let's look at the caretaker first.;
+#X obj 349 32 s part;
+#X msg 349 8 1;
+#X text 377 7 click here \, to go on;
+#X text 44 83 Memento is divided in various parts \, where each part
+has a well defined responsibility. A single caretaker is responsible
+for saving and loading state to rsp. from disk \, [originator]s wrap
+all access to change or read out the state. The originator uses commun
+objects to communicate with the things \, that represent the state.
+;
+#X connect 4 0 3 0;
diff --git a/memento/tutorial/1-tut.pd b/memento/tutorial/1-tut.pd
new file mode 100644
index 0000000..e92f68a
--- /dev/null
+++ b/memento/tutorial/1-tut.pd
@@ -0,0 +1,22 @@
+#N canvas 328 363 557 382 10;
+#X obj 9 7 cnv 15 100 20 empty empty The_Caretaker 20 12 1 14 -262144
+-66577 0;
+#X obj 378 34 s part;
+#X msg 378 10 2;
+#X text 406 8 click here \, to go on;
+#X text 44 83 The most comfortable way to use the caretaker object
+is the careGUI GUI patch:;
+#X obj 46 122 careGUI;
+#X text 43 208 It *needs* to know a filename \, before it's functional.
+You either can provide this as an argument \, or click on FILE to select
+a state file.;
+#X obj 434 284 bng 15 250 50 0 empty empty print 0 -6 0 8 -261689 -1
+-1;
+#X text 41 305 Restore also sends a;
+#X msg 191 305 bang;
+#X text 230 306 to the careGUI outlet.;
+#X text 39 332 You can use the bang \, to do housekeeping after a state
+has been loaded from disk.;
+#X text 38 257 Save and Restore do as they say: They move the memory
+data to and from disk. To see the menory data \, you can press;
+#X connect 2 0 1 0;
diff --git a/memento/tutorial/10-tut.pd b/memento/tutorial/10-tut.pd
new file mode 100644
index 0000000..5461ad6
--- /dev/null
+++ b/memento/tutorial/10-tut.pd
@@ -0,0 +1,41 @@
+#N canvas 347 241 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Using_OSC 20 12 1 14 -262144 -66577
+0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X obj 59 298 OSCAbstraction /OSCState;
+#X msg 378 10 11;
+#X obj 59 249 pack s s;
+#X obj 249 245 pack s 0;
+#X obj 418 244 pack s 0;
+#X symbolatom 59 167 10 0 0 0 - - -;
+#X obj 59 189 t b s;
+#X obj 59 215 symbol /OSCState/aSymbol;
+#X floatatom 249 167 5 0 0 0 - - -;
+#X obj 418 171 hradio 15 1 0 8 empty empty aRadio 0 -6 0 8 -262144
+-1 -1 3;
+#X obj 418 218 symbol /OSCState/aRadio;
+#X obj 249 217 symbol /OSCState/aFloat;
+#X obj 249 191 t b f;
+#X obj 418 194 t b f;
+#X text 55 76 Here's an example \, how you could create the needed
+OSC-messages by hand: OSC-Selectors are like a filesystem path \, where
+/ is the directory divider. First comes the name of the state \, after
+that the thing to set and as second part of the list you give the value
+to set.;
+#X connect 4 0 1 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
+#X connect 7 0 3 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 9 1 5 1;
+#X connect 10 0 5 0;
+#X connect 11 0 15 0;
+#X connect 12 0 16 0;
+#X connect 13 0 7 0;
+#X connect 14 0 6 0;
+#X connect 15 0 14 0;
+#X connect 15 1 6 1;
+#X connect 16 0 13 0;
+#X connect 16 1 7 1;
diff --git a/memento/tutorial/11-tut.pd b/memento/tutorial/11-tut.pd
new file mode 100644
index 0000000..e1ebbf4
--- /dev/null
+++ b/memento/tutorial/11-tut.pd
@@ -0,0 +1,25 @@
+#N canvas 452 267 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Networking_with_OSC 20 12 1 14
+-262144 -66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X obj 76 340 OSCAbstraction /OSCState;
+#X obj 126 291 sendOSC;
+#X obj 76 316 dumpOSC 3000;
+#X msg 282 274 connect localhost 3000;
+#X obj 282 252 loadbang;
+#X obj 76 187 netcontrol /OSCState aFloat;
+#X obj 281 187 netcontrol /OSCState aRadio;
+#X text 65 77 Memento comes with an example remote control GUI called
+netcontrol. You give it the name of a receiver and then you can send
+floats to that receiver. Doing the same for other data types like symbols
+is left as an exercise to the reader. You supply the target state as
+first argument \, the receiver as second arg (without / in the example)
+;
+#X msg 378 10 12;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 7 0 6 0;
+#X connect 8 0 4 0;
+#X connect 9 0 4 0;
+#X connect 11 0 1 0;
diff --git a/memento/tutorial/12-tut.pd b/memento/tutorial/12-tut.pd
new file mode 100644
index 0000000..69ebb7e
--- /dev/null
+++ b/memento/tutorial/12-tut.pd
@@ -0,0 +1,61 @@
+#N canvas 339 60 576 798 10;
+#X obj 9 7 cnv 15 100 20 empty empty Summary_and_Conclusion 20 12 1
+14 -262144 -66577 0;
+#X text 36 95 a) Things to do inside abstractions;
+#X obj 71 240 originator \$1 \$0;
+#X obj 125 183 commun /myFloat \$0;
+#X floatatom 215 157 5 0 0 0 - - -;
+#X obj 73 367 originator \$1 \$0;
+#X obj 73 317 t b f;
+#X msg 73 342 set;
+#X msg 103 343 substate \$1;
+#X floatatom 73 299 5 0 0 1 presets - -;
+#X obj 234 300 inlet OSC;
+#X text 45 397 b) Things to do in the parent patch;
+#X text 72 419 1 create a single careGUI:;
+#X obj 73 443 careGUI;
+#X obj 74 582 miniab /one;
+#X text 70 639 3 Use the OSC-inlet for remote control as you like.
+;
+#X text 151 717 Now have fun and: Please share your patches.;
+#X text 39 37 Now you've seen in detail \, how to add a preset mechanism
+and remote control with OSC to a patch using Memento. I'd like to end
+this tutorial with a summary of what to do to memento-ize your work:
+;
+#X text 72 534 2 use your abstractions with unique identifiers as arguments
+\, starting with a slash for OSC:;
+#X text 66 124 1 X-wrap (cross-wrap) all things \, that you want to
+save \, with 'commun' objects. Use names starting with slashes for
+OSC:;
+#X text 69 220 2 create a single [originator \$1 \$0] object per abstraction
+;
+#X text 71 278 3 Create a substate selector and OSC-inlet (optional):
+;
+#N canvas 0 0 450 300 OSC 0;
+#X obj 114 56 loadbang;
+#X obj 114 124 sendOSC;
+#X msg 114 86 connect localhost 3001;
+#X obj 62 62 inlet;
+#X msg 228 107 disconnect;
+#X connect 0 0 2 0;
+#X connect 2 0 1 0;
+#X connect 3 0 1 0;
+#X connect 4 0 1 0;
+#X restore 75 715 pd OSC;
+#X obj 377 564 dumpOSC 3001;
+#X obj 227 581 miniab /two;
+#X obj 75 660 netcontrol /* myFloat;
+#X text 150 736 (c) Frank Barknecht <fbar@footils.org> \, free to use
+as you like.;
+#X text 286 671 (See the /*? OSC knows wildcards!);
+#X connect 3 0 4 0;
+#X connect 4 0 3 0;
+#X connect 6 0 7 0;
+#X connect 6 1 8 0;
+#X connect 7 0 5 0;
+#X connect 8 0 5 0;
+#X connect 9 0 6 0;
+#X connect 10 0 5 1;
+#X connect 23 0 14 0;
+#X connect 23 0 24 0;
+#X connect 25 0 22 0;
diff --git a/memento/tutorial/2-tut.pd b/memento/tutorial/2-tut.pd
new file mode 100644
index 0000000..fe56d09
--- /dev/null
+++ b/memento/tutorial/2-tut.pd
@@ -0,0 +1,22 @@
+#N canvas 322 395 557 382 10;
+#X obj 9 7 cnv 15 100 20 empty empty The_Originator 20 12 1 14 -262144
+-66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X msg 378 10 3;
+#X text 41 68 The originator object wraps access to the data stored
+in memory. The object takes two creating argument: a symbol and a float.
+;
+#X obj 141 128 originator TheState 10;
+#X text 45 160 The first \, symbolic argument will be the name of the
+state \, that is managed. The second \, float argument is used for
+communication with the commun objects. Normally it should be unique
+to a patch \, because then you get only local communcation inside a
+patch's borders. To make it unique use \$0:;
+#X obj 139 256 originator AnotherState \$0;
+#X text 48 282 If you intend to use your patch several times \, it's
+possible to use \$1 as argument to originator \, so that the surrounding
+patch will specify the state name. So in the end \, you'll probably
+always use this:;
+#X obj 139 353 originator \$1 \$0;
+#X connect 3 0 1 0;
diff --git a/memento/tutorial/3-tut.pd b/memento/tutorial/3-tut.pd
new file mode 100644
index 0000000..083708a
--- /dev/null
+++ b/memento/tutorial/3-tut.pd
@@ -0,0 +1,30 @@
+#N canvas 322 395 781 403 10;
+#X obj 10 7 cnv 15 100 20 empty empty Originator_Methods 20 12 1 14
+-262144 -66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X obj 30 301 originator aState \$0;
+#X msg 77 179 set;
+#X msg 74 214 copy;
+#X msg 72 233 paste;
+#X msg 74 270 create AnotherState;
+#X msg 77 132 substate \$1;
+#X obj 77 110 hradio 15 0 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X text 219 108 Select a substate. Substates are subdirectories \,
+that contain a set of state variables.;
+#X text 217 173 Set the managed objects to the values of the substate
+currently selected. Objects are managed with 'commun'. See later;
+#X text 215 218 Copy and paste a complete substate.;
+#X text 219 266 Create a totally new state. Overwrites the object argument.
+Instead of a state called 'aState' now everything is inside a state
+'AnotherState'.;
+#X text 42 64 Originator accepts various methods:;
+#X msg 378 10 4;
+#X connect 4 0 3 0;
+#X connect 5 0 3 0;
+#X connect 6 0 3 0;
+#X connect 7 0 3 0;
+#X connect 8 0 3 0;
+#X connect 9 0 8 0;
+#X connect 15 0 1 0;
diff --git a/memento/tutorial/4-tut.pd b/memento/tutorial/4-tut.pd
new file mode 100644
index 0000000..66bb69d
--- /dev/null
+++ b/memento/tutorial/4-tut.pd
@@ -0,0 +1,41 @@
+#N canvas 318 284 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Commun 20 12 1 14 -262144 -66577
+0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X msg 378 10 5;
+#X obj 156 192 commun number 10;
+#X text 63 82 'commun' objects are responsible for communication between
+the 'originator' and the things you want to set. They also accept a
+symbolic argument as first and a float as second argument. The symbolic
+argument is used to uniquely identify the 'thing' that is managed.
+The second \, float arg serves the communication with the 'originator'.
+Normally you use \$0 here.;
+#X text 60 214 X-lets;
+#X floatatom 272 296 5 0 0 0 - - -;
+#X obj 139 321 commun aRadio \$0;
+#X obj 139 296 commun aFloat \$0;
+#X obj 271 322 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X text 73 346 Of course you also can use send/receives for this \,
+to keep things more readable:;
+#X obj 92 430 s \$0-something-in;
+#X obj 92 385 r \$0-something-out;
+#X obj 92 406 commun aThing 10;
+#X obj 263 432 s \$0-something-out;
+#X obj 263 387 r \$0-something-in;
+#X obj 266 410 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 0 1;
+#X text 69 230 The inlet of commun reads \, what should be saved \,
+continuosly. The outlet sets the managed 'thing' to the value \, that
+is currently stored in the 'originator' state. So you normally 'cross-wrap'
+things like this:;
+#X connect 3 0 1 0;
+#X connect 7 0 9 0;
+#X connect 8 0 10 0;
+#X connect 9 0 7 0;
+#X connect 10 0 8 0;
+#X connect 13 0 14 0;
+#X connect 14 0 12 0;
+#X connect 16 0 17 0;
+#X connect 17 0 15 0;
diff --git a/memento/tutorial/5-tut.pd b/memento/tutorial/5-tut.pd
new file mode 100644
index 0000000..c8061d3
--- /dev/null
+++ b/memento/tutorial/5-tut.pd
@@ -0,0 +1,51 @@
+#N canvas 318 284 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Commun_and_Originator 20 12 1
+14 -262144 -66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X floatatom 166 253 5 0 0 0 - - -;
+#X obj 98 334 commun aRadio \$0;
+#X obj 97 282 commun aFloat \$0;
+#X obj 167 310 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 4;
+#X obj 87 421 s \$0-something-in;
+#X obj 87 376 r \$0-something-out;
+#X obj 223 422 s \$0-something-out;
+#X obj 223 375 r \$0-something-in;
+#X obj 226 400 hsl 128 15 0 127 0 0 empty empty empty -2 -6 0 8 -262144
+-1 -1 3900 1;
+#X msg 378 10 6;
+#X obj 87 397 commun aThing \$0;
+#X obj 152 202 originator myState \$0;
+#X msg 152 177 set;
+#X msg 189 177 substate \$1;
+#X obj 159 126 tgl 24 0 empty empty Toggles_Between_2_Substates 0 -6
+0 10 -225280 -1 -1 0 1;
+#X obj 159 153 t b f;
+#X text 67 451 Now play with these settings and try to switch between
+substates as well.;
+#X text 66 224 And lets manage some things with commun objects. Note
+the \$0.;
+#X symbolatom 359 267 10 0 0 2 type_something_here - -;
+#X obj 323 289 commun aSymbol \$0;
+#X obj 323 313 symbol;
+#X text 284 334 Symbols need another 'symbol' object!;
+#X text 51 77 Now lets see \, how originator and commun work together.
+First create the originator and add some messages to it:;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 8 0 13 0;
+#X connect 10 0 11 0;
+#X connect 11 0 9 0;
+#X connect 12 0 1 0;
+#X connect 13 0 7 0;
+#X connect 15 0 14 0;
+#X connect 16 0 14 0;
+#X connect 17 0 18 0;
+#X connect 18 0 15 0;
+#X connect 18 1 16 0;
+#X connect 21 0 22 0;
+#X connect 22 0 23 0;
+#X connect 23 0 21 0;
diff --git a/memento/tutorial/6-tut.pd b/memento/tutorial/6-tut.pd
new file mode 100644
index 0000000..de5eb56
--- /dev/null
+++ b/memento/tutorial/6-tut.pd
@@ -0,0 +1,39 @@
+#N canvas 318 284 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Saving_And_Loading 20 12 1 14
+-262144 -66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X floatatom 166 253 5 0 0 0 - - -;
+#X obj 98 334 commun aRadio \$0;
+#X obj 97 282 commun aFloat \$0;
+#X obj 167 310 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 7;
+#X msg 96 201 set;
+#X msg 133 201 substate \$1;
+#X obj 103 150 tgl 24 0 empty empty Toggles_Between_2_Substates 0 -6
+0 10 -225280 -1 -1 1 1;
+#X obj 103 177 t b f;
+#X symbolatom 359 267 10 0 0 2 type_something_here - -;
+#X obj 323 289 commun aSymbol \$0;
+#X obj 323 313 symbol;
+#X text 284 334 Symbols need another 'symbol' object!;
+#X msg 378 10 7;
+#X text 51 77 Now only a single change: We added a caretaker with careGUI.
+Please select a file then play with saving and restoring. You also
+can peek into the state with PRINT.;
+#X obj 98 377 careGUI;
+#X obj 96 226 originator myState-2 \$0;
+#X text 117 461 First select a FILE \, then SAVE!!!;
+#X connect 3 0 5 0;
+#X connect 4 0 6 0;
+#X connect 5 0 3 0;
+#X connect 6 0 4 0;
+#X connect 7 0 18 0;
+#X connect 8 0 18 0;
+#X connect 9 0 10 0;
+#X connect 10 0 7 0;
+#X connect 10 1 8 0;
+#X connect 11 0 12 0;
+#X connect 12 0 13 0;
+#X connect 13 0 11 0;
+#X connect 15 0 1 0;
diff --git a/memento/tutorial/7-tut.pd b/memento/tutorial/7-tut.pd
new file mode 100644
index 0000000..3ad77f1
--- /dev/null
+++ b/memento/tutorial/7-tut.pd
@@ -0,0 +1,16 @@
+#N canvas 393 272 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Abstractions 20 12 1 14 -262144
+-66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X msg 378 10 8;
+#X obj 59 187 anAbstraction TheStateName;
+#X obj 98 377 careGUI TheStateName.dat;
+#X text 57 78 Here's comes the cool part. All you've learned so far
+also works with abstractions. Abstractions are pd-files \, that are
+saved standalone and then called in another patch by name. Here we
+gave our abstraction an argument \, that gets routed to the 'originator'
+as name of the state. Play with it \, and don't forget to first select
+a caretaker-file.;
+#X text 100 461 First select a FILE \, then SAVE or RESTORE!!!;
+#X connect 3 0 1 0;
diff --git a/memento/tutorial/8-tut.pd b/memento/tutorial/8-tut.pd
new file mode 100644
index 0000000..ecb1155
--- /dev/null
+++ b/memento/tutorial/8-tut.pd
@@ -0,0 +1,13 @@
+#N canvas 393 272 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Multiple_Abstractions 20 12 1
+14 -262144 -66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X text 100 461 First select a FILE \, then SAVE or RESTORE!!!;
+#X obj 53 91 anAbstraction oneState;
+#X obj 54 233 anAbstraction anotherState;
+#X msg 378 10 9;
+#X obj 98 377 careGUI MoreStates.dat;
+#X text 52 56 By using different arguments \, you can even reuse an
+abstraction several times \, each with its own state.;
+#X connect 6 0 1 0;
diff --git a/memento/tutorial/9-tut.pd b/memento/tutorial/9-tut.pd
new file mode 100644
index 0000000..290e703
--- /dev/null
+++ b/memento/tutorial/9-tut.pd
@@ -0,0 +1,20 @@
+#N canvas 393 272 611 495 10;
+#X obj 9 7 cnv 15 100 20 empty empty Remote_Control_with_OSC 20 12
+1 14 -262144 -66577 0;
+#X obj 378 34 s part;
+#X text 406 8 click here \, to go on;
+#X text 98 476 First select a FILE \, then SAVE or RESTORE!!!;
+#X obj 96 392 careGUI MoreStates.dat;
+#X obj 47 163 OSCAbstraction /OSCState;
+#X text 45 62 THere even is a remote control built into Memento. It
+is done using Open Sound Control OSC. OSC requires \, that send- and
+receive-names start with a slash '/'. So now our state name (the argument
+of OSCAbstration) has a slash \, and if you look inside \, you'll see
+\, that all commun objects now also start with a slash.;
+#X msg 378 10 10;
+#X text 44 314 Also the abstraction now has gotten an inlet which accepts
+OSC-messages. This needs to be connected to the originator's right
+inlet \, its 'OSC-inlet'. Those messages are always send to a receive
+called \$0-OSC. Just always use it that way. See the next part for
+an example useage.;
+#X connect 7 0 1 0;
diff --git a/memento/tutorial/MoreStates.dat b/memento/tutorial/MoreStates.dat
new file mode 100644
index 0000000..8fd6aaf
--- /dev/null
+++ b/memento/tutorial/MoreStates.dat
@@ -0,0 +1,22 @@
+myState-2 0 , aFloat , 50
+myState-2 0 , aSymbol , help
+myState-2 0 , aRadio , 3
+myState-2 1 , aFloat , 82
+myState-2 1 , aSymbol , me
+myState-2 1 , aRadio , 7
+TheStateName 0 , aFloat , 95
+TheStateName 0 , aSymbol , help
+TheStateName 0 , aRadio , 1
+TheStateName 1 , aFloat , 60
+TheStateName 1 , aSymbol , hi
+TheStateName 1 , aRadio , 4
+oneState 0 , aFloat , 30
+oneState 0 , aSymbol , ImFirst
+oneState 0 , aRadio , 4
+oneState 1 , aSymbol , hi
+anotherState 0 , aFloat , 109
+anotherState 0 , aSymbol , IamNumberTwo
+anotherState 0 , aRadio , 1
+anotherState 1 , aFloat , 144
+anotherState 1 , aSymbol , second
+anotherState 1 , aRadio , 7
diff --git a/memento/tutorial/OSCAbstraction.pd b/memento/tutorial/OSCAbstraction.pd
new file mode 100644
index 0000000..d7c3617
--- /dev/null
+++ b/memento/tutorial/OSCAbstraction.pd
@@ -0,0 +1,32 @@
+#N canvas 128 135 527 326 10;
+#X floatatom 61 224 5 0 0 1 aFloat - -;
+#X obj 258 231 hradio 15 1 0 8 empty empty aRadio 0 -6 0 8 -262144
+-1 -1 4;
+#X msg 52 137 set;
+#X msg 89 137 substate \$1;
+#X obj 59 86 tgl 24 0 empty empty Toggles_Between_2_Substates 0 -6
+0 10 -225280 -1 -1 0 1;
+#X obj 59 113 t b f;
+#X symbolatom 313 159 10 0 0 2 aSymbol - -;
+#X obj 240 152 symbol;
+#X text 201 173 Symbols need another 'symbol' object!;
+#X obj 52 162 originator \$1 \$0;
+#X obj 208 98 inlet;
+#X text 262 99 OSC-In;
+#X obj 240 128 commun /aSymbol \$0;
+#X obj 56 253 commun /aFloat \$0;
+#X obj 252 259 commun /aRadio \$0;
+#X connect 0 0 13 0;
+#X connect 1 0 14 0;
+#X connect 2 0 9 0;
+#X connect 3 0 9 0;
+#X connect 4 0 5 0;
+#X connect 5 0 2 0;
+#X connect 5 1 3 0;
+#X connect 6 0 12 0;
+#X connect 7 0 6 0;
+#X connect 10 0 9 1;
+#X connect 12 0 7 0;
+#X connect 13 0 0 0;
+#X connect 14 0 1 0;
+#X coords 0 0 1 1 400 140 1;
diff --git a/memento/tutorial/TheStateName.dat b/memento/tutorial/TheStateName.dat
new file mode 100644
index 0000000..a1c718e
--- /dev/null
+++ b/memento/tutorial/TheStateName.dat
@@ -0,0 +1,6 @@
+TheStateName 0 , aFloat , 27
+TheStateName 0 , aSymbol , help
+TheStateName 0 , aRadio , 1
+TheStateName 1 , aFloat , 60
+TheStateName 1 , aSymbol , hi
+TheStateName 1 , aRadio , 4
diff --git a/memento/tutorial/anAbstraction.pd b/memento/tutorial/anAbstraction.pd
new file mode 100644
index 0000000..3038356
--- /dev/null
+++ b/memento/tutorial/anAbstraction.pd
@@ -0,0 +1,29 @@
+#N canvas 128 135 527 326 10;
+#X floatatom 58 189 5 0 0 0 - - -;
+#X obj 54 270 commun aRadio \$0;
+#X obj 53 218 commun aFloat \$0;
+#X obj 60 242 hradio 15 1 0 8 empty empty empty 0 -6 0 8 -262144 -1
+-1 0;
+#X msg 52 137 set;
+#X msg 89 137 substate \$1;
+#X obj 59 86 tgl 24 0 empty empty Toggles_Between_2_Substates 0 -6
+0 10 -225280 -1 -1 0 1;
+#X obj 59 113 t b f;
+#X symbolatom 305 202 10 0 0 2 type_something_here - -;
+#X obj 232 171 commun aSymbol \$0;
+#X obj 232 195 symbol;
+#X text 193 216 Symbols need another 'symbol' object!;
+#X obj 52 162 originator \$1 \$0;
+#X connect 0 0 2 0;
+#X connect 1 0 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 1 0;
+#X connect 4 0 12 0;
+#X connect 5 0 12 0;
+#X connect 6 0 7 0;
+#X connect 7 0 4 0;
+#X connect 7 1 5 0;
+#X connect 8 0 9 0;
+#X connect 9 0 10 0;
+#X connect 10 0 8 0;
+#X coords 0 0 1 1 400 140 1;
diff --git a/memento/tutorial/miniab.pd b/memento/tutorial/miniab.pd
new file mode 100644
index 0000000..f212025
--- /dev/null
+++ b/memento/tutorial/miniab.pd
@@ -0,0 +1,18 @@
+#N canvas 82 160 413 225 10;
+#X obj 27 180 originator \$1 \$0;
+#X obj 27 130 t b f;
+#X msg 27 155 set;
+#X msg 57 153 substate \$1;
+#X floatatom 27 90 5 0 0 3 presets - -;
+#X obj 150 65 inlet OSC;
+#X obj 211 124 commun /myFloat \$0;
+#X floatatom 249 91 5 0 0 3 myFloat - -;
+#X connect 1 0 2 0;
+#X connect 1 1 3 0;
+#X connect 2 0 0 0;
+#X connect 3 0 0 0;
+#X connect 4 0 1 0;
+#X connect 5 0 0 1;
+#X connect 6 0 7 0;
+#X connect 7 0 6 0;
+#X coords 0 0 1 1 140 50 1;
diff --git a/memento/tutorial/neu.dat b/memento/tutorial/neu.dat
new file mode 100644
index 0000000..f4e1c31
--- /dev/null
+++ b/memento/tutorial/neu.dat
@@ -0,0 +1,22 @@
+anotherState 0 , aRadio , 7
+anotherState 0 , aFloat , 9
+anotherState 0 , aSymbol , zwei
+anotherState 1 , aRadio , 0
+anotherState 1 , aFloat , 31
+anotherState 1 , aSymbol , zweieinhalb
+myState-2 0 , aRadio , 3
+myState-2 0 , aFloat , 50
+myState-2 0 , aSymbol , help
+myState-2 1 , aRadio , 7
+myState-2 1 , aFloat , 82
+myState-2 1 , aSymbol , me
+oneState 0 , aRadio , 3
+oneState 0 , aFloat , 9
+oneState 0 , aSymbol , eins
+oneState 1 , aRadio , 7
+TheStateName 0 , aRadio , 1
+TheStateName 0 , aFloat , 27
+TheStateName 0 , aSymbol , help
+TheStateName 1 , aRadio , 4
+TheStateName 1 , aFloat , 60
+TheStateName 1 , aSymbol , hi
diff --git a/memento/tutorial/savedState.dat b/memento/tutorial/savedState.dat
new file mode 100644
index 0000000..7532a60
--- /dev/null
+++ b/memento/tutorial/savedState.dat
@@ -0,0 +1,6 @@
+myState-2 0 , aFloat , 50
+myState-2 0 , aSymbol , help
+myState-2 0 , aRadio , 3
+myState-2 1 , aFloat , 82
+myState-2 1 , aSymbol , me
+myState-2 1 , aRadio , 7
diff --git a/memento/tutorial/tutorial.pd b/memento/tutorial/tutorial.pd
new file mode 100644
index 0000000..5cd436b
--- /dev/null
+++ b/memento/tutorial/tutorial.pd
@@ -0,0 +1,15 @@
+#N canvas 440 304 450 300 10;
+#X obj 124 153 hradio 15 0 0 8 part empty Goto_part 0 -6 128 8 -262144
+-1 -1 0;
+#X obj 9 7 cnv 15 100 20 empty empty Using_Memento 20 12 1 14 -262144
+-66577 0;
+#N canvas 0 0 450 300 nav 0;
+#X obj 82 38 r part;
+#X msg 79 75 \; pd open \$1-tut.pd .;
+#X connect 0 0 1 0;
+#X restore 317 15 pd nav;
+#X text 19 65 This is a tutorial explaing the Memento preset system.
+To use it \, make sure \, the directory containing the memento patches
+is in you pd-path \, then navigate through the tutorial parts with
+the following radio button:;
+#X floatatom 158 192 5 0 0 0 currently_viewing part -;