Forums > MaxMSP

looking to design an FM synth like Operator

March 29, 2010 | 8:03 pm

Hi,

I’m really into the idea of an Ableton-style FM synth for M4L that uses the same basic format with loads of extra features. I’m running into problems, though. First, with terms like ‘harmonicity’ and ‘modulation index.’ I’ve gotten the math to calculate harmonicity using the simple coarse/semitones/fine scheme, but mod index is still confusing me. In the Max tutorial the function is set to a range of 0-24. Can anyone explain this? I’ve tried scaling it with less than desirable results.

Next, how do the algorithms come into play? If it’s a simple answer of ‘lots of gate~ and selector~ objects’ that’s fine and I can toil over it for a while longer. Max’s SimpleFM~ tutorial patch is a bit too simple for deducing the answer, so I’m just wondering if there’s a simpler solution. Essentially I want to have 4 to 8 oscillators to incorporate into this thing.

I’ve been troubled with this for months, coming back to it over and over and not getting any further. Can anyone give me any pointers? Here’s what I’ve got so far.

– Pasted Max Patch, click to expand. –

March 29, 2010 | 9:11 pm

>Next, how do the algorithms come into play?

here’s how i have done it:

I have a basic FM operator abstraction. Then for each "algorithm", I have a separate patch with different arrangements of the operators and different routing. These patches are loaded dynamically into a poly~ (depending on which algorithm is used). The poly~ has a low signal vector size so that the algorithms can include a feedback loop with minimal delay.

other people use matrix~

oli


March 29, 2010 | 10:36 pm

