package com.csound.wizard;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import android.os.Handler;
import com.csound.wizard.csound.channel.Output;
import com.csounds.CsoundObj;
public class Player {
private boolean isRunning = false;
private CsoundObj csoundObj = new CsoundObj();
private List<Output> outputs = new ArrayList<Output>();
public Player() {}
public void play(String csdFile) {
if (!isRunning) {
isRunning = true;
csoundObj.setAudioInEnabled(true);
csoundObj.setMessageLoggingEnabled(false);
csoundObj.startCsound(new File(csdFile));
startOutputUpdates();
}
}
public void stop() {
if (isRunning) {
isRunning = false;
stopOutputUpdates();
csoundObj.stopCsound();
}
}
// -----------------------------------------------------------
private void startOutputUpdates() {
if (!outputs.isEmpty()) {
handler.postDelayed(runnable, 100);
}
}
private void stopOutputUpdates() {
handler.removeCallbacks(runnable);
}
private Handler handler = new Handler();
private void updateOutputs() {
for (Output x: outputs) {
x.update();
}
}
private final Runnable runnable = new Runnable() {
public void run() {
updateOutputs();
handler.postDelayed(this, 100);
}
};
public CsoundObj getCsoundObj() {
return csoundObj;
}
public void addOutput(Output x) {
outputs.add(x);
}
public boolean isRunning() {
return isRunning;
}
}