Game Development Reference
In-Depth Information
Listing 2-4. A Java Class to Read Audio Data from a Native Library
public class NativeAudio {
private static boolean mDone = false;
private static boolean mAudioLocked = false;
private static boolean mAudioRunning = false;
private static boolean mNativeAudioInitialized = false;
// Native audio painter
native int PaintAudio(ByteBuffer buf);
// Audio will start from C
private static void start(final int freq, final int channels,
final int bits, final int bufferSize) {
if (isRunning()) {
Log.w(TAG, "WARNING: Java Audio thread already running!!");
return;
}
// Must be direct for JNI to work!
// Native BUFFERS MUST BE DIRECT!!! ByteBuffer
final ByteBuffer audioBuffer = ByteBuffer.allocateDirect(bufferSize);
final byte[] audioData8 = new byte[bufferSize];
Thread t = new Thread(new Runnable(){
public void run(){
AudioTrack mTrack = new AudioTrack(
android.media.AudioManager.STREAM_MUSIC,
freq, // frequency in Hz
channels == 1 ? AudioFormat.CHANNEL_CONFIGURATION_MONO
: AudioFormat.CHANNEL_CONFIGURATION_STEREO,
bits == 16 ? AudioFormat.ENCODING_PCM_16BIT
: AudioFormat.ENCODING_PCM_8BIT,
4 * (freq / 5),
AudioTrack.MODE_STREAM);
Log.d(TAG, "Audio thread start. Freq=" + freq + " Channels="
+ channels + " Bits=" + bits + " Buf Size="
+ bufferSize);
mDone = false;
mAudioRuning = true;
try {
mTrack.play;
} catch (Exception e) {
Log.e(TAG, e.toString());
mDone = true;
}
 
Search WWH ::




Custom Search