#N canvas 158 93 721 760 12; #X obj 79 331 outlet~; #X obj 79 303 *~ 0.03; #X obj 52 94 osc~ \$1; #X obj 52 170 *~ \$2; #X obj 79 248 +~ \$3; #X obj 79 277 osc~; #X text 135 249 add base (carrier) frequency; #X obj 52 69 inlet; #X obj 92 145 inlet; #X obj 119 220 inlet; #X msg 64 505 \$1 50; #X floatatom 64 475 4 0 0; #X obj 151 538 print; #X obj 66 533 print; #X obj 150 512 pack 0 50; #X obj 150 485 f \$1; #X msg 151 459 bang; #X obj 105 658 f \$0; #X msg 105 633 bang; #X obj 105 687 print; #X obj 195 693 receive \$0-freq; #X obj 195 660 send \$0-freq; #X floatatom 195 634 4 0 0; #X floatatom 196 719 4 0 0; #X text 78 6 This file is an abstraction used in example 16 \, which implements a simple 2-operator FM voice.; #X text 124 74 The modulator oscillator takes "$1" as its frequency (i.e. \, the abstraction's first creation argument \, which you can see in the window title above.) The first inlet can override this value. ; #X text 105 167 modulation depth (in hertz) \, handled the same way. Note that the left-to-rigt order of the inlets is significant.; #X text 133 273 carrier oscillator; #X text 148 302 reduce amplitude; #X text 17 380 Below we demonstrate the difference between putting a "$1" in a message box versus putting it in an object box. In a message box the \$1 varies according to whatever message the message box is sent. In an object \, "$1" refers to a creation argument of the abstraction. ; #X text 31 584 A fake argument \, "$0" \, just gives you a unique number that you can use as below to make local send/receive pairs.; #X text 150 332 and output it as an audio signal.; #X connect 1 0 0 0; #X connect 2 0 3 0; #X connect 3 0 4 0; #X connect 4 0 5 0; #X connect 5 0 1 0; #X connect 7 0 2 0; #X connect 8 0 3 1; #X connect 9 0 4 1; #X connect 10 0 13 0; #X connect 11 0 10 0; #X connect 14 0 12 0; #X connect 15 0 14 0; #X connect 16 0 15 0; #X connect 17 0 19 0; #X connect 18 0 17 0; #X connect 20 0 23 0; #X connect 22 0 21 0;