ICMC2000 Workshop

Sensors for Interactive Music Performance

Yoichi Nagashima

(SUAC / Art & Science Laboratory)


This workshop focuses the sensor technology for interactive music performance with some viewpoints. At first, I will introduce and demonstrate many types of sensors as interfaces between human and computer systems, not only as technically but also as artistically with multi-media works. Secondly, I will lecture to design , develop and produce sensing system easily without expert knowledge of electronics. Thirdly, I will lecture of handling sensor information to create interactive art with MAX environment. I will take many sample sensors and many sample MAX patches, so attendants can experience treating sensors, programming the algorithms and composing sample works. Finally, we will discuss the possibility of "new human interface" and the interactivity with multi-media technology.


This workshop takes place at the singuhr hoergalerie in parochial on Sun., 27 Aug., 9:00 am - 12:00 noon

Concept and Coordination Yoichi Nagashima nagasm@computer.org
Assistance Julian Rohrhuber workshops@icmc2000.org

Workshop participants:

  • Bill Verplank
  • Philip Samartzis
  • Kia Ng
  • Rosemary Fitzgerald
  • Alain Crevoisier
  • Steffen Bluemm
  • Ronald Alford
  • Alessandro Fogar
  • Cem Akkan
  • Gordon Monro
  • Yukiko Ito
  • Ryutaro Mimura
  • Christina von Rotz
  • Greg Corness
  • Meg Walker
  • Tetsuji Katsuda
  • Sinan Bokesoy
  • Matthew Wright
  • Margaret Schedel
  • Morten Carlsen
  • Guy Van Belle
  • Marcin Wierzbicki
  • Young-Hae Noh
  • Eva Sjuve
  • Cathy Lane
  • Kenji Suzuki


(1) Why developing/using sensors in composition ?

At first, I will introduce the movies of my works of interactive multimedia arts using original sensors, as samples of the theme of this workshop.

    1. CIS (Chaotic Interaction Show)

    2. Muromachi

    3. Strange Attractor

    4. Virtual Reduction

    5. David

    6. Asian Edge

    7. Johnny

    8. Brikish Heart Rock

    9. Atom Hard Mothers

    10. Ten Nimo Noboru Samusa Desu

    11. Visional Legend

    12. Bio-Cosmic Storm

    13. Eternal Traveller

    14. Beijing Power

    15. Shinkai (Installation)


(2) MIDI, MAX - for interactive/algorithmic control

Because we have little time in this Workshop Tutorial, so I do not talk that MIDI and Max (Max/MSP) are best partner not only in computer music but also in media art. I believe ALL participants know well about them. :-)


(3) AKI-H8 - small microcomputer (example from Japan)

In order to treat sensors, we must use the [analog-to-MIDI] interface. If you cannot produce the interface by your own, you may use these commercial systems :

    1. I-Cube

    2. SensorLab

    3. AtoMIC Pro

    4. AKAI

    5. Roland

    6. Korg

    7. etc ...

In Japan (you know AKIHABARA ?), we can use easily the powerful microcomputer board with 32-bits CPU (clock 16MHz), 2 serial (MIDI/RS232C) ports, 8 channel 10-bits A/D, 40-bits or more Digital Ports, 2 channel 10-bits D/A, 5 channel 16-bits counters, 128KB FlashEEPROM, 8KB RAM and more. It costs only $30. I have produced many original MIDI equipments in a part of my composition. We call this "AKI-H8".


AKI-H8

I have little time to explain about this development , but many musician or artists (not specialists in Electronics or IT) in Japan develop their original MIDI equipments with my Japanese WebPage . There are many sample circuits and sample AKI-H8 source codes and binary codes runnable directly. If you want to study this, please study Japanese at first.


Developing AKI-H8 system on my desk


Developing AKI-H8 software in Macintosh


(4) Sensor, A/D to MIDI

A week ago, I developed an universal [analog-to MIDI] interface for this Workshop bringing with myself to Berlin. The whole development period was 2-days (making holes on the case, soldering and wiring, software developing and debugging). Of course, I used 2 AKI-H8 in this box for 16 channels Analog Inputs and 2 channel MIDI outputs (each 6 thru connectors).


front view and rear view

And I have developed these special [analog sensors] within this development. I also will bring them to Berlin.

I used some [analog sensor KITs] in AKIHABARA, and used Bio-sensor of NINTENDO64. Each costs about $20-$30. I will take these sensors :

    1. Light sensor

    2. Optical sensor

    3. Touch sensor

    4. Bio sensor

    5. 3-D Acceleration sensor

    6. Gyro sensor

    7. Body Joint Angle sensor

    8. Pitch sensor [KIKITORIKUN]

    9. Sliders sensor

Because my baggage is limited, I am sorry but I will not take these sensors : Air Pressure, MiniBioMuse-II, PowerGlove, Hyper-PiPa , Optical Harp, TouchPanel, Breath sensor and etc....
I will explain how to design these sensors with [analog-to-MIDI] interfaces in media arts. This is very simple and fun !!


(5) Treating Sensor Information in MAX

