We are about to switch to a new forum software. Until then we have removed the registration on this forum.
How do I close and open a new mp3 stream in ESS?
The ESS lib is at: http://www.tree-axis.com
The following code freezes when I click the mouse and attempt to close or destroy an audio stream:
import krister.Ess.*;
AudioStream myStream = null;
AudioFile myFile = null;
boolean playing;
String audio_file_url = "http://vprclassical.streamguys.net/vprclassical128.mp3";
void setup() {
playing = false;
size(256,200);
// start up Ess
Ess.start(this);
// start Stream
startStream(audio_file_url);
frameRate(30);
}
void draw() {
background(0,0,255);
// draw waveform
int interp=(int)max(0,(((millis()-myStream.bufferStartTime)/(float)myStream.duration)*myStream.size));
for (int i=0;i<256;i++) {
int top=50;
if (i+interp<myStream.buffer2.length) top-=(int)(myStream.buffer2[i+interp]*50.0);
int j=0;
for (int k=top;k<height;k++) {
set(i,k,color(j,j,255));
j=min(j+2,255);
}
}
}
void mousePressed()
{
startStream(audio_file_url);
}
void audioStreamWrite(AudioStream theStream) {
if (playing)
{
// read the next chunk
int samplesRead=myFile.read(myStream);
if (samplesRead==0) {
// start over
myFile.close();
myFile.open(audio_file_url,0,Ess.READ);
}
}
}
public void startStream(String audio_stream_url)
{
playing = false;
println("a");
if (myStream != null)
{
println("b");
myStream.destroy();
}
println("c");
if (myFile != null)
{
myFile.close();
}
myFile = new AudioFile(audio_stream_url,0,Ess.READ);
myStream = new AudioStream();
myStream.sampleRate(myFile.sampleRate);
int samplesRead = myFile.read(myStream);
myStream.start();
playing = true;
}
// we are done, clean up Ess
public void stop() {
Ess.stop();
super.stop();
}
You can see that "b" is the last output printed. "c" does not get printed after myStream.destroy() is called in startStream().
How can I fix this code so it works?