1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
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;
}
}
|