I distribute some sample patches of MAX at the singuhr hoergalerie in parochial to ALL participants. You can use my bringing sample sensors. And, let's try experiments and discuss about the interactivity in media arts !

    1. Universal Sensor Inputs

      This patch is to treat my bringing [analog-MIDI] interface information. You may only nesessary sensor inputs. This is the text-format of this patch:

      max v2;
      #N vpatcher 125 54 647 509;
      #P newex 77 230 55 9 touchin 10;
      #P number 77 255 35 9 0 0 0 3;
      #P user uslider 77 280 18 128 128 1 0 0;
      #P user uslider 138 280 18 128 128 1 0 0;
      #P number 138 255 35 9 0 0 0 3;
      #P newex 138 230 55 9 touchin 11;
      #P newex 199 230 55 9 touchin 12;
      #P number 199 255 35 9 0 0 0 3;
      #P user uslider 199 280 18 128 128 1 0 0;
      #P user uslider 260 280 18 128 128 1 0 0;
      #P number 260 255 35 9 0 0 0 3;
      #P newex 260 230 55 9 touchin 13;
      #P newex 321 230 55 9 touchin 14;
      #P number 321 255 35 9 0 0 0 3;
      #P user uslider 321 280 18 128 128 1 0 0;
      #P user uslider 382 280 18 128 128 1 0 0;
      #P number 382 255 35 9 0 0 0 3;
      #P newex 382 230 55 9 touchin 15;
      #P newex 15 230 49 9 touchin 9;
      #P number 15 255 35 9 0 0 0 3;
      #P user uslider 15 280 18 128 128 1 0 0;
      #P newex 443 230 55 9 touchin 16;
      #P number 443 255 35 9 0 0 0 3;
      #P user uslider 443 280 18 128 128 1 0 0;
      #P user uslider 443 70 18 128 128 1 0 0;
      #P number 443 45 35 9 0 0 0 3;
      #P newex 443 20 49 9 touchin 8;
      #P user uslider 15 70 18 128 128 1 0 0;
      #P number 15 45 35 9 0 0 0 3;
      #P newex 15 20 49 9 touchin 1;
      #P newex 382 20 49 9 touchin 7;
      #P number 382 45 35 9 0 0 0 3;
      #P user uslider 382 70 18 128 128 1 0 0;
      #P user uslider 321 70 18 128 128 1 0 0;
      #P number 321 45 35 9 0 0 0 3;
      #P newex 321 20 49 9 touchin 6;
      #P newex 260 20 49 9 touchin 5;
      #P number 260 45 35 9 0 0 0 3;
      #P user uslider 260 70 18 128 128 1 0 0;
      #P user uslider 199 70 18 128 128 1 0 0;
      #P number 199 45 35 9 0 0 0 3;
      #P newex 199 20 49 9 touchin 4;
      #P newex 138 20 49 9 touchin 3;
      #P number 138 45 35 9 0 0 0 3;
      #P user uslider 138 70 18 128 128 1 0 0;
      #P user uslider 77 70 18 128 128 1 0 0;
      #P number 77 45 35 9 0 0 0 3;
      #P newex 77 20 49 9 touchin 2;
      #P connect 47 0 46 0;
      #P connect 46 0 45 0;
      #P connect 43 0 44 0;
      #P connect 42 0 43 0;
      #P connect 41 0 40 0;
      #P connect 40 0 39 0;
      #P connect 37 0 38 0;
      #P connect 36 0 37 0;
      #P connect 35 0 34 0;
      #P connect 34 0 33 0;
      #P connect 31 0 32 0;
      #P connect 30 0 31 0;
      #P connect 29 0 28 0;
      #P connect 28 0 27 0;
      #P connect 26 0 25 0;
      #P connect 25 0 24 0;
      #P connect 22 0 23 0;
      #P connect 21 0 22 0;
      #P connect 19 0 20 0;
      #P connect 18 0 19 0;
      #P connect 17 0 16 0;
      #P connect 16 0 15 0;
      #P connect 13 0 14 0;
      #P connect 12 0 13 0;
      #P connect 11 0 10 0;
      #P connect 10 0 9 0;
      #P connect 7 0 8 0;
      #P connect 6 0 7 0;
      #P connect 5 0 4 0;
      #P connect 4 0 3 0;
      #P connect 1 0 2 0;
      #P connect 0 0 1 0;
      #P pop;
      

    2. Gating

      At the front-end of the MAX patch, I set gating switch for sensor information. Thus, unexpected inputs troubles will be rejected. This is the text-format of this patch:

      max v2;
      #N vpatcher 146 71 392 301;
      #P outlet 140 188 15 0;
      #P inlet 43 33 15 0;
      #P toggle 43 76 23 0;
      #P user GSwitch2 111 120 39 32 0 0;
      #P inlet 140 31 15 0;
      #P comment 100 13 105 9 sensor raw input data;
      #P comment 18 14 72 9 gating ON/OFF;
      #P connect 5 0 4 0;
      #P connect 2 0 3 1;
      #P connect 3 1 6 0;
      #P connect 4 0 3 0;
      #P pop;
      

    3. Cutting Period

      Using sensors as trigger commander, sometimes I want to cut for a moment after an event. This simple patch realizes the Cutting Period of system senseless. This is the text-format of this patch:

      max v2;
      #N vpatcher 146 71 473 344;
      #P button 235 109 15 0;
      #P message 67 140 14 9 0;
      #P message 89 140 14 9 1;
      #P number 257 57 35 9 0 0 0 3;
      #P newex 235 84 32 9 delay;
      #P button 191 58 15 0;
      #P inlet 257 35 15 0;
      #P outlet 141 243 15 0;
      #P inlet 44 38 15 0;
      #P toggle 44 167 19 0;
      #P user GSwitch2 112 197 39 32 0 0;
      #P inlet 141 36 15 0;
      #P comment 101 18 105 9 sensor raw input data;
      #P comment 19 19 72 9 gating ON/OFF;
      #P comment 233 19 62 9 cutting time;
      #P connect 9 0 13 0;
      #P connect 9 0 10 0;
      #P connect 8 0 11 0;
      #P connect 4 1 7 0;
      #P connect 4 1 9 0;
      #P connect 5 0 4 0;
      #P connect 11 0 10 1;
      #P connect 14 0 12 0;
      #P connect 10 0 14 0;
      #P connect 13 0 5 0;
      #P connect 12 0 5 0;
      #P connect 6 0 5 0;
      #P connect 3 0 4 1;
      #P pop;
      

    4. Sampling

      If sensor information traffic is too heavy, this patch samples with the [sampling time] period. This is the text-format of this patch:

      max v2;
      #N vpatcher 146 71 382 304;
      #P button 95 116 15 0;
      #P newex 35 151 27 9 int;
      #P newex 95 91 62 9 metro 1000;
      #P message 95 69 14 9 1;
      #P newex 95 46 45 9 loadbang;
      #P number 168 53 35 9 0 0 0 3;
      #P inlet 168 31 15 0;
      #P outlet 35 190 15 0;
      #P inlet 52 32 15 0;
      #P comment 12 14 105 9 sensor raw input data;
      #P comment 144 15 70 9 sampling time;
      #P connect 5 0 8 1;
      #P connect 6 0 7 0;
      #P connect 8 0 10 0;
      #P connect 9 0 3 0;
      #P connect 2 0 9 1;
      #P connect 4 0 5 0;
      #P connect 10 0 9 0;
      #P connect 7 0 8 0;
      #P pop;
      

    5. Averaging (Filtering)

      If sensor data moves too sensible or with higher frequency noises, this patch reducts the higher noisy movement. This is 5 stages moving avarage calculation, or Low Pass Filtering. (this patch was produced by my friend F. Nakamura) This is the text-format of this patch:

      max v2;
      #N vpatcher 68 94 416 389;
      #P newex 213 200 27 9 / 5;
      #P newex 129 60 41 9 delay 1;
      #P button 104 61 15 0;
      #P newex 13 102 41 9 delay 1;
      #P button 13 127 15 0;
      #P message 286 110 31 9 set 0;
      #P number 213 223 35 9 0 0 0 3;
      #P newex 213 178 40 9 accum;
      #P button 180 61 15 0;
      #P newex 229 102 27 9 int;
      #P number 229 128 35 9 0 0 0 3;
      #P newex 144 102 27 9 int;
      #P number 144 128 35 9 0 0 0 3;
      #P number 187 128 35 9 0 0 0 3;
      #P newex 187 102 27 9 int;
      #P newex 103 102 27 9 int;
      #P number 103 128 35 9 0 0 0 3;
      #P number 60 128 35 9 0 0 0 3;
      #P newex 60 102 27 9 int;
      #P number 61 61 35 9 0 0 0 3;
      #P outlet 213 242 15 0;
      #P inlet 61 31 15 0;
      #P comment 21 13 105 9 sensor raw input data;
      #P connect 22 0 16 0;
      #P connect 16 0 2 0;
      #P connect 21 0 14 0;
      #P connect 12 0 15 1;
      #P connect 19 0 18 0;
      #P connect 15 0 22 0;
      #P connect 10 0 15 1;
      #P connect 9 0 15 1;
      #P connect 6 0 15 1;
      #P connect 13 0 12 0;
      #P connect 11 0 10 0;
      #P connect 11 0 8 1;
      #P connect 5 0 15 1;
      #P connect 3 0 4 1;
      #P connect 3 0 20 0;
      #P connect 8 0 9 0;
      #P connect 8 0 13 1;
      #P connect 20 0 21 0;
      #P connect 18 0 15 0;
      #P connect 17 0 15 0;
      #P connect 1 0 3 0;
      #P connect 7 0 6 0;
      #P connect 7 0 11 1;
      #P connect 4 0 5 0;
      #P connect 4 0 7 1;
      #P connect 14 0 19 0;
      #P connect 14 0 4 0;
      #P connect 14 0 7 0;
      #P connect 14 0 11 0;
      #P connect 14 0 8 0;
      #P connect 14 0 13 0;
      #P connect 14 0 17 0;
      #P pop;
      

    6. Threshold Switch

      This patch outputs triggered bang when input level crosses over than preset threshold. This is the text-format of this patch:

      max v2;
      #N vpatcher 190 67 447 297;
      #P newex 61 132 102 9 if $i1 == 1 then bang;
      #P newex 61 105 40 9 change;
      #P button 61 157 15 0;
      #P newex 61 79 115 9 if $i1> $i2 then 1 else 0;
      #P number 166 55 35 9 0 0 0 3;
      #P number 61 55 34 9 0 0 0 3;
      #P outlet 61 184 15 0;
      #P inlet 166 30 15 0;
      #P inlet 61 30 15 0;
      #P comment 21 13 105 9 sensor raw input data;
      #P comment 147 13 72 9 threshold level;
      #P connect 3 0 6 0;
      #P connect 2 0 5 0;
      #P connect 5 0 7 0;
      #P connect 6 0 7 1;
      #P connect 7 0 9 0;
      #P connect 8 0 4 0;
      #P connect 9 0 10 0;
      #P connect 10 0 8 0;
      #P pop;
      

    7. Peak Switch

      This patch generate a trigger bang when input level is over the higher threshold level and under the lower threshold level within the set interval time. This is the text-format of this patch:

      max v2;
      #N vpatcher 190 67 632 382;
      #P button 97 255 15 0;
      #P button 87 177 15 0;
      #P user GSwitch 97 212 41 32 0 0;
      #P message 123 169 14 9 0;
      #P message 53 160 14 9 1;
      #P number 318 52 35 9 0 0 0 3;
      #P inlet 318 32 15 0;
      #P comment 299 15 65 9 enable period;
      #P newex 172 219 59 9 delay 1000;
      #P button 177 159 15 0;
      #P newex 177 109 40 9 change;
      #P newex 177 134 102 9 if $i1 == 1 then bang;
      #P newex 177 84 115 9 if $i1< $i2 then 1 else 0;
      #P comment 215 15 79 9 threshold lower;
      #P inlet 254 32 15 0;
      #P number 254 52 35 9 0 0 0 3;
      #P newex 53 134 102 9 if $i1 == 1 then bang;
      #P newex 53 109 40 9 change;
      #P newex 53 84 115 9 if $i1> $i2 then 1 else 0;
      #P number 158 52 35 9 0 0 0 3;
      #P number 53 52 34 9 0 0 0 3;
      #P outlet 97 277 15 0;
      #P inlet 158 32 15 0;
      #P inlet 53 32 15 0;
      #P comment 17 15 105 9 sensor raw input data;
      #P comment 128 15 81 9 threshold higher;
      #P connect 25 0 4 0;
      #P connect 24 0 17 0;
      #P connect 23 0 25 0;
      #P connect 22 0 23 0;
      #P connect 21 0 24 0;
      #P connect 21 0 23 0;
      #P connect 19 0 20 0;
      #P connect 20 0 17 1;
      #P connect 17 0 22 0;
      #P connect 15 0 14 0;
      #P connect 16 0 23 2;
      #P connect 14 0 16 0;
      #P connect 11 0 10 0;
      #P connect 13 0 15 0;
      #P connect 10 0 13 1;
      #P connect 9 0 21 0;
      #P connect 8 0 9 0;
      #P connect 6 0 7 1;
      #P connect 7 0 8 0;
      #P connect 5 0 7 0;
      #P connect 3 0 6 0;
      #P connect 5 0 13 0;
      #P connect 2 0 5 0;
      #P pop;
      

    8. Level Conversion (Normalize)

      Some analog sensors output the regular range voltage of A/D input of AHI-H8 (+5V - 0V), but many analog sensors cannot output this full range. For example, one sensor output range is +1.5V - +4.0V. This patch converts these narrow input voltage to full range fo MIDI (0-127). You may set the lowest voltage to [offset down], and set the gain [100 = equal gain]. This is the text-format of this patch:

      max v2;
      #N vpatcher 73 56 386 318;
      #P number 54 192 35 9 0 0 0 3;
      #P newex 54 165 155 9 if $i1<128 && $i1 >= 0 then $i1;
      #P newex 54 110 27 9 *;
      #P newex 54 138 35 9 / 100;
      #P newex 54 81 27 9 -;
      #P comment 199 15 85 9 multiply per cent;
      #P inlet 232 32 15 0;
      #P number 232 52 35 9 0 0 0 3;
      #P number 144 52 35 9 0 0 0 3;
      #P number 54 52 34 9 0 0 0 3;
      #P outlet 54 218 15 0;
      #P inlet 144 32 15 0;
      #P inlet 54 32 15 0;
      #P comment 13 15 105 9 sensor raw input data;
      #P comment 128 15 61 9 offset down;
      #P connect 10 0 12 0;
      #P connect 14 0 4 0;
      #P connect 11 0 13 0;
      #P connect 12 0 11 0;
      #P connect 13 0 14 0;
      #P connect 7 0 12 1;
      #P connect 6 0 10 1;
      #P connect 5 0 10 0;
      #P connect 3 0 6 0;
      #P connect 8 0 7 0;
      #P connect 2 0 5 0;
      #P pop;
      

    9. Inversion (Polarity)

      This patch converts the direction of the value of sensors. I know many of you used this patch between MIDI Keyboard Note Number and GM module ! This is the text-format of this patch:

      max v2;
      #N vpatcher 73 56 220 263;
      #P number 54 132 35 9 0 0 0 3;
      #P newex 54 105 35 9 + 127;
      #P newex 54 77 29 9 * -1;
      #P number 54 52 34 9 0 0 0 3;
      #P outlet 54 158 15 0;
      #P inlet 54 32 15 0;
      #P comment 13 15 105 9 sensor raw input data;
      #P connect 4 0 5 0;
      #P connect 5 0 6 0;
      #P connect 3 0 4 0;
      #P connect 6 0 2 0;
      #P connect 1 0 3 0;
      #P pop;
      

    10. Random Generator(1)

      This patch is a very simple sample of algorithmic generator of [random music]. You can control the sliders of each parameter. This is the text-format of this patch:

      max v2;
      #N vpatcher 72 121 291 552;
      #P newex 55 378 50 196617 noteout 1;
      #P newex 38 337 92 196617 makenote 100 250;
      #P user hslider 123 76 18 38 64 1 1 0;
      #P number 60 43 35 9 0 0 0 3;
      #P user hslider 133 214 18 38 128 1 0 0;
      #P number 73 249 27 9 0 0 0 3;
      #P number 90 177 35 9 0 0 0 3;
      #P user hslider 134 145 18 38 12 1 1 0;
      #P number 79 103 31 9 0 0 0 3;
      #P user hslider 119 15 18 38 93 10 80 0;
      #P number 10 306 29 9 0 0 0 3;
      #P newex 21 128 53 196617 random;
      #P newex 19 202 18 196617 *;
      #P number 11 163 32 9 0 0 0 3;
      #P number 11 239 30 9 0 0 0 3;
      #P newex 17 270 18 196617 +;
      #P button 14 102 13 0;
      #P newex 20 69 39 196617 metro;
      #P toggle 11 28 26 0;
      #P connect 17 0 18 0;
      #P connect 17 1 18 1;
      #P connect 2 0 7 0;
      #P connect 15 0 1 1;
      #P connect 13 0 3 1;
      #P connect 7 0 5 0;
      #P connect 12 0 6 1;
      #P connect 10 0 7 1;
      #P connect 8 0 17 0;
      #P connect 6 0 4 0;
      #P connect 5 0 6 0;
      #P connect 4 0 3 0;
      #P connect 3 0 8 0;
      #P connect 1 0 2 0;
      #P connect 0 0 1 0;
      #P connect 16 0 10 0;
      #P connect 14 0 13 0;
      #P connect 11 0 12 0;
      #P connect 9 0 15 0;
      #P pop;
      

    11. Random Generator(2)

      You can control the interval of each events by sensor information. This means [tempo] control in music. This is the text-format of this patch:

      max v2;
      #N vpatcher 63 46 292 569;
      #P newex 124 103 29 9 + 30;
      #P newex 124 75 30 9 * 10;
      #P number 124 52 35 9 0 0 0 3;
      #P inlet 124 29 15 0;
      #P newex 66 476 50 196617 noteout 1;
      #P newex 49 435 92 196617 makenote 100 250;
      #P user hslider 134 174 18 38 64 1 1 0;
      #P number 71 141 35 9 0 0 0 3;
      #P user hslider 144 312 18 38 128 1 0 0;
      #P number 84 347 27 9 0 0 0 3;
      #P number 101 275 35 9 0 0 0 3;
      #P user hslider 145 243 18 38 12 1 1 0;
      #P number 90 201 31 9 0 0 0 3;
      #P number 21 404 29 9 0 0 0 3;
      #P newex 32 226 53 196617 random;
      #P newex 30 300 18 196617 *;
      #P number 22 261 32 9 0 0 0 3;
      #P number 22 337 30 9 0 0 0 3;
      #P newex 28 368 18 196617 +;
      #P button 25 200 13 0;
      #P newex 31 167 39 196617 metro;
      #P toggle 22 126 26 0;
      #P comment 69 13 105 9 sensor raw data inout;
      #P connect 17 1 18 1;
      #P connect 17 0 18 0;
      #P connect 16 0 10 0;
      #P connect 14 0 13 0;
      #P connect 13 0 4 1;
      #P connect 15 0 2 1;
      #P connect 10 0 8 1;
      #P connect 12 0 7 1;
      #P connect 9 0 17 0;
      #P connect 8 0 6 0;
      #P connect 7 0 5 0;
      #P connect 6 0 7 0;
      #P connect 4 0 9 0;
      #P connect 5 0 4 0;
      #P connect 3 0 8 0;
      #P connect 2 0 3 0;
      #P connect 1 0 2 0;
      #P connect 19 0 20 0;
      #P connect 11 0 12 0;
      #P connect 20 0 21 0;
      #P connect 21 0 22 0;
      #P connect 22 0 15 0;
      #P pop;
      

    12. Random Generator(3)

      You can control the ragne of rendom genaration by sensor information. This means [note range] of the part (instrument). This is the text-format of this patch:

      max v2;
      #N vpatcher 63 50 282 562;
      #P comment 91 12 105 9 sensor raw data inout;
      #P inlet 146 28 15 0;
      #P number 146 51 35 9 0 0 0 3;
      #P newex 146 74 27 9 / 4;
      #P newex 146 102 27 9 + 1;
      #P newex 58 469 50 196617 noteout 1;
      #P newex 41 428 92 196617 makenote 100 250;
      #P number 63 134 35 9 0 0 0 3;
      #P user hslider 136 305 18 38 128 1 0 0;
      #P number 76 340 27 9 0 0 0 3;
      #P number 93 268 35 9 0 0 0 3;
      #P user hslider 137 236 18 38 12 1 1 0;
      #P number 82 194 31 9 0 0 0 3;
      #P user hslider 63 102 18 38 93 10 80 0;
      #P number 13 397 29 9 0 0 0 3;
      #P newex 24 219 53 196617 random;
      #P newex 22 293 18 196617 *;
      #P number 14 254 32 9 0 0 0 3;
      #P number 14 330 30 9 0 0 0 3;
      #P newex 20 361 18 196617 +;
      #P button 17 193 13 0;
      #P newex 23 160 39 196617 metro;
      #P toggle 14 119 26 0;
      #P connect 7 0 5 0;
      #P connect 6 0 4 0;
      #P connect 13 0 3 1;
      #P connect 14 0 13 0;
      #P connect 10 0 7 1;
      #P connect 12 0 6 1;
      #P connect 11 0 12 0;
      #P connect 8 0 16 0;
      #P connect 5 0 6 0;
      #P connect 3 0 8 0;
      #P connect 1 0 2 0;
      #P connect 4 0 3 0;
      #P connect 20 0 19 0;
      #P connect 21 0 20 0;
      #P connect 9 0 15 0;
      #P connect 19 0 18 0;
      #P connect 0 0 1 0;
      #P connect 2 0 7 0;
      #P connect 18 0 10 0;
      #P connect 15 0 1 1;
      #P connect 16 0 17 0;
      #P connect 16 1 17 1;
      #P pop;
      

    13. Random Generator(4)

      Normal [random] object outputs the [0-n] integer, so the scale is chromatic. You can set the multiplied value with this random integer, simplest [scale] is generated. For example, [* 1] means chromatic scale, [* 2] means the whole tone scale, [* 3] means the Diminish 7th scale, [* 4] means the Augmentd scale, [* 5] means the Sus4 scale. I like [* 2] character, so I use frequently in my work... This is the text-format of this patch:

      max v2;
      #N vpatcher 63 50 282 562;
      #P comment 91 12 105 9 sensor raw data inout;
      #P inlet 146 28 15 0;
      #P number 146 51 35 9 0 0 0 3;
      #P newex 146 74 29 9 / 10;
      #P newex 146 102 27 9 + 1;
      #P newex 58 469 50 196617 noteout 1;
      #P newex 41 428 92 196617 makenote 100 250;
      #P number 63 134 35 9 0 0 0 3;
      #P user hslider 136 305 18 38 128 1 0 0;
      #P number 76 340 27 9 0 0 0 3;
      #P number 146 259 35 9 0 0 0 3;
      #P user hslider 87 162 18 38 12 1 1 0;
      #P number 82 194 31 9 0 0 0 3;
      #P user hslider 63 102 18 38 93 10 80 0;
      #P number 13 397 29 9 0 0 0 3;
      #P newex 24 219 53 196617 random;
      #P newex 22 293 18 196617 *;
      #P number 14 254 32 9 0 0 0 3;
      #P number 14 330 30 9 0 0 0 3;
      #P newex 20 361 18 196617 +;
      #P button 17 193 13 0;
      #P newex 23 160 39 196617 metro;
      #P toggle 14 119 26 0;
      #P connect 6 0 4 0;
      #P connect 7 0 5 0;
      #P connect 13 0 3 1;
      #P connect 12 0 6 1;
      #P connect 14 0 13 0;
      #P connect 10 0 7 1;
      #P connect 11 0 10 0;
      #P connect 9 0 15 0;
      #P connect 5 0 6 0;
      #P connect 8 0 16 0;
      #P connect 3 0 8 0;
      #P connect 1 0 2 0;
      #P connect 4 0 3 0;
      #P connect 20 0 19 0;
      #P connect 21 0 20 0;
      #P connect 19 0 18 0;
      #P connect 0 0 1 0;
      #P connect 18 0 12 0;
      #P connect 15 0 1 1;
      #P connect 2 0 7 0;
      #P connect 16 0 17 0;
      #P connect 16 1 17 1;
      #P pop;
      

    14. Random Generator(5)

      You can control the offset of genarated note number by sensor information. This also means [note range] of the part (instrument). This is the text-format of this patch:

      max v2;
      #N vpatcher 63 50 282 562;
      #P number 65 271 35 9 0 0 0 3;
      #P comment 91 12 105 9 sensor raw data inout;
      #P inlet 146 28 15 0;
      #P number 146 51 35 9 0 0 0 3;
      #P newex 146 74 27 9 / 2;
      #P newex 146 102 27 9 + 1;
      #P newex 58 469 50 196617 noteout 1;
      #P newex 41 428 92 196617 makenote 100 250;
      #P number 63 134 35 9 0 0 0 3;
      #P user hslider 83 239 18 38 128 1 0 0;
      #P number 146 326 35 9 0 0 0 3;
      #P user hslider 87 162 18 38 12 1 1 0;
      #P number 82 194 31 9 0 0 0 3;
      #P user hslider 63 102 18 38 93 10 80 0;
      #P number 13 397 29 9 0 0 0 3;
      #P newex 24 219 53 196617 random;
      #P newex 22 293 18 196617 *;
      #P number 14 254 32 9 0 0 0 3;
      #P number 14 330 30 9 0 0 0 3;
      #P newex 20 361 18 196617 +;
      #P button 17 193 13 0;
      #P newex 23 160 39 196617 metro;
      #P toggle 14 119 26 0;
      #P connect 20 0 19 0;
      #P connect 19 0 18 0;
      #P connect 18 0 17 0;
      #P connect 17 0 12 0;
      #P connect 15 0 16 0;
      #P connect 15 1 16 1;
      #P connect 14 0 1 1;
      #P connect 13 0 22 0;
      #P connect 22 0 6 1;
      #P connect 12 0 3 1;
      #P connect 10 0 7 1;
      #P connect 9 0 14 0;
      #P connect 11 0 10 0;
      #P connect 7 0 5 0;
      #P connect 6 0 4 0;
      #P connect 5 0 6 0;
      #P connect 4 0 3 0;
      #P connect 3 0 8 0;
      #P connect 8 0 15 0;
      #P connect 2 0 7 0;
      #P connect 1 0 2 0;
      #P connect 0 0 1 0;
      #P pop;
      

    15. CHAOS Generator(1)

      This patch is the simplest demonstration of Chaos. 1-dimensional simplest chaos is calculated with the [Logistic Function]. The value (floating, not integer) [X(n)] range is 0.0 - 1.0. The chaos parameter [Myu] range is 3.0-4.0. So the calculation equation is very simple:

      X(n+1) = Myu * X(n) * { 1.0 - X(n) }

      Thus, next [X(n+1)] falls in the same range 0.0-1.0, but in the chaos zone with the parameter [Myu], the final result cannot be respected by anyone (by God!). This patch demonstrate the calculation and the behavier of the Chaos. You can [listen to] the Chaos !! This is the text-format of this patch:

      max v2;
      #N vpatcher 44 53 324 410;
      #P user multiSlider 98 240 149 88 0. 1. 1 3705 15;
      #P newex 223 173 27 196617 / 2;
      #P number 185 175 31 9 1 127 3 3;
      #P newex 146 16 43 196617 loadbang;
      #P number 141 175 34 9 0 0 0 3;
      #P message 98 52 23 196617 0.5;
      #P message 131 52 20 196617 24;
      #P message 158 52 20 196617 55;
      #P message 185 52 20 196617 90;
      #P message 223 52 26 196617 200;
      #P number 223 73 34 9 75 2000 3 3;
      #P newex 165 195 50 196617 makenote;
      #P newex 165 218 50 196617 noteout 1;
      #P number 158 130 25 9 0 100 3 3;
      #P newex 141 153 27 196617 +;
      #P number 131 110 27 9 1 100 3 3;
      #P newex 114 130 27 196617 * 0.;
      #P flonum 98 92 34 9 0 0 0 3;
      #P newex 13 74 35 196617 metro;
      #P button 13 99 15 0;
      #P flonum 29 132 35 9 0 0 0 3;
      #P newex 29 293 27 196617 * 0.;
      #P flonum 41 269 34 9 0 0 0 3;
      #P newex 41 245 34 196617 + 1.;
      #P flonum 29 181 30 9 0 0 0 3;
      #P newex 29 157 27 196617 * 0.;
      #P newex 41 222 34 196617 * -1.;
      #P message 66 52 23 196617 3.8;
      #P toggle 13 48 15 0;
      #P connect 27 0 17 2;
      #P connect 9 0 8 0;
      #P connect 24 0 17 0;
      #P connect 25 0 1 0;
      #P connect 25 0 23 0;
      #P connect 25 0 22 0;
      #P connect 25 0 21 0;
      #P connect 25 0 20 0;
      #P connect 25 0 19 0;
      #P connect 17 0 16 0;
      #P connect 17 1 16 1;
      #P connect 14 0 24 0;
      #P connect 18 0 10 1;
      #P connect 18 0 27 0;
      #P connect 26 0 17 1;
      #P connect 15 0 14 1;
      #P connect 13 0 12 1;
      #P connect 11 0 2 0;
      #P connect 11 0 3 1;
      #P connect 11 0 28 0;
      #P connect 11 0 12 0;
      #P connect 12 0 14 0;
      #P connect 10 0 9 0;
      #P connect 8 0 3 0;
      #P connect 6 0 7 1;
      #P fasten 7 0 11 0 34 320 83 320 83 84 103 84;
      #P connect 5 0 6 0;
      #P connect 0 0 10 0;
      #P connect 23 0 11 0;
      #P connect 22 0 13 0;
      #P connect 21 0 15 0;
      #P connect 20 0 26 0;
      #P connect 19 0 18 0;
      #P connect 4 0 7 0;
      #P connect 3 0 4 0;
      #P connect 2 0 5 0;
      #P connect 1 0 8 0;
      #P pop;
      

    16. CHAOS Generator(2)

      This patch controls the Chaos parameter [Myu] by sensor information. But, using this type of Chaos in music, many audience cannot feel whether [random] or [chaotic vibration]. This is deeply theme of [chaos in music], I think. This is the text-format of this patch:

      max v2;
      #N vpatcher 44 53 324 529;
      #P newex 76 107 32 9 + 3.;
      #P newex 76 79 44 9 / 127.899994;
      #P number 76 56 35 9 0 0 0 3;
      #P inlet 76 33 15 0;
      #P comment 21 17 105 9 sensor raw data inout;
      #P user multiSlider 97 358 149 88 0. 1. 1 3705 15;
      #P newex 222 291 27 196617 / 2;
      #P number 184 293 31 9 1 127 3 3;
      #P newex 145 134 43 196617 loadbang;
      #P number 140 293 34 9 0 0 0 3;
      #P message 97 170 23 196617 0.5;
      #P message 130 170 20 196617 24;
      #P message 157 170 20 196617 55;
      #P message 184 170 20 196617 90;
      #P message 222 170 26 196617 200;
      #P number 222 191 34 9 75 2000 3 3;
      #P newex 164 313 50 196617 makenote;
      #P newex 164 336 50 196617 noteout 1;
      #P number 157 248 25 9 0 100 3 3;
      #P newex 140 271 27 196617 +;
      #P number 130 228 27 9 1 100 3 3;
      #P newex 113 248 27 196617 * 0.;
      #P flonum 97 210 34 9 0 0 0 3;
      #P newex 12 189 35 196617 metro;
      #P button 12 217 15 0;
      #P flonum 28 250 35 9 0 0 0 3;
      #P newex 28 411 27 196617 * 0.;
      #P flonum 40 387 34 9 0 0 0 3;
      #P newex 40 363 34 196617 + 1.;
      #P flonum 28 299 30 9 0 0 0 3;
      #P newex 28 275 27 196617 * 0.;
      #P newex 40 340 34 196617 * -1.;
      #P message 69 170 23 196617 3.8;
      #P toggle 12 166 15 0;
      #P connect 9 0 8 0;
      #P connect 27 0 17 2;
      #P connect 24 0 17 0;
      #P connect 25 0 1 0;
      #P connect 25 0 23 0;
      #P connect 25 0 22 0;
      #P connect 25 0 21 0;
      #P connect 25 0 20 0;
      #P connect 25 0 19 0;
      #P connect 17 1 16 1;
      #P connect 17 0 16 0;
      #P connect 14 0 24 0;
      #P connect 18 0 10 1;
      #P connect 18 0 27 0;
      #P connect 15 0 14 1;
      #P connect 26 0 17 1;
      #P connect 13 0 12 1;
      #P connect 11 0 2 0;
      #P connect 11 0 3 1;
      #P connect 11 0 28 0;
      #P connect 11 0 12 0;
      #P connect 12 0 14 0;
      #P connect 10 0 9 0;
      #P connect 6 0 7 1;
      #P connect 8 0 3 0;
      #P fasten 7 0 11 0 33 438 82 438 82 202 102 202;
      #P connect 30 0 31 0;
      #P connect 5 0 6 0;
      #P connect 0 0 10 0;
      #P connect 22 0 13 0;
      #P connect 23 0 11 0;
      #P connect 21 0 15 0;
      #P connect 20 0 26 0;
      #P connect 19 0 18 0;
      #P connect 3 0 4 0;
      #P connect 4 0 7 0;
      #P connect 2 0 5 0;
      #P connect 1 0 8 0;
      #P connect 33 0 8 0;
      #P connect 32 0 33 0;
      #P connect 31 0 32 0;
      #P pop;
      

    17. Tonality Generator

      This patch is a sample of [weighten-scale] method. You can control each notes[C,C#,D,.....,Bb,B] value, and this value is the possibility of random generated scale of the note. You can easily apply the sensor information to this patch, so this is your homewark. This is the text-format of this patch:

      max v2;
      #N vpatcher 25 77 356 466;
      #P message 10 38 14 9 4;
      #P message 10 38 14 9 2;
      #P newex 21 316 85 9 makenote 100 50;
      #P newex 21 341 50 9 noteout 1;
      #P newex 80 20 43 196617 loadbang;
      #P number 21 294 34 9 0 0 4096 3;
      #P number 80 63 34 9 75 2000 3 3;
      #P toggle 55 65 15 0;
      #P message 80 43 26 196617 120;
      #P newex 153 177 90 196617 if $i1>=$i3 then 0;
      #P newex 153 191 147 196617 if $i1<$i2 && $i1>=$i3 then 1;
      #P newex 153 205 147 196617 if $i1<$i2 && $i1>=$i3 then 2;
      #P newex 153 219 147 196617 if $i1<$i2 && $i1>=$i3 then 3;
      #P newex 153 233 147 196617 if $i1<$i2 && $i1>=$i3 then 4;
      #P newex 153 247 147 196617 if $i1<$i2 && $i1>=$i3 then 5;
      #P newex 153 261 147 196617 if $i1<$i2 && $i1>=$i3 then 6;
      #P newex 153 275 147 196617 if $i1<$i2 && $i1>=$i3 then 7;
      #P newex 153 289 147 196617 if $i1<$i2 && $i1>=$i3 then 8;
      #P newex 153 303 147 196617 if $i1<$i2 && $i1>=$i3 then 9;
      #P newex 153 317 153 196617 if $i1<$i2 && $i1>=$i3 then 10;
      #P newex 153 331 90 196617 if $i1<$i2 then 11;
      #P hidden number 153 165 37 9 0 0 0 3;
      #P newex 110 164 41 196617 random;
      #P number 153 346 22 9 0 0 0 3;
      #P newex 115 142 15 196617 +;
      #P newex 132 142 15 196617 +;
      #P newex 149 142 15 196617 +;
      #P newex 166 142 15 196617 +;
      #P newex 183 142 15 196617 +;
      #P newex 200 142 15 196617 +;
      #P newex 217 142 15 196617 +;
      #P newex 234 142 15 196617 +;
      #P newex 251 142 15 196617 +;
      #P newex 268 142 15 196617 +;
      #P newex 285 142 15 196617 +;
      #P newex 141 121 164 196617 unpack 1 2 3 4 5 6 7 8 9 10 11 12;
      #P user multiSlider 141 31 160 87 0. 99. 12 2921 15;
      #P comment 142 19 165 196617 C..C#.D..Eb..E..F..F#.G..G#.A..Bb.B;
      #P newex 55 88 35 196617 metro;
      #P button 55 111 15 0;
      #P newex 55 156 41 196617 random;
      #P number 10 133 35 9 0 0 0 3;
      #P number 10 156 35 9 0 0 0 3;
      #P newex 55 180 27 196617 +;
      #P number 55 223 25 9 0 100 3 3;
      #P newex 54 244 27 196617 +;
      #P newex 55 201 30 196617 * 12;
      #P newex 21 269 40 196617 change;
      #P connect 7 0 4 0;
      #P connect 4 0 1 0;
      #P connect 1 0 3 0;
      #P connect 2 0 0 0;
      #P connect 0 0 42 0;
      #P connect 39 0 41 0;
      #P connect 19 0 20 1;
      #P connect 19 0 35 2;
      #P connect 19 0 34 1;
      #P connect 5 0 4 1;
      #P connect 6 0 7 1;
      #P connect 20 0 21 1;
      #P connect 20 0 35 1;
      #P connect 20 0 36 2;
      #P connect 21 0 22 1;
      #P connect 21 0 36 1;
      #P connect 21 0 37 2;
      #P connect 22 0 23 1;
      #P connect 22 0 37 1;
      #P connect 22 0 38 2;
      #P connect 33 0 24 0;
      #P connect 32 0 24 0;
      #P connect 8 0 7 0;
      #P connect 8 0 25 0;
      #P connect 30 0 24 0;
      #P connect 31 0 24 0;
      #P connect 41 0 9 1;
      #P connect 29 0 24 0;
      #P connect 26 0 38 0;
      #P connect 28 0 24 0;
      #P connect 26 0 36 0;
      #P connect 26 0 37 0;
      #P connect 26 0 35 0;
      #P connect 26 0 33 0;
      #P connect 26 0 34 0;
      #P connect 26 0 32 0;
      #P connect 26 0 30 0;
      #P connect 26 0 31 0;
      #P connect 26 0 29 0;
      #P connect 26 0 27 0;
      #P connect 26 0 28 0;
      #P connect 27 0 24 0;
      #P connect 25 0 26 0;
      #P connect 23 0 25 1;
      #P connect 45 0 44 0;
      #P connect 42 0 45 0;
      #P connect 45 1 44 1;
      #P connect 43 0 47 0;
      #P connect 43 0 46 0;
      #P connect 43 0 39 0;
      #P connect 46 0 6 0;
      #P connect 24 0 2 0;
      #P connect 9 0 8 0;
      #P connect 18 0 19 1;
      #P connect 18 0 34 2;
      #P connect 18 0 33 1;
      #P connect 17 0 18 1;
      #P connect 17 0 32 1;
      #P connect 17 0 33 2;
      #P connect 16 0 17 1;
      #P connect 16 0 31 1;
      #P connect 16 0 32 2;
      #P connect 15 0 16 1;
      #P connect 15 0 30 1;
      #P connect 15 0 31 2;
      #P connect 14 0 15 1;
      #P connect 14 0 29 1;
      #P connect 14 0 30 2;
      #P connect 3 0 2 1;
      #P connect 13 0 14 1;
      #P connect 13 0 28 1;
      #P connect 13 0 29 2;
      #P connect 12 1 22 0;
      #P connect 12 0 23 0;
      #P connect 12 2 21 0;
      #P connect 12 4 19 0;
      #P connect 12 3 20 0;
      #P connect 12 5 18 0;
      #P connect 12 11 27 1;
      #P connect 12 7 16 0;
      #P connect 12 6 17 0;
      #P connect 12 8 15 0;
      #P connect 12 9 14 0;
      #P connect 12 10 13 0;
      #P connect 12 11 13 1;
      #P connect 12 11 28 2;
      #P connect 47 0 5 0;
      #P connect 38 0 24 0;
      #P connect 40 0 9 0;
      #P connect 37 0 24 0;
      #P connect 35 0 24 0;
      #P connect 36 0 24 0;
      #P connect 34 0 24 0;
      #P connect 11 0 12 0;
      #P pop;
      

    18. MSP control

      This patch is only for my demonstration because the sample sound file is so big. Of course, you can control MSP parameters with sensor information.

    19. SuperCollider control

      As you know, SuperCollider can deal with MIDI information directly, so you may treat sensor MIDI message directly with SuperCollider. But myself, I use Max [sensor to music] algorithm at first, and one of the output of [master] Max controls [slave] SuperCollider. This is the SuperCollider program of my work [Bio-Cosmic Storm]. I used 2 PowerBook in this worak, running this program in SuperCollider and running Max patch.

      Synth.scope({
      	var p111,p112,p113,p116,p117,p118;
      	var s, z, y, ss, zz, yy;
      	var p106,p107,p108,p109,p110,p114,p115;
      	var p119,p120,p121,p122,p123,p124,p89,p90,p91,p92,p93,p94;
      	var p95,p96,p71,p72,p73,p74,p75;
      	
      	p108 = MIDIController.kr(16,108,0.0,2.5,'linear');			// [A] Res LPF level
      		p106 = MIDIController.kr(16,106,100,4000,'exponential');	// 	LPF cutoff
      		p107 = MIDIController.kr(16,107,0.01,0.6,'linear');		// 	Q
      		p95 = MIDIController.kr(16,95,1.5,2.0,'linear');		// 	chaos param
      		p96 = MIDIController.kr(16,96,-1.0,1.0,'linear');		// 	pan
      	p71 = MIDIController.kr(16,71,0.0,2.5,'linear');			// [B] Res LPF level
      		p72 = MIDIController.kr(16,72,100,4000,'exponential');	// 	LPF cutoff
      		p73 = MIDIController.kr(16,73,0.01,0.6,'linear');		// 	Q
      		p74 = MIDIController.kr(16,74,1.5,2.0,'linear');		// 	chaos param
      		p75 = MIDIController.kr(16,75,-1.0,1.0,'linear');		// 	pan
      	p109 = MIDIController.kr(16,109,0.0,5.0,'linear');			// [A] Synth level
      		p110 = MIDIController.kr(16,110,0.01,0.5,'linear');		// 	echo depth
      		p111 = MIDIController.kr(16,111,0.05,1.5,'linear');		// 	pulse density
      		p112 = MIDIController.kr(16,112,30,400,'exponential');	// 	base freq
      		p113 = MIDIController.kr(16,113,0.0,1.0,'linear');		// 	freq random range
      	p114 = MIDIController.kr(16,114,0.0,5.0,'linear');			// [B] Synth level
      		p115 = MIDIController.kr(16,115,0.01,0.5,'linear');		// 	echo depth
      		p116 = MIDIController.kr(16,116,0.05,1.5,'linear');		// 	pulse density
      		p117 = MIDIController.kr(16,117,70,1000,'exponential');	// 	base freq
      		p118 = MIDIController.kr(16,118,0.0,1.0,'linear');		// 	freq random range
      	p119 = MIDIController.kr(16,119,0.0,7.0,'linear');			// [A] Noise Level
      		p120 = MIDIController.kr(16,120,0.1,15.0,'exponential');	// 	noise pan rate
      		p121 = MIDIController.kr(16,121,0.0,1.0,'linear');		// 	noise pan depth
      		p122 = MIDIController.kr(16,122,1.5,2.0,'linear');		// 	chaos param
      		p123 = MIDIController.kr(16,123,0.01,0.6,'linear');		// 	filter Q
      		p124 = MIDIController.kr(16,124,300,2500,'exponential');	// 	filter cutoff
      	p89 = MIDIController.kr(16,89,0.0,7.0,'linear');			// [B] Noise Level
      		p90 = MIDIController.kr(16,90,0.1,15.0,'exponential');	// 	noise pan rate
      		p91 = MIDIController.kr(16,91,0.0,1.0,'linear');		// 	noise pan depth
      		p92 = MIDIController.kr(16,92,1.5,2.0,'linear');		// 	chaos param
      		p93 = MIDIController.kr(16,93,0.01,0.6,'linear');		// 	filter Q
      		p94 = MIDIController.kr(16,94,300,2500,'exponential');	// 	filter cutoff
      	s = Mix.ar(Array.fill(10, { Resonz.ar(Dust.ar(p111,50), p112+(p113*1800.0.rand), 0.003)}) );
      		ss = Mix.ar(Array.fill(10, { Resonz.ar(Dust.ar(p116,50), p117+(p118*2500.0.rand), 0.003)}) );
      		z = DelayN.ar(s, 0.048);
      		zz = DelayN.ar(ss, 0.048);
      		y = Mix.ar(Array.fill(7,{ CombL.ar(z, 0.1, LFNoise1.kr(0.1.rand, 0.04, 0.05), 15) })); 
      		yy = Mix.ar(Array.fill(7,{ CombL.ar(zz, 0.1, LFNoise1.kr(0.1.rand, 0.04, 0.05), 15) })); 
      		4.do({ y = AllpassN.ar(y, 0.050, [0.050.rand, 0.050.rand], 1) });
      		4.do({ yy = AllpassN.ar(yy, 0.050, [0.050.rand, 0.050.rand], 1) });
      	Pan2.ar( RLPF.ar( Crackle.ar(p95,1.0), p106, p107, 1.0, 0 ), p96, p108 ) 
      +	Pan2.ar( RLPF.ar( Crackle.ar(p74,1.0), p72, p73, 1.0, 0 ), p75, p71 ) 
      +	( p109 * (s + ( p110 * y ) ) )
      +	( p114 * (ss + ( p115 * yy ) ) )
      +	Pan2.ar( Resonz.ar( Crackle.ar(p122,1.0), p124, p123, 1,0 ), SinOsc.kr(p120,0,p121,0), p119 ) 
      +	Pan2.ar( Resonz.ar( Crackle.ar(p92,1.0), p94, p93, 1,0 ), SinOsc.kr(p90,pi,p91,0), p89 ) 
      })
      

    20. Kyma control

      Just like as SuperCollider, I use Kyma as the [slave] component of my work/system with [master] MAX. Above is the output of [SHO breath sensor] produced by myself. I composed a work [Visional Legend] for Tamami Tono Ito (composer, SHO player), and using the same concept for the work.


      System Block Diagram


      (slave) Kyma Patch


      (master) MAX Patch