package codes.orion.swplayer;
import java.io.IOException;
import android.media.AudioTrack;
import android.media.AudioFormat;
import android.os.Handler;
import android.util.Log;
public class MediaObj {
private AudioTrack audioTrack;
private Handler handler = new Handler();
private Runnable updateThread = new Runnable(){
public void run() {
byte[] bytes=stream(minbufsize);
int dsize=data_size();
if(audioTrack.write(bytes, 0, dsize)<dsize) {
Log.w(null,"Data not written completely");
}
handler.postDelayed(updateThread,50);
}
};
private int samplerate,channeltype,minbufsize;
public void setDataSource(String sourceFile) throws IOException {
openFile(sourceFile);
samplerate=getSampleRate();
if (getChannel()==1)
channeltype=AudioFormat.CHANNEL_OUT_MONO;
else
channeltype=AudioFormat.CHANNEL_OUT_STEREO;
minbufsize=AudioTrack.getMinBufferSize (samplerate, channeltype, AudioFormat.ENCODING_PCM_16BIT);
audioTrack = new AudioTrack(android.media.AudioManager.STREAM_MUSIC,samplerate,channeltype,
AudioFormat.ENCODING_PCM_16BIT,
minbufsize*2,
AudioTrack.MODE_STREAM);
}
public void prepare() {
}
public void play() {
handler.post(updateThread);
audioTrack.play();
}
public MediaObj() {
JNIinit();
}
@Override
protected void finalize() throws Throwable {
JNIexit();
handler.removeCallbacks(updateThread);
super.finalize();
}
public native byte[] stream(int minbufsize);
public native int data_size();
public native void openFile(String sourceFile) throws IOException;
public native int getSampleRate();
public native int getChannel();
public native void JNIinit();
public native void JNIexit();
static {
System.loadLibrary("mediaobj-jni");
}
}