summaryrefslogtreecommitdiff
path: root/sf_live
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2012-08-09 20:14:02 +0100
committerTim Redfern <tim@eclectronics.org>2012-08-09 20:14:02 +0100
commitb3548f90171f0be1ebfd7020f38f3d0acec65f8b (patch)
tree76698256f9cf4edb797f7996e36edc8e4bf92f83 /sf_live
initial commit
Diffstat (limited to 'sf_live')
-rw-r--r--sf_live/MetaListener.pde17
-rw-r--r--sf_live/MidiReceiver.pde25
-rw-r--r--sf_live/Pianola.pde9
-rw-r--r--sf_live/data/Sailing Architraves Tim Live.midbin0 -> 14219 bytes
-rw-r--r--sf_live/data/Sailing Architraves Tim Live.mp3bin0 -> 10587659 bytes
-rw-r--r--sf_live/sf_live.pde146
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
new file mode 100644
index 0000000..c6bc735
--- /dev/null
+++ b/sf_live/data/Sailing Architraves Tim Live.mid
Binary files differ
diff --git a/sf_live/data/Sailing Architraves Tim Live.mp3 b/sf_live/data/Sailing Architraves Tim Live.mp3
new file mode 100644
index 0000000..a28589f
--- /dev/null
+++ b/sf_live/data/Sailing Architraves Tim Live.mp3
Binary files differ
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;
+ }
+}
+
+
+