//
// Code by Raymond Burkholder
// ray@oneunified.net
// copyright (c) 2014
//
import themidibus.*; //Import the library
import javax.sound.midi.MidiMessage; //Import the MidiMessage classes http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/MidiMessage.html
import javax.sound.midi.SysexMessage;
import javax.sound.midi.ShortMessage;
MidiBus myBus; // The MidiBus
PImage imgCue;
PImage imgBlack;
int nHues = 6 * 256;
color[] rHue = new color[ nHues ];
int valAlpha = 0xff;
int valRed = 255;
int valGrn = 0;
int valBlu = 0;
boolean bBlack = false;
boolean bUseImage = false;
String sCue = "c";
String sPath = "D:\\Data\\Projects\\Test\\Frames\\";
int widthHue = nHues;
color hue = color( 255, 0, 0 ); // to be deprecated
int ixHue = 0; // red
float cycle( float f ) {
return sin( TWO_PI * f ) * 255 + 127;
}
void setup() {
int ixHues = 0;
for ( int ix = 0; 255 >= ix; ix += 1 ) { rHue[ ixHues ] = color( 255, ix, 0 ); ixHues += 1; };
for ( int ix = 255; 0 <= ix; ix -= 1 ) { rHue[ ixHues ] = color( ix, 255, 0 ); ixHues += 1; };
for ( int ix = 0; 255 >= ix; ix += 1 ) { rHue[ ixHues ] = color( 0, 255, ix ); ixHues += 1; };
for ( int ix = 255; 0 <= ix; ix -= 1 ) { rHue[ ixHues ] = color( 0, ix, 255 ); ixHues += 1; };
for ( int ix = 0; 255 >= ix; ix += 1 ) { rHue[ ixHues ] = color( ix, 0, 255 ); ixHues += 1; };
for ( int ix = 255; 0 <= ix; ix -= 1 ) { rHue[ ixHues ] = color( 255, 0, ix ); ixHues += 1; };
// size( 800, 600 );
//size(1280, 720);
//size( 1920, 1280 );
// https://sites.google.com/site/visualizationlaboratory/activity/runningprocessingsketchinfullscreen
size(displayWidth,displayHeight,OPENGL);
strokeWeight(1);
if (null != frame ) {
frame.setResizable( true );
}
myBus = new MidiBus( this, "processing", -1 );
imgCue = loadImage( sPath + "\\c000.jpg" );
imgBlack = loadImage( sPath + "\\c000.jpg" );
}
boolean sketchFullScreen() {
return true;
}
void mouseClicked() {
bUseImage = false;
switch ( mouseButton ) {
case LEFT:
ixHue = floor( float( mouseX ) / float( width ) * nHues );
hue = rHue[ ixHue ];
widthHue = floor( float( mouseY ) / float( height ) * float( nHues ) );
println( mouseX, mouseY, widthHue, red( hue ), green( hue ), blue( hue ) );
break;
case RIGHT:
//saveFrame("D:\\Data\\Projects\\Jackson 2014\\Frames\\cyc-#####.jpg");
saveFrame(sPath + sCue + ".jpg");
println( "saved", sCue );
break;
}
}
void keyPressed() {
switch ( key ) {
case 'c':
sCue = "c";
println( sCue );
break;
case 'b':
bBlack = !bBlack;
println( "Black: ", key, bBlack );
break;
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
sCue = sCue + key;
println( sCue );
break;
}
if ( 'b' == key ) {
}
}
void mouseMoved() {
//println( mouseX, mouseY, widthHue, red( hue ), green( hue ), blue( hue ) );
}
void midiMessage(MidiMessage message) { // You can also use midiMessage(MidiMessage message, long timestamp, String bus_name)
// Receive a MidiMessage
// MidiMessage is an abstract class, the actual passed object will be either javax.sound.midi.MetaMessage, javax.sound.midi.ShortMessage, javax.sound.midi.SysexMessage.
// Check it out here http://java.sun.com/j2se/1.5.0/docs/api/javax/sound/midi/package-summary.html
println();
println("MidiMessage Data:");
//println("--------");
int nCommand = (int)message.getStatus();
int nParam2 = 0;
int nParam3 = 0;
println("Status Byte/MIDI Command:"+nCommand);
for (int i = 1;i < message.getMessage().length;i++) {
println("Param "+(i+1)+": "+(int)(message.getMessage()[i] & 0xFF));
if ( 1 == i ) { nParam2 = (int)(message.getMessage()[i] & 0xFF); };
if ( 2 == i ) { nParam3 = (int)(message.getMessage()[i] & 0xFF); };
}
if ( ( 176 == nCommand ) && ( 1 == nParam2 ) ) {
println( "execute ", nCommand, nParam2, nParam3 );
//PImage img = loadImage( sPath + "\\c000.jpg" );
switch ( nParam3 ) {
case 0:
imgCue = loadImage( sPath + "\\c000.jpg" );
break;
case 1:
imgCue = loadImage( sPath + "\\c160.jpg" );
println( "loaded" );
break;
case 2:
imgCue = loadImage( sPath + "\\c120.jpg" );
println( "loaded" );
break;
}
image( imgCue, 0, 0 );
bUseImage = true;
}
}
void drawRegular() {
int ixWidth = 0;
int sweepIx = 0;
int sweepDir = 0; // default to no sweep
int ix;
if ( 0 != widthHue ) { sweepDir = 1; } // start sweep in positive direction
while ( ixWidth < width ) {
switch ( sweepDir ) {
case 0:
break;
case 1:
ix = ixHue + sweepIx;
if ( nHues <= ix ) { ix -= nHues; };
hue = rHue[ ix ];
if ( widthHue == sweepIx ) {
sweepDir = -1;
sweepIx -= 1;
//sweepIx = 0;
}
else {
sweepIx += 1;
}
break;
case -1:
ix = ixHue + sweepIx;
if ( nHues <= ix ) { ix -= nHues; };
hue = rHue[ ix ];
if ( 0 == sweepIx ) {
sweepDir = 1;
sweepIx += 1;
}
else {
sweepIx -= 1;
}
break;
}
stroke( red( hue ), green( hue ), blue( hue ) );
line( ixWidth, 0, ixWidth, height - 1 );
ixWidth += 1;
}
}
void draw() {
background(0);
if ( bUseImage ) {
image( imgCue, 0, 0 );
//bUseImage = false;
}
else {
if ( !bBlack ) {
drawRegular();
}
}
}
// r g b
// 255 0 0
// 255 255 0
// 0 255 0
// 0 255 255
// 0 0 255
// 255 0 255