________Max.4.6 copy+paste________
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P hidden newex 407 164 72 196617 pattr interval;
#X prestore 1 0 197.;
#P objectname interval;
#P hidden newex 409 43 54 196617 pattr amp;
#X prestore 21 0 2000. 0. 1. 0. 0. 0 146.788986 0.859375 0 366.972473 0.65625 0 1522.935669 0.609375 2 1798.165039 0.09375 0 2000. 0. 0;
#P objectname amp;
#P hidden newex 409 12 54 196617 pattr mod;
#X prestore 24 0 2000. 0. 24. 55.045868 5.25 0 733.944946 18.75 0 1137.614624 5.25 0 1394.495361 7.125 2 1596.3302 1.5 0 1761.467773 3.75 0 2000. 0. 0;
#P objectname mod[1];
#P hidden newex 352 -42 54 196617 pattr mod;
#X prestore 24 0 2000. 0. 24. 55.045868 5.25 0 733.944946 18.75 0 1137.614624 5.25 0 1394.495361 7.125 2 1596.3302 1.5 0 1761.467773 3.75 0 2000. 0. 0;
#P objectname mod;
#P hidden newex 305 -60 51 196617 pattr dur;
#X prestore 1 0 2000.;
#P objectname dur;
#P hidden newex 6 -40 64 196617 pattr power;
#X prestore 1 0 1;
#P objectname power;
#P hidden newex -59 -34 59 196617 pattr harm;
#X prestore 1 0 2.5;
#P objectname harm;
#P hidden newex -91 92 74 196617 pattr volume3;
#X prestore 1 0 130;
#P objectname volume3;
#P hidden newex -94 67 74 196617 pattr volume2;
#X prestore 1 0 90;
#P objectname volume2;
#P hidden newex -92 46 74 196617 pattr volume1;
#X prestore 1 0 90;
#P objectname volume1;
#P hidden newex 194 -33 41 196617 * 127.;
#P user hslider 6 0 16 383 128 1 0 0;
#P hidden newex 122 -33 70 196617 snapshot~ 20;
#P hidden newex 122 -55 98 196617 receive~ phaseorrr;
#P window setfont Times 10.;
#P comment 101 73 41 1310730 power;
#P toggle 100 87 34 0;
#P objectname toggle;
#P window setfont "Sans Serif" 9.;
#P hidden newex -584 13 70 196617 receive clear;
#P hidden newex 325 218 56 196617 send clear;
#P message 251 197 33 196617 clear;
#P hidden message -510 57 28 196617 dump;
#P hidden message -513 80 31 196617 erase;
#P hidden toggle -607 67 15 0;
#P hidden message -592 67 59 196617 record $1;
#P hidden toggle -607 52 15 0;
#P hidden message -592 52 59 196617 play $1;
#P hidden newex -532 134 43 196617 route 0;
#P hidden newex -547 110 40 196617 seq~;
#P hidden message -390 -25 14 196617 0;
#P hidden message -411 -25 14 196617 0;
#P hidden message -445 -26 14 196617 1;
#P hidden message -466 -26 14 196617 1;
#P hidden newex -411 -48 53 196617 sel 45 61;
#P hidden newex -466 -48 53 196617 sel 45 61;
#P window setfont Times 14.;
#P window linecount 5;
#P hidden comment 58 281 167 1310734 figure out how to make the interval show the difference of quarter , eight… so that the fast panning can be controlled (turned off);
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P message 319 183 61 196617 interval $1;
#P flonum 319 164 57 9 20. 0 1 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P objectname flonum[2];
#P window setfont Times 10.;
#P comment 88 185 109 1310730 +/- = count up/down;
#P window setfont "Sans Serif" 9.;
#P hidden flonum 290 313 57 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P hidden flonum 290 271 57 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0;
#P hidden newex 261 429 81 196617 scale 0 2 0 127;
#P hidden newex 232 379 31 196617 abs~;
#P hidden user number~ 232 403 271 418 9 3 3 2 0. 0. 0 0. 197 0. 0 0 0 221 221 221 222 222 222 0 0 0;
#P hidden newex 232 334 68 196617 -~ 3.141594;
#P hidden newex 232 291 68 196617 *~ 6.28319;
#P hidden newex 232 230 55 196617 phasor~ 2;
#P hidden newex 232 358 34 196617 atan~;
#P window setfont "Fixedwidth Serif" 10.;
#P hidden message 314 26 34 1441802 next;
#P window setfont "Sans Serif" 9.;
#P hidden newex -261 63 23 196617 abs;
#P hidden newex -407 96 27 196617 + 1;
#P hidden newex -407 18 31 196617 t b 0;
#P hidden newex -407 76 27 196617 < 0;
#P hidden newex -280 87 29 196617 * 2.;
#P hidden newex -340 135 42 196617 switch;
#P window setfont Times 10.;
#P window linecount 2;
#P comment 122 158 85 1310730 octaves below tonic (- is above tonic);
#P window setfont "Sans Serif" 9.;
#P number 88 163 33 9 0 0 0 3 192 194 137 67 67 67 222 222 222 0 0 0;
#P window linecount 1;
#P hidden newex -374 18 31 196617 t b 1;
#P hidden newex -374 -3 32 196617 sel 1;
#N counter -6 14;
#X flags 0 0;
#P hidden newobj -407 46 73 196617 counter -6 14;
#P hidden newex -407 -3 32 196617 sel 1;
#P user gain~ 63 89 14 23 158 0 1.071519 7.94321 10.;
#P objectname gain~[2];
#P user gain~ 14 89 14 23 158 0 1.071519 7.94321 10.;
#P objectname gain~;
#P hidden button -273 19 15 0;
#P hidden button -338 21 15 0;
#P hidden newex -339 235 35 196617 timer;
#P window setfont Times 10.;
#P comment 26 70 41 1310730 Volume;
#P user gain~ 38 89 14 23 158 0 1.071519 7.94321 10.;
#P objectname gain~[1];
#P window setfont "Fixedwidth Serif" 10.;
#P hidden newex -261 392 32 1441802 sig~;
#P hidden newex -324 392 32 1441802 sig~;
#N vpreset 8;
#X append 1 2 10 165 235 toggle int 1 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 200. ; 26 57 83 flonum float 1. ; 31 49 146 function clear ; 31 49 146 function add 1.834862;
#X append 1 2 3. 0 ; 31 49 146 function add 53.211006 1.5 2 ; 31 49 146 function add 200. 0. 0 ; 31 49 146 function domain 200. ; 31 49 146 function range 0. 24. ; 32 49 270 function;
#X append 1 2 clear ; 32 49 270 function add 0. 0. 0 ; 32 49 270 function add 7.339449 0.84375 0 ; 32 49 270 function add 38.532108 0.078125 2 ; 32 49 270 function add 146.788986 0.015625 0 ; 32 49 270;
#X append 1 2 function add 200. 0. 0 ; 32 49 270 function domain 200. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list 119 10. ; 45 89 14 gain~ list 157 10. ; 46 89 63;
#X append 1 2 gain~ list 155 10. ; 51 163 88 number int -6 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ; 68 313 290 flonum float 0. ; 70 164 319 flonum float 118. ;;
#X append 1 2 82 52 -607 toggle int 1 ; 84 67 -607 toggle int 0 ; 90 87 100 toggle int 1 ; 94 0 6 hslider int 66 ;;
#X append 2 2 10 165 235 toggle int 0 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 1600. ; 26 57 83 flonum float 2.5 ; 31 49 146 function clear ; 31 49 146 function add 44.03669;
#X append 2 2 5.25 0 ; 31 49 146 function add 278.9 18.75 0 ; 31 49 146 function add 528.440369 15.375 0 ; 31 49 146 function add 910.091675 0.375 2 ; 31 49 146 function add 1277.064209 1.5 0 ; 31 49 146;
#X append 2 2 function add 1497.247681 3. 0 ; 31 49 146 function add 1600. 0. 0 ; 31 49 146 function domain 1600. ; 31 49 146 function range 0. 24. ; 32 49 270 function clear ; 32 49 270 function;
#X append 2 2 add 0. 0. 0 ; 32 49 270 function add 146.788986 0.75 0 ; 32 49 270 function add 337.614655 0.25 0 ; 32 49 270 function add 777.981628 0.171875 2 ; 32 49 270 function add 1174.31189 0.1875 0;
#X append 2 2 ; 32 49 270 function add 1438.532104 0.40625 0 ; 32 49 270 function add 1600. 0. 0 ; 32 49 270 function domain 1600. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list 90;
#X append 2 2 10. ; 45 89 14 gain~ list 90 10. ; 46 89 63 gain~ list 130 10. ; 51 163 88 number int 6 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ; 68 313 290;
#X append 2 2 flonum float 0. ; 70 164 319 flonum float 227. ;;
#X append 3 2 10 165 235 toggle int 0 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 200. ; 26 57 83 flonum float 1. ; 31 49 146 function clear ; 31 49 146 function add 1.834862;
#X append 3 2 3. 0 ; 31 49 146 function add 53.211006 1.5 2 ; 31 49 146 function add 200. 0. 0 ; 31 49 146 function domain 200. ; 31 49 146 function range 0. 24. ; 32 49 270 function;
#X append 3 2 clear ; 32 49 270 function add 0. 0. 0 ; 32 49 270 function add 7.339449 0.84375 0 ; 32 49 270 function add 38.532108 0.078125 2 ; 32 49 270 function add 146.788986 0.015625 0 ; 32 49 270;
#X append 3 2 function add 200. 0. 0 ; 32 49 270 function domain 200. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list 119 10. ; 45 89 14 gain~ list 114 10. ; 46 89 63;
#X append 3 2 gain~ list 130 10. ; 51 163 88 number int 6 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ; 68 313 290 flonum float 0. ; 70 164 319 flonum float 227. ;;
#X append 3 2 82 52 -607 toggle int 0 ; 84 67 -607 toggle int 0 ;;
#X append 4 2 10 165 235 toggle int 0 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 2000. ; 26 57 83 flonum float 2.5 ; 31 49 146 function clear ; 31 49 146 function add 55.045868;
#X append 4 2 5.25 0 ; 31 49 146 function add 733.944946 18.75 0 ; 31 49 146 function add 1137.614624 5.25 0 ; 31 49 146 function add 1394.495361 7.125 2 ; 31 49 146 function add 1596.3302 1.5 0 ; 31 49 146;
#X append 4 2 function add 1761.467773 3.75 0 ; 31 49 146 function add 2000. 0. 0 ; 31 49 146 function domain 2000. ; 31 49 146 function range 0. 24. ; 32 49 270 function clear ; 32 49 270 function;
#X append 4 2 add 0. 0. 0 ; 32 49 270 function add 146.788986 0.859375 0 ; 32 49 270 function add 366.972473 0.65625 0 ; 32 49 270 function add 1522.935669 0.609375 2 ; 32 49 270 function add 1798.165039 0.09375 0;
#X append 4 2 ; 32 49 270 function add 2000. 0. 0 ; 32 49 270 function domain 2000. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list 90 10. ; 45 89 14 gain~ list 90 10.;
#X append 4 2 ; 46 89 63 gain~ list 130 10. ; 51 163 88 number int -3 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ; 68 313 290 flonum float 0. ; 70 164 319;
#X append 4 2 flonum float 227. ;;
#X append 5 2 10 165 235 toggle int 0 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 200. ; 26 57 83 flonum float 1. ; 31 49 146 function clear ; 31 49 146 function add 1.834862;
#X append 5 2 3. 0 ; 31 49 146 function add 53.211006 1.5 2 ; 31 49 146 function add 200. 0. 0 ; 31 49 146 function domain 200. ; 31 49 146 function range 0. 24. ; 32 49 270 function;
#X append 5 2 clear ; 32 49 270 function add 0. 0. 0 ; 32 49 270 function add 7.339449 0.84375 0 ; 32 49 270 function add 38.532108 0.078125 2 ; 32 49 270 function add 146.788986 0.015625 0 ; 32 49 270;
#X append 5 2 function add 200. 0. 0 ; 32 49 270 function domain 200. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list 90 10. ; 45 89 14 gain~ list 90 10. ; 46 89 63;
#X append 5 2 gain~ list 130 10. ; 51 163 88 number int 5 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ; 68 313 290 flonum float 0. ; 70 164 319 flonum float 227. ;;
#X append 6 2 10 165 235 toggle int 0 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 2000. ; 26 57 83 flonum float 4.76 ; 31 49 146 function clear ; 31 49 146 function add 0.;
#X append 6 2 10.5 0 ; 31 49 146 function add 0. 0. 0 ; 31 49 146 function add 36.697247 12.375 0 ; 31 49 146 function add 110.091736 18. 0 ; 31 49 146 function add 165.137604 11.25 0 ; 31 49 146;
#X append 6 2 function add 183.486237 7.5 0 ; 31 49 146 function add 238.532104 4.875 0 ; 31 49 146 function add 348.62384 2.625 0 ; 31 49 146 function add 385.321075 19.125 0 ; 31 49 146 function add 495.412811 5.25;
#X append 6 2 0 ; 31 49 146 function add 587.155945 21.75 0 ; 31 49 146 function add 587.155945 2.25 0 ; 31 49 146 function add 678.9 10.5 0 ; 31 49 146 function add 788.990784 15.75 0 ; 31 49 146;
#X append 6 2 function add 825.688049 4.125 0 ; 31 49 146 function add 862.385254 11.25 0 ; 31 49 146 function add 954.128418 6.75 0 ; 31 49 146 function add 972.477051 18.375 0 ; 31 49 146 function add 1155.963257 9.;
#X append 6 2 2 ; 31 49 146 function add 1321.1 19.125 0 ; 31 49 146 function add 1376.146729 8.25 0 ; 31 49 146 function add 1431.192627 10.125 0 ; 31 49 146 function add 1431.192627 1.5 0 ; 31 49 146;
#X append 6 2 function add 1467.89 5.625 0 ; 31 49 146 function add 1486.238525 15.375 0 ; 31 49 146 function add 1504.587036 12.75 0 ; 31 49 146 function add 1559.632935 5.25 0 ; 31 49 146 function add 1577.981567 14.625;
#X append 6 2 0 ; 31 49 146 function add 1688.073364 7.125 0 ; 31 49 146 function add 1761.467773 3.75 0 ; 31 49 146 function add 1816.513672 8.625 0 ; 31 49 146 function add 1834.862305 18. 0 ; 31 49 146;
#X append 6 2 function add 1871.55957 10.5 0 ; 31 49 146 function add 1944.954102 14.625 0 ; 31 49 146 function add 2000. 0. 0 ; 31 49 146 function domain 2000. ; 31 49 146 function range 0. 24. ; 32 49 270;
#X append 6 2 function clear ; 32 49 270 function add 0. 0. 0 ; 32 49 270 function add 36.697247 0.84375 0 ; 32 49 270 function add 238.532104 0.109375 0 ; 32 49 270 function add 458.715576 0.625 0 ; 32 49 270;
#X append 6 2 function add 825.688049 0.546875 0 ; 32 49 270 function add 862.385254 0.34375 0 ; 32 49 270 function add 1155.963257 0.421875 2 ; 32 49 270 function add 1266.054932 0.25 0 ; 32 49 270 function add 1284.403564 0.359375;
#X append 6 2 0 ; 32 49 270 function add 1798.165039 0.09375 0 ; 32 49 270 function add 2000. 0. 0 ; 32 49 270 function domain 2000. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list;
#X append 6 2 90 10. ; 45 89 14 gain~ list 90 10. ; 46 89 63 gain~ list 130 10. ; 51 163 88 number int 1 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ;;
#X append 6 2 68 313 290 flonum float 0. ; 70 164 319 flonum float 227. ;;
#X append 7 2 10 165 235 toggle int 0 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 200. ; 26 57 83 flonum float 1. ; 31 49 146 function clear ; 31 49 146 function add 0.;
#X append 7 2 0. 0 ; 31 49 146 function add 20.183485 1.5 2 ; 31 49 146 function add 200. 0. 0 ; 31 49 146 function domain 200. ; 31 49 146 function range 0. 24. ; 32 49 270 function;
#X append 7 2 clear ; 32 49 270 function add 0. 0. 0 ; 32 49 270 function add 7.339449 0.84375 0 ; 32 49 270 function add 38.532108 0.078125 2 ; 32 49 270 function add 146.788986 0.015625 0 ; 32 49 270;
#X append 7 2 function add 200. 0. 0 ; 32 49 270 function domain 200. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list 119 10. ; 45 89 14 gain~ list 157 10. ; 46 89 63;
#X append 7 2 gain~ list 155 10. ; 51 163 88 number int 13 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ; 68 313 290 flonum float 0. ; 70 164 319 flonum float 118. ;;
#X append 7 2 82 52 -607 toggle int 0 ; 84 67 -607 toggle int 0 ; 90 87 100 toggle int 1 ; 94 0 6 hslider int 32 ;;
#X append 8 2 10 165 235 toggle int 0 ; 12 180 235 toggle int 0 ; 23 30 234 flonum float 130. ; 26 57 83 flonum float 0. ; 31 49 146 function clear ; 31 49 146 function add 0.;
#X append 8 2 0. 0 ; 31 49 146 function add 41.743118 2.625 0 ; 31 49 146 function add 48.9 5.625 2 ; 31 49 146 function add 79.908257 0. 0 ; 31 49 146 function add 103.761459 1.5 0 ; 31 49 146;
#X append 8 2 function add 120.458679 3.75 0 ; 31 49 146 function add 130. 0. 0 ; 31 49 146 function domain 130. ; 31 49 146 function range 0. 24. ; 32 49 270 function clear ; 32 49 270 function;
#X append 8 2 add 0. 0. 0 ; 32 49 270 function add 9.541284 1. 0 ; 32 49 270 function add 10.733945 1. 0 ; 32 49 270 function add 54.862385 1. 2 ; 32 49 270 function add 98.990898 0.609375 0;
#X append 8 2 ; 32 49 270 function add 116.880737 0.40625 0 ; 32 49 270 function add 130. 0. 0 ; 32 49 270 function domain 130. ; 32 49 270 function range 0. 1. ; 40 89 38 gain~ list 90;
#X append 8 2 10. ; 45 89 14 gain~ list 127 10. ; 46 89 63 gain~ list 133 10. ; 51 163 88 number int -6 ; 64 403 232 number~ list 0. ; 67 271 290 flonum float 0. ; 68 313 290;
#X append 8 2 flonum float 0. ; 70 164 319 flonum float 227. ; 82 52 -607 toggle int 0 ; 84 67 -607 toggle int 0 ; 90 87 100 toggle int 1 ; 94 0 6 hslider int 86 ;;
#P preset 96 124 46 28;
#P window setfont Times 10.;
#P comment 313 138 49 1310730 Amplitude;
#P comment 189 138 77 1310730 Modulation Index;
#P comment 241 16 43 1310730 Duration;
#P window setfont "Fixedwidth Serif" 10.;
#P hidden message -169 -16 80 1441802 setdomain $1;
#P user function 270 49 391 138 1 1 0 0;
#X frgb 67 67 67;
#X brgb 192 194 137;
#X rgb2 105 108 85;
#X rgb3 255 255 255;
#X rgb4 0 0 0;
#X rgb5 0 0 0;
#X add 0. 0. 0;
#X add 146.788986 0.859375 0;
#X add 366.972473 0.65625 0;
#X add 1522.935669 0.609375 2;
#X add 1798.165039 0.09375 0;
#X add 2000. 0. 0;
#X domain 2000.;
#X range 0. 1.;
#X done;
#P objectname function[1];
#P user function 146 49 267 138 1 1 0 0;
#X frgb 67 67 82;
#X brgb 192 194 137;
#X rgb2 105 109 108;
#X rgb3 255 255 255;
#X rgb4 0 0 0;
#X rgb5 0 0 0;
#X add 55.045868 5.25 0;
#X add 733.944946 18.75 0;
#X add 1137.614624 5.25 0;
#X add 1394.495361 7.125 2;
#X add 1596.3302 1.5 0;
#X add 1761.467773 3.75 0;
#X add 2000. 0. 0;
#X domain 2000.;
#X range 0. 24.;
#X done;
#P objectname function;
#P window setfont Times 10.;
#P comment 85 42 57 1310730 Harmonicity;
#P window setfont "Fixedwidth Serif" 10.;
#P hidden newex -198 392 38 1441802 line~;
#P hidden newex -185 417 38 1441802 line~;
#P hidden newex -324 468 149 1441802 *~;
#P flonum 83 57 60 10 0. 0 1 22 192 194 137 67 67 67 222 222 222 0 0 0;
#P objectname flonum;
#P hidden newex -324 417 136 1441802 simpleFM.mxb;
#P window setfont Times 10.;
#P hidden comment -337 372 57 1310730 Carrier Freq.;
#P window setfont "Fixedwidth Serif" 10.;
#P flonum 234 30 60 10 0. 0 1 22 192 194 137 67 67 67 222 222 222 0 0 0;
#P objectname flonum[1];
#P window setfont "Sans Serif" 9.;
#P hidden newex -324 88 34 196617 / 0.5;
#N vpatcher 181 328 781 728;
#N comlet bang to drop volume;
#P outlet 289 112 15 0;
#N comlet activate osc-player;
#P outlet 256 111 15 0;
#P window setfont "Sans Serif" 9.;
#P window linecount 1;
#P newex 76 152 27 196617 / 2;
#P message 236 73 14 196617 9;
#N comlet pitch (Hz);
#P outlet 76 175 15 0;
#P window linecount 0;
#P newex 76 130 31 196617 mtof;
#P message 216 73 14 196617 8;
#P message 196 73 14 196617 7;
#P message 176 73 14 196617 6;
#P message 156 73 14 196617 5;
#P message 136 73 14 196617 4;
#P message 116 73 14 196617 3;
#P message 96 73 14 196617 2;
#P message 76 73 14 196617 1;
#P newex 76 50 215 196617 sel 97 115 100 102 103 104 106 107 108 3;
#P newex 76 107 136 196617 nw.get_scalemem slavedata;
#N comlet keyup;
#P inlet 76 30 15 0;
#P connect 0 0 2 0;
#P connect 2 0 3 0;
#P fasten 3 0 1 0 81 93 81 93;
#P fasten 4 0 1 0 101 93 81 93;
#P fasten 5 0 1 0 121 93 81 93;
#P fasten 6 0 1 0 141 93 81 93;
#P fasten 7 0 1 0 161 93 81 93;
#P fasten 8 0 1 0 181 93 81 93;
#P fasten 9 0 1 0 201 93 81 93;
#P fasten 10 0 1 0 221 93 81 93;
#P fasten 13 0 1 0 241 93 81 93;
#P fasten 1 0 11 0 81 127 81 127;
#P connect 11 0 14 0;
#P connect 14 0 12 0;
#P connect 2 1 4 0;
#P connect 2 2 5 0;
#P connect 2 3 6 0;
#P connect 2 4 7 0;
#P connect 2 5 8 0;
#P connect 2 6 9 0;
#P connect 2 7 10 0;
#P connect 2 8 13 0;
#P connect 2 9 15 0;
#P fasten 2 8 16 0 241 70 294 70;
#P fasten 2 7 16 0 221 70 294 70;
#P fasten 2 6 16 0 201 70 294 70;
#P fasten 2 5 16 0 181 70 294 70;
#P fasten 2 4 16 0 161 70 294 70;
#P fasten 2 3 16 0 141 70 294 70;
#P fasten 2 2 16 0 121 70 294 70;
#P fasten 2 1 16 0 101 70 294 70;
#P fasten 2 0 16 0 81 70 294 70;
#P pop;
#P hidden newobj -285 -1 40 196617 p pitch;
#N vpatcher 53 296 300 565;
#P origin 107 -35;
#P window setfont "Fixedwidth Serif" 10.;
#P message 106 50 76 1441802 0 , 127 1200;
#P newex 106 70 40 1441802 line;
#N comlet (signal) right channel gain;
#P outlet 106 209 15 0;
#N comlet (signal) left channel gain;
#P outlet 52 209 15 0;
#N comlet bang to start pan;
#P inlet 106 30 15 0;
#P newex 106 93 68 1441802 split 0 64;
#P newex 106 114 43 1441802 / 128.;
#P newex 164 114 44 1441802 / 127.;
#P newex 106 158 62 1441802 line~ 0.5;
#P message 106 139 38 1441802 $1 20;
#P newex 52 158 50 1441802 sig~ 1.;
#P newex 52 184 27 1441802 -~;
#P connect 1 0 0 0;
#P connect 0 0 8 0;
#P fasten 3 0 0 1 111 179 74 179;
#P connect 7 0 11 0;
#P connect 11 0 10 0;
#P connect 10 0 6 0;
#P connect 6 0 5 0;
#P fasten 4 0 2 0 169 135 111 135;
#P connect 5 0 2 0;
#P connect 2 0 3 0;
#P connect 3 0 9 0;
#P connect 6 1 4 0;
#P pop;
#P hidden newobj 261 452 40 196617 p pan;
#P window setfont "Fixedwidth Serif" 10.;
#P hidden newex 288 512 27 1441802 *~;
#P window setfont "Sans Serif" 9.;
#P hidden newex -285 -27 40 196617 keyup;
#P hidden user ezdac~ 5 646 49 679 0;
#N vpatcher 181 328 781 728;
#N comlet key pressed , bang attack line;
#P outlet 276 112 15 0;
#P window setfont "Sans Serif" 9.;
#P window linecount 0;
#P message 244 75 14 196617 9;
#N comlet pitch (Hz);
#P outlet 152 149 15 0;
#P newex 124 127 31 196617 mtof;
#P message 223 75 14 196617 8;
#P message 202 75 14 196617 7;
#P message 181 75 14 196617 6;
#P message 160 75 14 196617 5;
#P message 139 75 14 196617 4;
#P message 118 75 14 196617 3;
#P message 97 75 14 196617 2;
#P message 76 75 14 196617 1;
#P newex 76 50 205 196617 sel 97 115 100 102 103 104 106 107 108;
#P newex 76 104 136 196617 nw.get_scalemem slavedata;
#N comlet key depressed;
#P inlet 76 30 15 0;
#N comlet pitch for techno~ (Hz);
#P outlet 94 218 15 0;
#P window linecount 1;
#P newex 68 190 36 196617 buddy;
#P newex 94 149 40 196617 pack i i;
#P message 94 170 62 196617 pitch $1 $2;
#N comlet phasor~ (to 128);
#P inlet 94 129 15 0;
#P fasten 11 0 3 0 144 98 73 98;
#P fasten 15 0 3 0 228 98 73 98;
#P fasten 10 0 3 0 123 98 73 98;
#P fasten 14 0 3 0 207 98 73 98;
#P fasten 9 0 3 0 102 98 73 98;
#P fasten 13 0 3 0 186 98 73 98;
#P fasten 8 0 3 0 81 98 73 98;
#P fasten 12 0 3 0 165 98 73 98;
#P connect 5 0 7 0;
#P connect 7 0 8 0;
#P fasten 9 0 6 0 102 93 81 93;
#P fasten 11 0 6 0 144 93 81 93;
#P fasten 13 0 6 0 186 93 81 93;
#P fasten 15 0 6 0 228 93 81 93;
#P fasten 8 0 6 0 81 93 81 93;
#P fasten 10 0 6 0 123 93 81 93;
#P fasten 12 0 6 0 165 93 81 93;
#P fasten 14 0 6 0 207 93 81 93;
#P fasten 18 0 6 0 249 93 81 93;
#P connect 0 0 2 0;
#P connect 2 0 1 0;
#P connect 1 0 3 1;
#P connect 3 1 4 0;
#P connect 7 1 9 0;
#P connect 7 2 10 0;
#P fasten 6 0 16 0 81 124 129 124;
#P connect 16 0 2 1;
#P connect 7 3 11 0;
#P fasten 16 0 17 0 129 146 157 146;
#P connect 7 4 12 0;
#P connect 7 5 13 0;
#P connect 7 6 14 0;
#P connect 7 7 15 0;
#P connect 7 8 18 0;
#P fasten 7 8 19 0 249 71 281 71;
#P fasten 7 7 19 0 228 71 281 71;
#P fasten 7 6 19 0 207 71 281 71;
#P fasten 7 5 19 0 186 71 281 71;
#P fasten 7 4 19 0 165 71 281 71;
#P fasten 7 3 19 0 144 71 281 71;
#P fasten 7 2 19 0 123 71 281 71;
#P fasten 7 1 19 0 102 71 281 71;
#P fasten 7 0 19 0 81 71 281 71;
#P pop;
#P hidden newobj -339 -1 40 196617 p pitch;
#P hidden newex -674 -37 98 196617 receive~ phaseorrr;
#P hidden message -647 56 28 196617 dump;
#P hidden message -650 79 31 196617 erase;
#P toggle 235 180 15 0;
#P message 250 180 59 196617 record $1;
#P toggle 235 165 15 0;
#P message 250 165 59 196617 play $1;
#P hidden newex -669 133 43 196617 route 0;
#P hidden newex -339 -26 40 196617 key;
#P hidden newex -684 109 40 196617 seq~;
#N comlet phasor~ to techno~;
#P hidden inlet -392 -93 15 0;
#P hidden newex 232 253 80 196617 wave~ table1 0;
#P hidden newex 10 529 35 196617 gate~;
#P hidden newex -47 529 35 196617 gate~;
#P window setfont Times 14.;
#P window linecount 5;
#P hidden comment 38 380 146 1310734 timer will give the distance between numbers coming in – find an anchor that tells you a relation;
#P window setfont "Fixedwidth Serif" 10.;
#P window linecount 1;
#P hidden newex -115 503 27 1441802 *~;
#P hidden connect 87 0 88 0;
#P connect 70 0 71 0;
#P hidden connect 105 1 70 0;
#P hidden fasten 44 0 42 1 -268 62 -309 62;
#P hidden connect 44 0 26 0;
#P hidden connect 44 0 59 0;
#P hidden fasten 20 1 19 1 296 477 310 477;
#P lcolor 7;
#P hidden connect 68 0 63 1;
#P hidden connect 67 0 62 1;
#P hidden connect 27 0 0 0;
#P hidden connect 27 0 19 0;
#P hidden connect 104 1 32 0;
#P hidden connect 59 0 32 0;
#P hidden connect 33 0 31 0;
#P hidden connect 33 0 32 0;
#P hidden connect 43 0 42 0;
#P hidden connect 43 0 31 0;
#P hidden connect 43 0 32 0;
#P hidden connect 66 0 20 0;
#P hidden connect 64 1 66 0;
#P hidden connect 12 0 84 0;
#P hidden connect 12 0 11 0;
#P hidden connect 10 0 82 0;
#P hidden connect 10 0 9 0;
#P hidden connect 101 1 23 0;
#P hidden connect 65 0 64 0;
#P hidden fasten 71 0 64 0 324 399 237 399;
#P hidden connect 60 0 65 0;
#P hidden connect 63 0 60 0;
#P hidden connect 62 0 63 0;
#P hidden connect 4 0 62 0;
#P hidden connect 61 0 4 0;
#P hidden connect 93 0 95 0;
#P hidden connect 103 1 31 0;
#P hidden connect 102 1 31 0;
#P hidden connect 92 0 93 0;
#P hidden connect 100 1 90 0;
#P hidden connect 48 0 55 0;
#P hidden connect 48 0 22 1;
#P hidden connect 48 0 58 0;
#P hidden connect 48 0 51 0;
#P hidden connect 99 1 26 0;
#P hidden connect 98 1 46 0;
#P hidden connect 19 0 46 0;
#P hidden connect 3 0 17 1;
#P hidden connect 97 1 40 0;
#P hidden connect 46 0 3 1;
#P hidden connect 96 1 45 0;
#P hidden connect 0 0 45 0;
#P hidden connect 90 0 2 0;
#P hidden connect 90 0 3 0;
#P hidden connect 95 0 94 0;
#P hidden connect 2 0 17 0;
#P hidden connect 45 0 2 1;
#P hidden fasten 20 0 0 1 266 476 -93 476;
#P lcolor 7;
#P hidden connect 23 0 33 0;
#P hidden connect 28 0 27 1;
#P hidden fasten 32 1 28 0 312 166 -180 166;
#P hidden connect 29 0 25 2;
#P hidden fasten 31 1 29 0 188 141 -193 141;
#P hidden connect 39 0 25 1;
#P hidden fasten 26 0 39 0 88 88 -256 88;
#P hidden connect 58 0 54 1;
#P hidden connect 21 0 44 0;
#P hidden connect 16 1 43 0;
#P hidden connect 16 1 22 0;
#P hidden connect 16 1 54 0;
#P hidden connect 18 0 79 0;
#P hidden connect 18 0 74 0;
#P hidden connect 18 0 21 0;
#P hidden connect 79 0 21 0;
#P hidden fasten 54 0 53 2 -275 124 -303 124;
#P hidden connect 25 0 27 0;
#P hidden connect 38 0 25 0;
#P hidden fasten 53 0 38 0 -335 358 -319 358;
#P hidden connect 22 0 53 1;
#P hidden connect 7 0 6 0;
#P hidden connect 7 0 73 0;
#P hidden connect 7 0 16 0;
#P hidden connect 6 0 16 0;
#P hidden connect 57 0 53 0;
#P hidden connect 49 0 50 0;
#P hidden connect 77 0 49 0;
#P hidden connect 75 0 49 0;
#P hidden connect 74 1 78 0;
#P hidden connect 50 1 48 1;
#P hidden connect 56 1 48 1;
#P hidden connect 55 0 57 0;
#P hidden connect 50 0 48 0;
#P hidden connect 56 0 48 0;
#P hidden connect 47 0 56 0;
#P hidden connect 78 0 47 0;
#P hidden connect 76 0 47 0;
#P hidden connect 74 0 77 0;
#P hidden connect 73 1 76 0;
#P hidden connect 73 0 75 0;
#P hidden connect 79 1 80 0;
#P hidden connect 83 0 79 0;
#P hidden connect 81 0 79 0;
#P hidden connect 85 0 79 0;
#P hidden connect 86 0 79 0;
#P hidden connect 15 0 79 0;
#P hidden connect 89 0 6 0;
#P hidden connect 89 0 79 0;
#P hidden connect 84 0 83 0;
#P hidden connect 82 0 81 0;
#P connect 6 1 8 0;
#P hidden connect 14 0 6 0;
#P hidden connect 13 0 6 0;
#P hidden connect 9 0 6 0;
#P hidden connect 11 0 6 0;
#P hidden connect 5 0 6 0;
#P connect 15 0 6 0;
#P window clipboard copycount 106;
_______end copy+paste________

