diff --git a/ewi_2/ewi_2.pde b/ewi_2/ewi_2.pde new file mode 100644 index 0000000..497e5db --- /dev/null +++ b/ewi_2/ewi_2.pde @@ -0,0 +1,73 @@ +import themidibus.*; + +MidiBus myBus; +int y = 0; +float vel = 0; +int MIN_NOTE = 36; +int MAX_NOTE = 98; + +void setup() { + size(1440, 900, P2D); +// size(720, 820, P2D); + background(0); + myBus = new MidiBus(this, 0, -1); +} + +void draw() { + background(0, 0.0, 0); + + // if (countOff >= countOn) { return; } + colorMode(HSB, 12, 1.0, 1.0, 1.0); + noFill(); + + int octave = y / 12; + float oct = norm(octave, 2, 8) * 0.5; + + float hue = y % 12 + (2.0 * bend); + stroke(hue, 0.8, 0.8, vel); + strokeWeight(pow(vel, 1.3) * 80); + float ny = height - (norm(y, MIN_NOTE, MAX_NOTE) * height); + float dy = vel * bend * 120.0; + bezier(0, ny, 0.25 * width, ny - dy, 0.75 * width, ny - dy, width, ny); +} + +int countOn; +void noteOn(int channel, int pitch, int velocity) { + vel = norm(velocity, 0, 127); + y = pitch; + countOn++; + println(""); +} +void noteOff(int channel, int pitch, int velocity) { + countOn--; + if (pitch == y) { + vel = 0; + } + println(""); +} + +void controllerChange(int channel, int number, int value) { + if (channel == 0 && number == 2) { + if (countOn > 0 || value == 0) { + vel = norm(value, 0, 127); + } + return; + } +// println(""); +} + +float bend = 0.0; +void rawMidi(byte[] data) { // You can also use rawMidi(byte[] data, String bus_name) + int status = (int)(data[0] & 0xFF); + switch (status) { + case 176: // breath velocity + return; + case 144: // noteOn + return; + case 128: // noteOff + return; + case 224: // pitch bend + bend = norm(data[1] & 127 | (data[2] & 127) << 7, 0, (1 << 14) - 1) * 2.0 - 1.0; + return; + } +}