/**
*
* For information on usage and redistribution, and for a DISCLAIMER OF ALL
* WARRANTIES, see the file, "LICENSE.txt," in this distribution.
*
*/
package org.puredata.android.processing;
import java.io.File;
import java.io.IOException;
import org.puredata.android.io.PdAudio;
import org.puredata.core.PdBase;
import org.puredata.core.utils.IoUtils;
import org.puredata.processing.PureDataP5Base;
import processing.core.PApplet;
/**
* An implementation of Android-specific functionality for Pd and Processing.
*
* @author Peter Brinkmann (peter.brinkmann@gmail.com)
*/
public class PureDataP5Android extends PureDataP5Base {
private final PApplet parent;
/**
* Constructor.
*
* @param parent instance of PApplet
* @param sampleRate desired sample rate
* @param nIn desired number of input channels
* @param nOut desired number of output channels
*/
public PureDataP5Android(PApplet parent, int sampleRate, int nIn, int nOut) {
super(parent);
this.parent = parent;
try {
PdAudio.initAudio(sampleRate, nIn, nOut, 8, true);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
@Override
public void start() {
PdAudio.startAudio(parent);
}
@Override
public void stop() {
PdAudio.stopAudio();
}
public void release() {
stop();
PdAudio.release();
PdBase.release();
}
@Override
public void dispose() {
release();
super.dispose();
}
/**
* Unpacks a zip resource and opens a patch contained in it.
*
* (Note: This method is experimental and may disappear without
* warning if it turns out to be at odds with the Processing way.)
*
* @param zipId Android id of zip resource, e.g., R.raw.patch
* @param patchName main patch file, e.g., "drone.pd"
* @return handle of patch, suitable for passing to closePatch
*/
public int unpackAndOpenPatch(int zipId, String patchName) {
File dir = parent.getFilesDir();
try {
IoUtils.extractZipResource(parent.getResources().openRawResource(zipId), dir, true);
} catch (final IOException e) {
throw new RuntimeException(e);
}
return openPatch(new File(dir, patchName));
}
}