It’s in 4.6 and I don’t know how they talk with each other, but that’s a patch I made for using my keyboard as an ‘instrument’ and recording based on a networked phasor to keep time. It was while performing with Mobile Performance Group =) I apologize for the total chaos of the patch =,( First time opening it in 3 years =P.

You’ll need to just make a sub-patch to replace the "SimpleFM.mxb" that is in the lower left of the unlocked patch. Just copy this inside it.

_________Max 4.6 copy+paste_______
#P window setfont Times 10.;
#P window linecount 1;
#P comment 123 141 92 1310730 modulator amplitude;
#P comment 109 116 92 1310730 modulating oscillator;
#P comment 75 190 74 1310730 carrier oscillator;
#P comment 164 25 77 1310730 Modulation index;
#P comment 85 25 77 1310730 Harmonicity ratio;
#P comment 5 25 74 1310730 Carrier frequency;
#N comlet FM signal;
#P outlet 31 213 15 0;
#P window setfont "Fixedwidth Serif" 10.;
#P newex 113 87 38 1441802 *~ $2;
#P newex 31 164 43 1441802 +~;
#P newex 64 61 38 1441802 *~ $1;
#P newex 64 139 59 1441802 *~;
#P newex 64 114 43 1441802 cycle~;
#P newex 31 188 43 1441802 cycle~;
#N comlet Modulation index;
#P inlet 193 39 15 0;
#N comlet Harmonicity ratio;
#P inlet 114 39 15 0;
#N comlet Carrier frequency;
#P inlet 31 39 15 0;
#P window setfont Times 10.;
#P comment 46 214 53 1310730 FM signal;
#P fasten 3 0 9 1 198 57 146 57;
#P connect 9 0 6 1;
#P connect 7 0 5 0;
#P fasten 7 0 9 0 69 82 118 82;
#P fasten 2 0 7 1 119 57 97 57;
#P connect 6 0 8 1;
#P connect 5 0 6 0;
#P connect 1 0 8 0;
#P fasten 1 0 7 0 36 57 69 57;
#P connect 4 0 10 0;
#P connect 8 0 4 0;
#P window clipboard copycount 17;
__________end copy+paste__________

hope it helps


March 29, 2010 | 11:52 pm

See Peter Elsea’s ‘Max and FM’ tutorial for a clear demonstration of harmonicity and mod index, and how they relate to timbre spectra


Viewing 4 posts - 1 through 4 (of 4 total)