diff options
| author | Tim Redfern <tim@eclectronics.org> | 2012-08-09 20:14:02 +0100 |
|---|---|---|
| committer | Tim Redfern <tim@eclectronics.org> | 2012-08-09 20:14:02 +0100 |
| commit | b3548f90171f0be1ebfd7020f38f3d0acec65f8b (patch) | |
| tree | 76698256f9cf4edb797f7996e36edc8e4bf92f83 /sf_live | |
initial commit
Diffstat (limited to 'sf_live')
| -rw-r--r-- | sf_live/MetaListener.pde | 17 | ||||
| -rw-r--r-- | sf_live/MidiReceiver.pde | 25 | ||||
| -rw-r--r-- | sf_live/Pianola.pde | 9 | ||||
| -rw-r--r-- | sf_live/data/Sailing Architraves Tim Live.mid | bin | 0 -> 14219 bytes | |||
| -rw-r--r-- | sf_live/data/Sailing Architraves Tim Live.mp3 | bin | 0 -> 10587659 bytes | |||
| -rw-r--r-- | sf_live/sf_live.pde | 146 |
6 files changed, 197 insertions, 0 deletions
diff --git a/sf_live/MetaListener.pde b/sf_live/MetaListener.pde new file mode 100644 index 0000000..bf0f177 --- /dev/null +++ b/sf_live/MetaListener.pde @@ -0,0 +1,17 @@ +class MetaListener implements MetaEventListener{ + + void MetaListner(){ + } + + void meta(MetaMessage message){ + switch(message.getType()){ + case 47: //end of track + s.setMicrosecondPosition(0); + s.start(); + break; + default: + break; + } + } +} + diff --git a/sf_live/MidiReceiver.pde b/sf_live/MidiReceiver.pde new file mode 100644 index 0000000..4b204a2 --- /dev/null +++ b/sf_live/MidiReceiver.pde @@ -0,0 +1,25 @@ +class MidiReceiver implements Receiver{ + + void MidiReceiver(){ + } + + void close(){ + } + + void send(MidiMessage message, long lTimeStamp){ + switch(message.getStatus()){ + case 144: //note on + println(message.getStatus()+" "+message.getMessage()[1]+" "+message.getMessage()[2]); + + notes[message.getMessage()[1]-NOTE_LOW].velocity = message.getMessage()[2]; //set to velocity + //keys[message.getMessage()[1]].downColor= color(random(0, 360), 70, 100); + break; + case 128: //note off + notes[message.getMessage()[1]-NOTE_LOW].velocity = 0; //clear + break; + default: + break; + } + } +} + diff --git a/sf_live/Pianola.pde b/sf_live/Pianola.pde new file mode 100644 index 0000000..b2c3952 --- /dev/null +++ b/sf_live/Pianola.pde @@ -0,0 +1,9 @@ +class Note{ + int velocity; + + Note(){ + velocity=0; + } + +} + diff --git a/sf_live/data/Sailing Architraves Tim Live.mid b/sf_live/data/Sailing Architraves Tim Live.mid Binary files differnew file mode 100644 index 0000000..c6bc735 --- /dev/null +++ b/sf_live/data/Sailing Architraves Tim Live.mid diff --git a/sf_live/data/Sailing Architraves Tim Live.mp3 b/sf_live/data/Sailing Architraves Tim Live.mp3 Binary files differnew file mode 100644 index 0000000..a28589f --- /dev/null +++ b/sf_live/data/Sailing Architraves Tim Live.mp3 diff --git a/sf_live/sf_live.pde b/sf_live/sf_live.pde new file mode 100644 index 0000000..8ba93fb --- /dev/null +++ b/sf_live/sf_live.pde @@ -0,0 +1,146 @@ +//modprobe snd-virmidi +//creates virtual midi interface + +import javax.sound.midi.*; +import java.io.File; +import ddf.minim.*; + +String midiFileName = "Sailing Architraves Tim Live.mid"; +String audioFileName = "Sailing Architraves Tim Live.mp3"; +Sequencer s; +MetaListener metaListener; + +int NOTE_LOW = 36, NOTE_HIGH = 100; +int NUM_NOTES=NOTE_HIGH-NOTE_LOW; +Note[] notes = new Note[NUM_NOTES]; + +Minim minim; +AudioPlayer audioPlayer; + +int pw,ph; +PImage sc; //=createImage(width,height); + +MidiDevice midiOut; + +void setup(){ + + + MidiDevice.Info[] devs=MidiSystem.getMidiDeviceInfo(); + if (devs.length>0) { + println("MIDI devices:"); + for (int i=0;i<devs.length;i++) { + println(str(i)+": "+devs[i].getName()); + } + } + + //midiOut=MidiSystem.getMidiDevice(devs[0]); + Receiver receiver=MidiSystem.getReceiver(); + + + + size(300, 110, P3D); + pw=width/NUM_NOTES; + ph=pw; + frameRate(15); + for(int i = 0; i < NUM_NOTES; i++){ + notes[i]=new Note(); + } + //load audio file + minim = new Minim(this); + audioPlayer = minim.loadFile(audioFileName, 2048); + audioPlayer.play(); + //audioPlayer.loop(9999999); + //audioPlayer is started when midi sequencer is started + + startMidiFile(); + + background(0); + rectMode(CORNER); + noStroke(); + + colorMode(RGB, 255); + + //app=new PlayApp(this,"localhost","Backing & Veering","Sunken Foal",153f); + swidth=width-2; + soffset=1; +} +int swidth; +int soffset; +float time=0; +void draw(){ + time+=(1f/(153f*25)); + + + + for(int i = 0; i < NUM_NOTES; i++){ + int v=notes[i].velocity; + if(v>0) { + //draw the note + colorMode(HSB, 255); + fill(200-v,255,255); + colorMode(RGB, 255); + rect(i*pw,0,pw,ph); + } + } + + + //saveFrame("frames/img####.png"); + if (!audioPlayer.isPlaying()) exit(); +} + +//change rate of drop? +//veering?? + + +void startMidiFile(){ + InputStream midiFileStream = createInput(midiFileName); + + try { + s = MidiSystem.getSequencer(false); + s.setSequence(MidiSystem.getSequence(midiFileStream)); + + //Create a MidiReceiver that listens to NOTE ON and OFF events + Receiver midiReceiver = new MidiReceiver(); + Transmitter midiTransmitter = s.getTransmitter(); + midiTransmitter.setReceiver(midiReceiver); + + //Create a MetaEventListener that listens to the END OF TRACK event + metaListener = new MetaListener(); + s.addMetaEventListener(metaListener); + s.open(); + s.setTickPosition(0L); + s.start(); + } + catch(Exception e) { + println(e); + background(0, 100, 100); //red screen if erro + //stop(); + } + +} + + +void stop(){ + s.stop(); +} + + +void keyPressed() { + switch(key){ + case 'q': + swidth-=1; + break; + case 'w': + swidth+=1; + break; + case 'e': + soffset-=1; + break; + case 'r': + soffset+=1; + break; + } +} + + + |
