lwjgl/src/native/common/fmod3/org_lwjgl_fmod3_FMusic.cpp

536 lines
18 KiB
C++

/*
* Copyright (c) 2002-2004 LWJGL Project
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are
* met:
*
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* * Neither the name of 'LWJGL' nor the names of
* its contributors may be used to endorse or promote products derived
* from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "org_lwjgl_fmod3_FMusic.h"
#include "extfmod3.h"
// callback
void F_CALLBACKAPI fmusic_instcallback(FMUSIC_MODULE *mod, unsigned char param);
void F_CALLBACKAPI fmusic_ordercallback(FMUSIC_MODULE *mod, unsigned char param);
void F_CALLBACKAPI fmusic_rowcallback(FMUSIC_MODULE *mod, unsigned char param);
void F_CALLBACKAPI fmusic_zxxcallback(FMUSIC_MODULE *mod, unsigned char param);
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_LoadSong
* Signature: (Ljava/lang/String;)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1LoadSong(JNIEnv *env, jclass clazz, jstring name) {
const char* filename = (const char*) (env->GetStringUTFChars(name, 0));
return (jlong) fmod_instance->FMUSIC_LoadSong(filename);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_LoadSongEx
* Signature: (Ljava/nio/ByteBuffer;IIILjava/nio/IntBuffer;I)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1LoadSongEx__Ljava_nio_ByteBuffer_2IIIILjava_nio_IntBuffer_2II
(JNIEnv *env, jclass clazz, jobject data, jint dataOffset, jint offset, jint length, jint mode, jobject sampleList, jint sampleListOffset, jint samplelistnum){
int *sampleData = NULL;
const char *songData = dataOffset + (char *) env->GetDirectBufferAddress(data);
if(sampleList != NULL) {
sampleData = sampleListOffset + (int *) env->GetDirectBufferAddress(sampleList);
}
return (jlong) fmod_instance->FMUSIC_LoadSongEx(songData, offset, length, mode, sampleData, samplelistnum);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_LoadSongEx
* Signature: (Ljava/nio/ByteBuffer;IIILjava/nio/IntBuffer;I)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1LoadSongEx__Ljava_lang_String_2IIILjava_nio_IntBuffer_2II
(JNIEnv *env, jclass clazz, jstring name, jint offset, jint length, jint mode, jobject sampleList, jint sampleListOffset, jint samplelistnum){
int *sampleData = NULL;
const char* filename = (const char*) (env->GetStringUTFChars(name, 0));
if(sampleList != NULL) {
sampleData = sampleListOffset + (int *) env->GetDirectBufferAddress(sampleList);
}
return (jlong) fmod_instance->FMUSIC_LoadSongEx(filename, offset, length, mode, sampleData, samplelistnum);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetOpenState
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetOpenState
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetOpenState((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_FreeSong
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1FreeSong
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_FreeSong((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_PlaySong
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1PlaySong
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_PlaySong((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_StopSong
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1StopSong
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_StopSong((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: FMUSIC_StopAllSongs
* Signature: ()V
*/
JNIEXPORT void JNICALL Java_org_lwjgl_fmod3_FMusic_FMUSIC_1StopAllSongs
(JNIEnv *env, jclass clazz){
return fmod_instance->FMUSIC_StopAllSongs();
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetZxxCallback
* Signature: (JLorg/lwjgl/fmod_instance/FMusicCallback;)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetZxxCallback(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_SetZxxCallback((FMUSIC_MODULE*)module, fmusic_zxxcallback);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetRowCallback
* Signature: (JLorg/lwjgl/fmod_instance/FMusicCallback;I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetRowCallback(JNIEnv *env, jclass clazz, jlong module, jint row) {
return fmod_instance->FMUSIC_SetRowCallback((FMUSIC_MODULE*)module, fmusic_rowcallback, row);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetOrderCallback
* Signature: (JLorg/lwjgl/fmod_instance/FMusicCallback;I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetOrderCallback(JNIEnv *env, jclass clazz, jlong module, jint order) {
return fmod_instance->FMUSIC_SetOrderCallback((FMUSIC_MODULE*)module, fmusic_ordercallback, order);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetInstCallback
* Signature: (JLorg/lwjgl/fmod_instance/FMusicCallback;I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetInstCallback(JNIEnv *env, jclass clazz, jlong module, jint inst){
return fmod_instance->FMUSIC_SetInstCallback((FMUSIC_MODULE*)module, fmusic_instcallback, inst);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetSample
* Signature: (JIJ)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetSample
(JNIEnv *env, jclass clazz, jlong module, jint sampno, jlong sample){
return fmod_instance->FMUSIC_SetSample((FMUSIC_MODULE *) module, sampno, (FSOUND_SAMPLE *) sample);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetUserData
* Signature: (JLjava/nio/ByteBuffer;I)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetUserData(JNIEnv *env, jclass clazz, jlong module, jobject data, jint offset) {
void *userdata = offset + (char*) env->GetDirectBufferAddress(data);
return fmod_instance->FMUSIC_SetUserData((FMUSIC_MODULE *) module, userdata);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_OptimizeChannels
* Signature: (JII)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1OptimizeChannels
(JNIEnv *env, jclass clazz, jlong module, jint max, jint min){
return fmod_instance->FMUSIC_OptimizeChannels((FMUSIC_MODULE *) module, max, min);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: FMUSIC_SetReverb
* Signature: (Z)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_FMUSIC_1SetReverb
(JNIEnv *env, jclass clazz, jboolean reverb){
return fmod_instance->FMUSIC_SetReverb(reverb);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetLooping
* Signature: (JZ)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetLooping
(JNIEnv *env, jclass clazz, jlong module, jboolean looping){
return fmod_instance->FMUSIC_SetLooping((FMUSIC_MODULE *) module, looping);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetOrder
* Signature: (JI)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetOrder
(JNIEnv *env, jclass clazz, jlong module, jint order){
return fmod_instance->FMUSIC_SetOrder((FMUSIC_MODULE *) module, order);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetPaused
* Signature: (JZ)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetPaused
(JNIEnv *env, jclass clazz, jlong module, jboolean paused){
return fmod_instance->FMUSIC_SetPaused((FMUSIC_MODULE *) module, paused);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetMasterVolume
* Signature: (JI)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetMasterVolume
(JNIEnv *env, jclass clazz, jlong module, jint volume){
return fmod_instance->FMUSIC_SetMasterVolume((FMUSIC_MODULE *) module, volume);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetMasterSpeed
* Signature: (JF)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetMasterSpeed
(JNIEnv *env, jclass clazz, jlong module, jfloat speed){
return fmod_instance->FMUSIC_SetMasterSpeed((FMUSIC_MODULE *) module, speed);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_SetPanSeperation
* Signature: (JF)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1SetPanSeperation
(JNIEnv *env, jclass clazz, jlong module, jfloat pan){
return fmod_instance->FMUSIC_SetPanSeperation((FMUSIC_MODULE *) module, pan);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetName
* Signature: (J)Ljava/lang/String;
*/
JNIEXPORT jstring JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetName
(JNIEnv *env, jclass clazz, jlong module) {
const char * name = fmod_instance->FMUSIC_GetName((FMUSIC_MODULE *) module);
return env->NewStringUTF(name);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetType
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetType
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetType((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetNumOrders
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetNumOrders
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetNumOrders((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetNumPatterns
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetNumPatterns
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetNumPatterns((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetNumInstruments
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetNumInstruments
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetNumInstruments((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetNumSamples
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetNumSamples
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetNumSamples((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetNumChannels
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetNumChannels
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetNumChannels((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetSample
* Signature: (JI)J
*/
JNIEXPORT jlong JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetSample
(JNIEnv *env, jclass clazz, jlong module, jint sampleno){
return (jlong) fmod_instance->FMUSIC_GetSample((FMUSIC_MODULE *) module, sampleno);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetPatternLength
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetPatternLength
(JNIEnv *env, jclass clazz, jlong module, jint orderno){
return fmod_instance->FMUSIC_GetPatternLength((FMUSIC_MODULE *) module, orderno);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_IsFinished
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1IsFinished
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_IsFinished((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_IsPlaying
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1IsPlaying
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_IsPlaying((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetMasterVolume
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetMasterVolume
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetMasterVolume((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetGlobalVolume
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetGlobalVolume
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetGlobalVolume((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetOrder
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetOrder
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetOrder((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetPattern
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetPattern
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetPattern((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetSpeed
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetSpeed
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetSpeed((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetBPM
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetBPM
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetBPM((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetRow
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetRow
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetRow((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetPaused
* Signature: (J)Z
*/
JNIEXPORT jboolean JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetPaused
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetPaused((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetTime
* Signature: (J)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetTime
(JNIEnv *env, jclass clazz, jlong module){
return fmod_instance->FMUSIC_GetTime((FMUSIC_MODULE *) module);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetRealChannel
* Signature: (JI)I
*/
JNIEXPORT jint JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetRealChannel
(JNIEnv *env, jclass clazz, jlong module, jint modchannel){
return fmod_instance->FMUSIC_GetRealChannel((FMUSIC_MODULE *) module, modchannel);
}
/*
* Class: org_lwjgl_fmod3_FMusic
* Method: nFMUSIC_GetUserData
* Signature: (J)Ljava/nio/ByteBuffer;
*/
JNIEXPORT jobject JNICALL Java_org_lwjgl_fmod3_FMusic_nFMUSIC_1GetUserData(JNIEnv *env, jclass clazz, jlong module, jint capacity) {
void* data = (void*) fmod_instance->FMUSIC_GetUserData((FMUSIC_MODULE *) module);
return env->NewDirectByteBuffer(data, capacity);
}
/**
* This attaches the mixer thread as a daemon thread, and sets its
* priority to max value
*/
void attachMixerThread() {
jvm->AttachCurrentThreadAsDaemon((void**) &mixer_jnienv, NULL);
// set to high priority
// ==============================
// get current thread
jclass threadClass = mixer_jnienv->FindClass("java/lang/Thread");
jmethodID currentThread = mixer_jnienv->GetStaticMethodID(threadClass, "currentThread", "()Ljava/lang/Thread;");
jobject myThread = mixer_jnienv->CallStaticObjectMethod(threadClass, currentThread);
// get value of high priority
jfieldID highPriority = mixer_jnienv->GetStaticFieldID(threadClass, "MAX_PRIORITY", "I");
jint highPriorityValue = mixer_jnienv->GetStaticIntField(threadClass, highPriority);
// call set priority
jmethodID priority = mixer_jnienv->GetMethodID(threadClass, "setPriority", "(I)V");
mixer_jnienv->CallVoidMethod(myThread, priority, highPriorityValue);
// ------------------------------
}
// FMusic callbacks
// =======================================
void F_CALLBACKAPI fmusic_instcallback(FMUSIC_MODULE *mod, unsigned char param) {
if (mixer_jnienv == NULL) { attachMixerThread(); }
mixer_jnienv->CallStaticVoidMethod(fmusic, music_instcallback, (jlong) mod, (jint) param);
}
void F_CALLBACKAPI fmusic_ordercallback(FMUSIC_MODULE *mod, unsigned char param) {
if (mixer_jnienv == NULL) { attachMixerThread(); }
mixer_jnienv->CallStaticVoidMethod(fmusic, music_ordercallback, (jlong) mod, (jint) param);
}
void F_CALLBACKAPI fmusic_rowcallback(FMUSIC_MODULE *mod, unsigned char param) {
if (mixer_jnienv == NULL) { attachMixerThread(); }
mixer_jnienv->CallStaticVoidMethod(fmusic, music_rowcallback, (jlong) mod, (jint) param);
}
void F_CALLBACKAPI fmusic_zxxcallback(FMUSIC_MODULE *mod, unsigned char param) {
if (mixer_jnienv == NULL) { attachMixerThread(); }
mixer_jnienv->CallStaticVoidMethod(fmusic, music_zxxcallback, (jlong) mod, (jint) param);
}
// ------------------------------------------