diff options
Diffstat (limited to 'sf_live/sf_live.pde')
| -rw-r--r-- | sf_live/sf_live.pde | 146 |
1 files changed, 146 insertions, 0 deletions
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; + } +} + + + |
