This commit is contained in:
Brian Matzon 2004-08-12 21:40:35 +00:00
parent 53126a57f1
commit 53202702b0
7 changed files with 224 additions and 113 deletions

View File

@ -36,6 +36,7 @@ import java.nio.FloatBuffer;
import java.nio.IntBuffer;
import java.util.ArrayList;
import org.lwjgl.BufferUtils;
import org.lwjgl.fmod3.callbacks.FSoundCloseCallback;
import org.lwjgl.fmod3.callbacks.FSoundDSPCallback;
import org.lwjgl.fmod3.callbacks.FSoundMetaDataCallback;
@ -1275,7 +1276,7 @@ public class FSound {
public static int nFSOUND_PlaySoundEx(int channel, FSoundSample sample, FSoundDSPUnit dspunit, boolean startpaused) {
return nFSOUND_PlaySoundEx(channel, sample.sampleHandle, dspunit.dspHandle, startpaused);
}
private static native int nFSOUND_PlaySoundEx(int channel, long sample, long dspunit, boolean startpaused);
private static native int nFSOUND_PlaySoundEx(int channel, long sample, ByteBuffer dspunit, boolean startpaused);
/**
* Stops a specified sound channel from playing, and frees it up for re-use
@ -2111,13 +2112,13 @@ public class FSound {
* @return On success, a sync point handle is returned. On failure, NULL is returned.
*/
public static FSoundSyncPoint FSOUND_Stream_AddSyncPoint(FSoundStream stream, int pcmoffset, String name) {
long result = nFSOUND_Stream_AddSyncPoint(stream.streamHandle, pcmoffset, name);
if(result != 0) {
ByteBuffer result = nFSOUND_Stream_AddSyncPoint(stream.streamHandle, pcmoffset, name);
if(result != null) {
return new FSoundSyncPoint(result);
}
return null;
}
private static native long nFSOUND_Stream_AddSyncPoint(long streamhandle, int pcmoffset, String name);
private static native ByteBuffer nFSOUND_Stream_AddSyncPoint(long streamhandle, int pcmoffset, String name);
/**
* Creates a user definable stream file ready for playing. The stream is serviced through a callback
@ -2158,15 +2159,18 @@ public class FSound {
* @return On success, a handle to the FSoundDSPUnit is returned. All DSP functions are performable on this. On failure, null is returned
*/
public static FSoundDSPUnit FSOUND_Stream_CreateDSP(FSoundStream stream, FSoundDSPCallback callback, int priority) {
ByteBuffer dspID = (ByteBuffer) BufferUtils.createByteBuffer(8).putLong(FSoundDSPUnit.getNextId()).flip();
FSoundDSPUnit unit = null;
long result = nFSOUND_Stream_CreateDSP(stream.streamHandle, priority);
if(result != 0) {
unit = new FSoundDSPUnit(result);
FMOD.registerCallback(FMOD.FSOUND_DSPCALLBACK, unit.dspHandle, unit, callback);
ByteBuffer dspHandle = nFSOUND_Stream_CreateDSP(stream.streamHandle, priority, dspID);
if(dspHandle != null) {
unit = new FSoundDSPUnit(dspHandle, dspID);
FMOD.registerCallback(FMOD.FSOUND_DSPCALLBACK, dspID.getLong(0), unit, callback);
}
return unit;
}
private static native long nFSOUND_Stream_CreateDSP(long streamHandle, int priority);
private static native ByteBuffer nFSOUND_Stream_CreateDSP(long streamHandle, int priority, ByteBuffer dspID);
/**
* Removes a user synchronization callback point from a stream.
@ -2177,7 +2181,7 @@ public class FSound {
public static boolean FSOUND_Stream_DeleteSyncPoint(FSoundSyncPoint point) {
return nFSOUND_Stream_DeleteSyncPoint(point.syncpointHandle);
}
private static native boolean nFSOUND_Stream_DeleteSyncPoint(long syncpointHandle);
private static native boolean nFSOUND_Stream_DeleteSyncPoint(ByteBuffer syncpointHandle);
/**
* Find a tag field associated with an open stream by name and type
@ -2322,13 +2326,13 @@ public class FSound {
* @return On success, a handle to a sync point is returned. On failure, NULL is returned.
*/
public static FSoundSyncPoint FSOUND_Stream_GetSyncPoint(FSoundStream stream, int index) {
long result = nFSOUND_Stream_GetSyncPoint(stream.streamHandle, index);
if(result != 0) {
ByteBuffer result = nFSOUND_Stream_GetSyncPoint(stream.streamHandle, index);
if(result != null) {
return new FSoundSyncPoint(result);
}
return null;
}
private static native long nFSOUND_Stream_GetSyncPoint(long streamHandle, int index);
private static native ByteBuffer nFSOUND_Stream_GetSyncPoint(long streamHandle, int index);
/**
* Retrieves the name and pcm offset in samples for a specified sync point
@ -2342,7 +2346,7 @@ public class FSound {
public static String FSOUND_Stream_GetSyncPointInfo(FSoundSyncPoint point, IntBuffer pcmoffset) {
return nFSOUND_Stream_GetSyncPointInfo(point.syncpointHandle, pcmoffset, (pcmoffset != null) ? pcmoffset.position() : 0);
}
private static native String nFSOUND_Stream_GetSyncPointInfo(long pointHandle, IntBuffer pcmoffset, int bufferOffset);
private static native String nFSOUND_Stream_GetSyncPointInfo(ByteBuffer pointHandle, IntBuffer pcmoffset, int bufferOffset);
/**
* Get a tag field associated with an open stream
@ -2496,7 +2500,7 @@ public class FSound {
public static int FSOUND_Stream_PlayEx(int channel, FSoundStream stream, FSoundDSPUnit dspunit, boolean paused) {
return nFSOUND_Stream_PlayEx(channel, stream.streamHandle, dspunit.dspHandle, paused);
}
private static native int nFSOUND_Stream_PlayEx(int channel, long stream, long dspunit, boolean paused);
private static native int nFSOUND_Stream_PlayEx(int channel, long stream, ByteBuffer dspunit, boolean paused);
/**
* Sets the internal file buffersize for audio streaming of data for the NEXT stream opened with FSOUND_Stream_Open.
@ -2916,15 +2920,16 @@ public class FSound {
* @return On success, a new valid DSP unit is returned. On failure, NULL is returned.
*/
public static FSoundDSPUnit FSOUND_DSP_Create(FSoundDSPCallback callbackHandler, int priority) {
FSoundDSPUnit dspUnit = null;
long unit = nFSOUND_DSP_Create(priority);
if(unit != 0) {
dspUnit= new FSoundDSPUnit(unit);
FMOD.registerCallback(FMOD.FSOUND_DSPCALLBACK, dspUnit.dspHandle, dspUnit, callbackHandler);
FSoundDSPUnit dspUnit = null;
ByteBuffer handle = nFSOUND_DSP_Create(priority);
if(handle != null) {
ByteBuffer dspID = (ByteBuffer) BufferUtils.createByteBuffer(8).putLong(FSoundDSPUnit.getNextId()).flip();
dspUnit= new FSoundDSPUnit(handle, dspID);
FMOD.registerCallback(FMOD.FSOUND_DSPCALLBACK, dspID.getLong(0), dspUnit, callbackHandler);
}
return dspUnit;
}
private static native long nFSOUND_DSP_Create(int priority);
private static native ByteBuffer nFSOUND_DSP_Create(int priority);
/**
* Frees and removes a DSP unit from the DSP chain
@ -2933,9 +2938,9 @@ public class FSound {
*/
public static void FSOUND_DSP_Free(FSoundDSPUnit unit) {
nFSOUND_DSP_Free(unit.dspHandle);
FMOD.registerCallback(FMOD.FSOUND_DSPCALLBACK, unit.dspHandle, unit, null);
FMOD.registerCallback(FMOD.FSOUND_DSPCALLBACK, unit.dspTrackingID.get(0), unit, null);
}
private static native void nFSOUND_DSP_Free(long dspUnitHandle);
private static native void nFSOUND_DSP_Free(ByteBuffer dspUnitHandle);
/**
* Allows the user to toggle a DSP unit on or off
@ -2949,7 +2954,7 @@ public class FSound {
public static void FSOUND_DSP_SetActive(FSoundDSPUnit unit, boolean active) {
nFSOUND_DSP_SetActive(unit.dspHandle, active);
}
private static native void nFSOUND_DSP_SetActive(long dspUnitHandle, boolean active);
private static native void nFSOUND_DSP_SetActive(ByteBuffer dspUnitHandle, boolean active);
/**
* Returns if a DSP unit is active or not
@ -2963,7 +2968,7 @@ public class FSound {
public static boolean FSOUND_DSP_GetActive(FSoundDSPUnit unit) {
return nFSOUND_DSP_GetActive(unit.dspHandle);
}
private static native boolean nFSOUND_DSP_GetActive(long dspUnitHandle);
private static native boolean nFSOUND_DSP_GetActive(ByteBuffer dspUnitHandle);
/**
* Returns the buffer lenth passed by the DSP system to DSP unit callbacks, so you can allocate memory etc
@ -3004,7 +3009,7 @@ public class FSound {
public static void FSOUND_DSP_GetActive(FSoundDSPUnit unit, int priority) {
nFSOUND_DSP_SetPriority(unit.dspHandle, priority);
}
private static native void nFSOUND_DSP_SetPriority(long dspUnitHandle, int priority);
private static native void nFSOUND_DSP_SetPriority(ByteBuffer dspUnitHandle, int priority);
/**
* Returns the priority status in the DSP chain, of a specified unit.
@ -3019,7 +3024,7 @@ public class FSound {
public static int FSOUND_DSP_GetPriority(FSoundDSPUnit unit) {
return nFSOUND_DSP_GetPriority(unit.dspHandle);
}
private static native int nFSOUND_DSP_GetPriority(long dspUnitHandle);
private static native int nFSOUND_DSP_GetPriority(ByteBuffer dspUnitHandle);
/**
* Returns a reference to FSOUND's system DSP clear unit
@ -3035,7 +3040,7 @@ public class FSound {
}
return FMOD.fmodClearUnit;
}
private static native long nFSOUND_DSP_GetClearUnit();
private static native ByteBuffer nFSOUND_DSP_GetClearUnit();
/**
* Returns a reference to FSOUND's system Clip and Copy DSP unit
@ -3051,7 +3056,7 @@ public class FSound {
}
return FMOD.fmodClipAndCopyUnit;
}
private static native long nFSOUND_DSP_GetClipAndCopyUnit();
private static native ByteBuffer nFSOUND_DSP_GetClipAndCopyUnit();
/**
* Returns a reference to FSOUND's system DSP Music mixer unit
@ -3067,7 +3072,7 @@ public class FSound {
}
return FMOD.fmodMusicUnit;
}
private static native long nFSOUND_DSP_GetMusicUnit();
private static native ByteBuffer nFSOUND_DSP_GetMusicUnit();
/**
* Returns a reference to FSOUND's system DSP SFX mixer unit
@ -3083,7 +3088,7 @@ public class FSound {
}
return FMOD.fmodSFXUnit;
}
private static native long nFSOUND_DSP_GetSFXUnit();
private static native ByteBuffer nFSOUND_DSP_GetSFXUnit();
/**
* Returns a reference to FSOUND's system DSP FFT processing unit
@ -3100,7 +3105,7 @@ public class FSound {
}
return FMOD.fmodFFTUnit;
}
private static native long nFSOUND_DSP_GetFFTUnit();
private static native ByteBuffer nFSOUND_DSP_GetFFTUnit();
/**
* Function to return a FloatBuffer to the current spectrum buffer. The buffer contains 512 floating
@ -3547,14 +3552,12 @@ public class FSound {
* @param handle Handle to native object being monitored
* @param param parameter passed to callback
*/
private static void dsp_callback(long dspHandle, ByteBuffer originalbuffer, ByteBuffer newbuffer, int length) {
private static ByteBuffer dsp_callback(long dsp_id, ByteBuffer originalbuffer, ByteBuffer newbuffer, int length) {
// we got a callback - notify everybody
ArrayList handlers = FMOD.getCallbacks(FMOD.FSOUND_DSPCALLBACK, dspHandle);
for(int i=0; i<handlers.size(); i++) {
FMOD.WrappedCallback wCallback = (FMOD.WrappedCallback) handlers.get(i);
FSoundDSPCallback callback = (FSoundDSPCallback) wCallback.callback;
callback.FSOUND_DSPCALLBACK(originalbuffer, newbuffer, length);
}
ArrayList handlers = FMOD.getCallbacks(FMOD.FSOUND_DSPCALLBACK, dsp_id);
FMOD.WrappedCallback wCallback = (FMOD.WrappedCallback) handlers.get((int)0);
FSoundDSPCallback callback = (FSoundDSPCallback) wCallback.callback;
return callback.FSOUND_DSPCALLBACK(originalbuffer, newbuffer, length);
}
/**

View File

@ -31,6 +31,8 @@
*/
package org.lwjgl.fmod3;
import java.nio.ByteBuffer;
/**
* This class is a representation of a DSPUnit in FMod.
* $Id$
@ -39,15 +41,43 @@ package org.lwjgl.fmod3;
* @version $Revision$
*/
public class FSoundDSPUnit {
/** Handle to dsp unit */
long dspHandle;
/** Opaque handle to dsp unit */
ByteBuffer dspHandle;
/** DSP id, used for tracking which dsp needs to call which
* object (when entering from native side) */
ByteBuffer dspTrackingID;
/** ID for next dsp unit */
static long nextDspTrackingID;
/**
* Creates a new FSoundDSPUnit
*
* @param dspHandle handle to dsp unit
*/
FSoundDSPUnit(long dspHandle) {
this.dspHandle = dspHandle;
FSoundDSPUnit(ByteBuffer dspHandle) {
this.dspHandle = dspHandle;
}
/**
* Creates a new FSoundDSPUnit
*
* @param dspHandle handle to dsp unit
*/
FSoundDSPUnit(ByteBuffer dspHandle, ByteBuffer dspTrackingID) {
this.dspHandle = dspHandle;
this.dspTrackingID = dspTrackingID;
}
/**
* @return Next dsp id
*/
static long getNextId() {
// To infinity and beyond!... well almost
if(nextDspTrackingID == Long.MAX_VALUE) {
nextDspTrackingID = 0;
}
return nextDspTrackingID++;
}
}

View File

@ -31,6 +31,8 @@
*/
package org.lwjgl.fmod3;
import java.nio.ByteBuffer;
/**
* This class is a representation of a SyncPoint in FMod.
* $Id$
@ -39,15 +41,15 @@ package org.lwjgl.fmod3;
* @version $Revision$
*/
public class FSoundSyncPoint {
/** Handle to syncpoint */
long syncpointHandle;
/** Opaque handle to syncpoint */
ByteBuffer syncpointHandle;
/**
* Creates a new FSoundSyncPoint
*
* @param syncpointHandle handle to syncpoint
*/
FSoundSyncPoint(long syncpointHandle) {
FSoundSyncPoint(ByteBuffer syncpointHandle) {
this.syncpointHandle = syncpointHandle;
}
}

View File

@ -41,5 +41,13 @@ import java.nio.ByteBuffer;
* @version $Revision$
*/
public interface FSoundDSPCallback {
public void FSOUND_DSPCALLBACK(ByteBuffer originalbuffer, ByteBuffer newbuffer, int length);
/**
*
* @param originalbuffer
* @param newbuffer
* @param length
* @return
*/
public ByteBuffer FSOUND_DSPCALLBACK(ByteBuffer originalbuffer, ByteBuffer newbuffer, int length);
}

View File

@ -52,6 +52,13 @@ jmethodID music_rowcallback;
jmethodID music_zxxcallback;
jclass fmusic;
// FSound cached fields
jmethodID sound_dspcallback;
jclass fsound;
// size of dsp buffer (in bytes)
int fsound_dsp_buffer_size;
#ifdef _WIN32
/**
* DLL entry point for Windows. Called when Java loads the .dll
@ -75,6 +82,25 @@ void fmod_create(JNIEnv *env, char* path) {
music_ordercallback = env->GetStaticMethodID(fmusic, "music_ordercallback", "(JI)V");
music_rowcallback = env->GetStaticMethodID(fmusic, "music_rowcallback", "(JI)V");
music_zxxcallback = env->GetStaticMethodID(fmusic, "music_zxxcallback", "(JI)V");
fsound = env->FindClass("org/lwjgl/fmod3/FSound");
sound_dspcallback = env->GetStaticMethodID(fsound, "dsp_callback", "(JLjava/nio/ByteBuffer;Ljava/nio/ByteBuffer;I)Ljava/nio/ByteBuffer;");
// cache some data
switch(fmod_instance->FSOUND_GetMixer()) {
case FSOUND_MIXER_AUTODETECT:
case FSOUND_MIXER_BLENDMODE:
case FSOUND_MIXER_QUALITY_AUTODETECT:
case FSOUND_MIXER_QUALITY_FPU:
case FSOUND_MIXER_MONO:
case FSOUND_MIXER_QUALITY_MONO:
case FSOUND_MIXER_MAX:
fsound_dsp_buffer_size = 8;
break;
default:
fsound_dsp_buffer_size = 4;
break;
}
}
}

View File

@ -42,6 +42,7 @@
void fmod_create(JNIEnv *env, char*);
void fmod_destroy();
extern void attachMixerThread();
extern FMOD_INSTANCE * fmod_instance;
// Setup for callback. The callbacks don't have access to a JNIEnv pointer, so we have to provide
@ -60,4 +61,11 @@ extern jmethodID music_rowcallback;
extern jmethodID music_zxxcallback;
extern jclass fmusic;
// FSound cached fields
extern jmethodID sound_dspcallback;
extern jclass fsound;
// size of dsp buffer (in bytes)
extern int fsound_dsp_buffer_size;
#endif

View File

@ -32,6 +32,8 @@
#include "org_lwjgl_fmod3_FSound.h"
#include "extfmod3.h"
void * F_CALLBACKAPI fsound_dspcallback(void *originalbuffer, void *newbuffer, int length, void *userdata);
/*
* Class: org_lwjgl_fmod3_FSound
* Method: FSOUND_Close
@ -553,8 +555,9 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1PlaySound(JNIEnv * e
* Method: nFSOUND_PlaySoundEx
* Signature: (IJJZ)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1PlaySoundEx(JNIEnv * env, jclass clazz, jint channel, jlong sptr, jlong dsp, jboolean startpaused) {
return fmod_instance->FSOUND_PlaySoundEx(channel, (FSOUND_SAMPLE*) sptr, (FSOUND_DSPUNIT*) dsp, startpaused);
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1PlaySoundEx(JNIEnv * env, jclass clazz, jint channel, jlong sptr, jobject dsp, jboolean startpaused) {
FSOUND_DSPUNIT* nDsp = (FSOUND_DSPUNIT*) env->GetDirectBufferAddress(dsp);
return fmod_instance->FSOUND_PlaySoundEx(channel, (FSOUND_SAMPLE*) sptr, nDsp, startpaused);
}
/*
@ -968,8 +971,9 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1Play(JNIEnv
* Method: nFSOUND_Stream_PlayEx
* Signature: (IJJZ)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1PlayEx(JNIEnv * env, jclass clazz, jint channel, jlong stream, jlong dsp, jboolean startpaused) {
return fmod_instance->FSOUND_Stream_PlayEx(channel, (FSOUND_STREAM*) stream, (FSOUND_DSPUNIT*) dsp, startpaused);
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1PlayEx(JNIEnv * env, jclass clazz, jint channel, jlong stream, jobject dsp, jboolean startpaused) {
FSOUND_DSPUNIT* nDsp = (FSOUND_DSPUNIT*) env->GetDirectBufferAddress(dsp);
return fmod_instance->FSOUND_Stream_PlayEx(channel, (FSOUND_STREAM*) stream, nDsp, startpaused);
}
/*
@ -1014,10 +1018,11 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1SetSubStream
* Method: nFSOUND_Stream_AddSyncPoint
* Signature: (JILjava/lang/String;)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1AddSyncPoint(JNIEnv * env, jclass clazz, jlong, jint, jstring) {
//XXX
throwFMODException(env, "missing implementation");
return 0;
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1AddSyncPoint(JNIEnv * env, jclass clazz, jlong stream, jint pcmOffset, jstring name) {
const char * nName = env->GetStringUTFChars(name, 0);
FSOUND_SYNCPOINT * result = fmod_instance->FSOUND_Stream_AddSyncPoint((FSOUND_STREAM*) stream, pcmOffset, (void *) nName);
env->ReleaseStringUTFChars (name, nName);
return safeNewBuffer(env, result, 0);;
}
/*
@ -1036,10 +1041,10 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1Create(JNIE
* Method: nFSOUND_Stream_CreateDSP
* Signature: (JI)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1CreateDSP(JNIEnv * env, jclass clazz, jlong, jint) {
//XXX
throwFMODException(env, "missing implementation");
return 0;
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1CreateDSP(JNIEnv * env, jclass clazz, jlong stream, jint priority, jobject dspID) {
long * nDspID = (long *) env->GetDirectBufferAddress(dspID);
FSOUND_DSPUNIT* dsp = fmod_instance->FSOUND_Stream_CreateDSP((FSOUND_STREAM*) stream, fsound_dspcallback, priority, nDspID);
return safeNewBuffer(env, dsp, 0);
}
/*
@ -1103,9 +1108,9 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetNumSyncPo
* Method: nFSOUND_Stream_GetNumTagFields
* Signature: (JLjava/nio/IntBuffer;I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetNumTagFields(JNIEnv * env, jclass clazz, jlong, jobject, jint) {
// XXX
return false;
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetNumTagFields(JNIEnv * env, jclass clazz, jlong stream, jobject num, jint numOffset) {
int* nNum = numOffset + (int*) env->GetDirectBufferAddress(num);
return fmod_instance->FSOUND_Stream_GetNumTagFields((FSOUND_STREAM*) stream, &nNum[0]);
}
/*
@ -1140,8 +1145,9 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetSample(J
* Method: nFSOUND_Stream_GetSyncPoint
* Signature: (JI)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetSyncPoint(JNIEnv * env, jclass clazz, jlong stream, jint index) {
return (jlong) fmod_instance->FSOUND_Stream_GetSyncPoint((FSOUND_STREAM*) stream, index);
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetSyncPoint(JNIEnv * env, jclass clazz, jlong stream, jint index) {
FSOUND_SYNCPOINT * point = fmod_instance->FSOUND_Stream_GetSyncPoint((FSOUND_STREAM*) stream, index);
return safeNewBuffer(env, point, 0);
}
/*
@ -1149,10 +1155,14 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetSyncPoin
* Method: nFSOUND_Stream_GetSyncPointInfo
* Signature: (JLjava/nio/IntBuffer;I)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetSyncPointInfo(JNIEnv * env, jclass clazz, jlong, jobject, jint) {
//XXX
throwFMODException(env, "missing implementation");
return NULL;
JNIEXPORT jstring JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetSyncPointInfo(JNIEnv * env, jclass clazz, jobject point, jobject pcmOffset, jint pcmOffsetPosition) {
FSOUND_SYNCPOINT * nPoint = (FSOUND_SYNCPOINT *) env->GetDirectBufferAddress(point);
unsigned int * nPcmOffset = pcmOffsetPosition + (unsigned int *) env->GetDirectBufferAddress(pcmOffset);
char * result = fmod_instance->FSOUND_Stream_GetSyncPointInfo(nPoint, nPcmOffset);
if(result != NULL) {
return env->NewStringUTF(result);
}
return NULL;
}
/*
@ -1180,10 +1190,9 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1GetTime(JNIE
* Method: nFSOUND_Stream_Net_GetBufferProperties
* Signature: (Ljava/nio/IntBuffer;I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1Net_1GetBufferProperties(JNIEnv * env, jclass clazz, jobject, jint) {
//XXX
throwFMODException(env, "missing implementation");
return false;
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1Net_1GetBufferProperties(JNIEnv * env, jclass clazz, jobject status, jint statusOffset) {
int* nStatus = statusOffset + (int*) env->GetDirectBufferAddress(status);
return fmod_instance->FSOUND_Stream_Net_GetBufferProperties(&nStatus[0], &nStatus[1], &nStatus[2]);
}
/*
@ -1200,10 +1209,9 @@ JNIEXPORT jstring JNICALL Java_org_lwjgl_fmod3_FSound_FSOUND_1Stream_1Net_1GetLa
* Method: nFSOUND_Stream_Net_GetStatus
* Signature: (JLjava/nio/IntBuffer;I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1Net_1GetStatus(JNIEnv * env, jclass clazz, jlong, jobject, jint) {
//XXX
throwFMODException(env, "missing implementation");
return false;
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1Net_1GetStatus(JNIEnv * env, jclass clazz, jlong stream, jobject status, jint statusOffset) {
int* nStatus = statusOffset + (int*) env->GetDirectBufferAddress(status);
return fmod_instance->FSOUND_Stream_Net_GetStatus((FSOUND_STREAM*) stream, &nStatus[0], &nStatus[1], &nStatus[2], (unsigned int *) &nStatus[3]);
}
/*
@ -1211,10 +1219,8 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Stream_1Net_1Get
* Method: FSOUND_Stream_Net_SetBufferProperties
* Signature: (III)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_lwjgl_fmod3_FSound_FSOUND_1Stream_1Net_1SetBufferProperties(JNIEnv * env, jclass clazz, jint, jint, jint) {
//XXX
throwFMODException(env, "missing implementation");
return NULL;
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_FSOUND_1Stream_1Net_1SetBufferPropertie(JNIEnv * env, jclass clazz, jint buffersize, jint prebuffer_percent, jint rebuffer_percent) {
return fmod_instance->FSOUND_Stream_Net_SetBufferProperties(buffersize, prebuffer_percent, rebuffer_percent);
}
/*
@ -1451,11 +1457,10 @@ JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_FSOUND_1DSP_1ClearMixBuffer(J
* Method: nFSOUND_DSP_Create
* Signature: (I)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1Create(JNIEnv * env, jclass clazz, jint priority) {
//XXX
//return (jlong) fmod_instance->FSOUND_DSP_Create(fmod_dsp_callback, priority, NULL);
throwFMODException(env, "missing implementation");
return 0;
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1Create(JNIEnv * env, jclass clazz, jint priority, jobject dspID) {
long * nDspID = (long *) env->GetDirectBufferAddress(dspID);
FSOUND_DSPUNIT* dsp = fmod_instance->FSOUND_DSP_Create(fsound_dspcallback, priority, nDspID);
return safeNewBuffer(env, dsp, 0);
}
/*
@ -1463,8 +1468,9 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1Create(JNIEnv
* Method: nFSOUND_DSP_Free
* Signature: (J)V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1Free(JNIEnv * env, jclass clazz, jlong dsp) {
fmod_instance->FSOUND_DSP_Free((FSOUND_DSPUNIT*) dsp);
JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1Free(JNIEnv * env, jclass clazz, jobject dsp) {
FSOUND_DSPUNIT* nDsp = (FSOUND_DSPUNIT*) env->GetDirectBufferAddress(dsp);
fmod_instance->FSOUND_DSP_Free(nDsp);
}
/*
@ -1472,8 +1478,9 @@ JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1Free(JNIEnv * e
* Method: nFSOUND_DSP_SetActive
* Signature: (JZ)V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1SetActive(JNIEnv * env, jclass clazz, jlong dsp, jboolean active) {
fmod_instance->FSOUND_DSP_SetActive((FSOUND_DSPUNIT*) dsp, active);
JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1SetActive(JNIEnv * env, jclass clazz, jobject dsp, jboolean active) {
FSOUND_DSPUNIT* nDsp = (FSOUND_DSPUNIT*) env->GetDirectBufferAddress(dsp);
fmod_instance->FSOUND_DSP_SetActive(nDsp, active);
}
/*
@ -1481,8 +1488,9 @@ JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1SetActive(JNIEn
* Method: nFSOUND_DSP_GetActive
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetActive(JNIEnv * env, jclass clazz, jlong dsp) {
return fmod_instance->FSOUND_DSP_GetActive((FSOUND_DSPUNIT*) dsp);
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetActive(JNIEnv * env, jclass clazz, jobject dsp) {
FSOUND_DSPUNIT* nDsp = (FSOUND_DSPUNIT*) env->GetDirectBufferAddress(dsp);
return fmod_instance->FSOUND_DSP_GetActive(nDsp);
}
/*
@ -1508,8 +1516,9 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_FSOUND_1DSP_1GetBufferLengthT
* Method: nFSOUND_DSP_SetPriority
* Signature: (JI)V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1SetPriority(JNIEnv * env, jclass clazz, jlong dsp, jint priority) {
fmod_instance->FSOUND_DSP_SetPriority((FSOUND_DSPUNIT*) dsp, priority);
JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1SetPriority(JNIEnv * env, jclass clazz, jobject dsp, jint priority) {
FSOUND_DSPUNIT* nDsp = (FSOUND_DSPUNIT*) env->GetDirectBufferAddress(dsp);
fmod_instance->FSOUND_DSP_SetPriority(nDsp, priority);
}
/*
@ -1517,8 +1526,9 @@ JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1SetPriority(JNI
* Method: nFSOUND_DSP_GetPriority
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetPriority(JNIEnv * env, jclass clazz, jlong dsp) {
return fmod_instance->FSOUND_DSP_GetPriority((FSOUND_DSPUNIT*) dsp);
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetPriority(JNIEnv * env, jclass clazz, jobject dsp) {
FSOUND_DSPUNIT* nDsp = (FSOUND_DSPUNIT*) env->GetDirectBufferAddress(dsp);
return fmod_instance->FSOUND_DSP_GetPriority(nDsp);
}
/*
@ -1526,8 +1536,9 @@ JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetPriority(JNI
* Method: nFSOUND_DSP_GetClearUnit
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetClearUnit(JNIEnv * env, jclass clazz) {
return (jlong) fmod_instance->FSOUND_DSP_GetClearUnit();
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetClearUnit(JNIEnv * env, jclass clazz) {
FSOUND_DSPUNIT* dsp = fmod_instance->FSOUND_DSP_GetClearUnit();
return safeNewBuffer(env, dsp, 0);
}
/*
@ -1535,8 +1546,9 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetClearUnit(J
* Method: nFSOUND_DSP_GetClipAndCopyUnit
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetClipAndCopyUnit(JNIEnv * env, jclass clazz) {
return (jlong) fmod_instance->FSOUND_DSP_GetClipAndCopyUnit();
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetClipAndCopyUnit(JNIEnv * env, jclass clazz) {
FSOUND_DSPUNIT* dsp = fmod_instance->FSOUND_DSP_GetClipAndCopyUnit();
return safeNewBuffer(env, dsp, 0);
}
/*
@ -1544,8 +1556,9 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetClipAndCopy
* Method: nFSOUND_DSP_GetMusicUnit
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetMusicUnit(JNIEnv * env, jclass clazz) {
return (jlong) fmod_instance->FSOUND_DSP_GetMusicUnit();
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetMusicUnit(JNIEnv * env, jclass clazz) {
FSOUND_DSPUNIT* dsp = fmod_instance->FSOUND_DSP_GetMusicUnit();
return safeNewBuffer(env, dsp, 0);
}
/*
@ -1553,8 +1566,9 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetMusicUnit(J
* Method: nFSOUND_DSP_GetSFXUnit
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetSFXUnit(JNIEnv * env, jclass clazz) {
return (jlong) fmod_instance->FSOUND_DSP_GetSFXUnit();
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetSFXUnit(JNIEnv * env, jclass clazz) {
FSOUND_DSPUNIT* dsp = fmod_instance->FSOUND_DSP_GetSFXUnit();
return safeNewBuffer(env, dsp, 0);
}
/*
@ -1562,8 +1576,9 @@ JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetSFXUnit(JNI
* Method: nFSOUND_DSP_GetFFTUnit
* Signature: ()J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetFFTUnit(JNIEnv * env, jclass clazz) {
return (jlong) fmod_instance->FSOUND_DSP_GetFFTUnit();
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetFFTUnit(JNIEnv * env, jclass clazz) {
FSOUND_DSPUNIT* dsp = fmod_instance->FSOUND_DSP_GetFFTUnit();
return safeNewBuffer(env, dsp, 0);
}
/*
@ -1580,10 +1595,10 @@ JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1GetSpectrum(
* Method: nFSOUND_DSP_MixBuffers
* Signature: (Ljava/nio/ByteBuffer;ILjava/nio/ByteBuffer;IIIIII)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1MixBuffers(JNIEnv * env, jclass clazz, jobject, jint, jobject, jint, jint, jint, jint, jint, jint) {
//XXX
throwFMODException(env, "missing implementation");
return false;
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1DSP_1MixBuffers(JNIEnv * env, jclass clazz, jobject destBuffer, jint destBufferOffset, jobject srcBuffer, jint srcBufferOffset, jint len, jint freq, jint vol, jint pan, jint mode) {
void * nDestBuffer = destBufferOffset + (char *) env->GetDirectBufferAddress(destBuffer);
void * nSrcBuffer = srcBufferOffset + (char *) env->GetDirectBufferAddress(srcBuffer);
return fmod_instance->FSOUND_DSP_MixBuffers(nDestBuffer, nSrcBuffer, len, freq, vol, pan, mode);
}
/*
@ -1760,7 +1775,9 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_FSOUND_1Record_1Stop(JNIE
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Reverb_1SetProperties(JNIEnv * env, jclass clazz, jlong prop) {
return fmod_instance->FSOUND_Reverb_SetProperties((FSOUND_REVERB_PROPERTIES*) prop);
throwFMODException(env, "missing implementation");
//return fmod_instance->FSOUND_Reverb_SetProperties((FSOUND_REVERB_PROPERTIES*) prop);
return false;
}
/*
@ -1769,7 +1786,9 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Reverb_1SetPrope
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Reverb_1GetProperties(JNIEnv * env, jclass clazz, jlong prop) {
return fmod_instance->FSOUND_Reverb_GetProperties((FSOUND_REVERB_PROPERTIES*) prop);
throwFMODException(env, "missing implementation");
//return fmod_instance->FSOUND_Reverb_GetProperties((FSOUND_REVERB_PROPERTIES*) prop);
return false;
}
/*
@ -1778,7 +1797,9 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Reverb_1GetPrope
* Signature: (IJ)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Reverb_1SetChannelProperties(JNIEnv * env, jclass clazz, jint channel, jlong prop) {
return fmod_instance->FSOUND_Reverb_SetChannelProperties(channel, (FSOUND_REVERB_CHANNELPROPERTIES*) prop);
throwFMODException(env, "missing implementation");
//return fmod_instance->FSOUND_Reverb_SetChannelProperties(channel, (FSOUND_REVERB_CHANNELPROPERTIES*) prop);
return false;
}
/*
@ -1787,5 +1808,18 @@ JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Reverb_1SetChann
* Signature: (IJ)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FSound_nFSOUND_1Reverb_1GetChannelProperties(JNIEnv * env, jclass clazz, jint channel, jlong prop) {
return fmod_instance->FSOUND_Reverb_GetChannelProperties(channel, (FSOUND_REVERB_CHANNELPROPERTIES*) prop);
throwFMODException(env, "missing implementation");
//return fmod_instance->FSOUND_Reverb_GetChannelProperties(channel, (FSOUND_REVERB_CHANNELPROPERTIES*) prop);
return false;
}
// FSound callbacks
// =======================================
void * F_CALLBACKAPI fsound_dspcallback(void *originalbuffer, void *newbuffer, int length, void *userdata) {
if (mixer_jnienv == NULL) { attachMixerThread(); }
int size = length * fsound_dsp_buffer_size;
jobject origBuffer = mixer_jnienv->NewDirectByteBuffer(originalbuffer, size);
jobject newBuffer = mixer_jnienv->NewDirectByteBuffer(newbuffer, size);
jobject resultBuffer = mixer_jnienv->CallStaticObjectMethod(fsound, sound_dspcallback, (jlong) *((long *)userdata), origBuffer, newBuffer, (jint) length);
return mixer_jnienv->GetDirectBufferAddress(resultBuffer);
}