/**
* Created on 8 jul. 2004
* @author J�r�me JOUVIE (Jouvieje)
*
* WANT TO CONTACT ME ?
* @author J�r�me JOUVIE (Jouvieje)
* @site http://jerome.jouvie.free.fr/
* @mail jerome.jouvie@gmail.com
*
* ABOUT
* This sample show you how to use FSOUND_STREAMCALLBACK
*/
package org.jouvieje.Fmod.Extras;
import java.nio.ByteBuffer;
import org.jouvieje.Fmod.Fmod;
import org.jouvieje.Fmod.Init;
import org.jouvieje.Fmod.Callbacks.FSOUND_STREAMCALLBACK;
import org.jouvieje.Fmod.Defines.FSOUND_MISC_VALUES;
import org.jouvieje.Fmod.Defines.FSOUND_MODES;
import org.jouvieje.Fmod.Defines.VERSIONS;
import org.jouvieje.Fmod.Enumerations.FSOUND_OUTPUTTYPES;
import org.jouvieje.Fmod.Exceptions.InitException;
import org.jouvieje.Fmod.Misc.Pointer;
import org.jouvieje.Fmod.Structures.FSOUND_STREAM;
import org.jouvieje.libloader.LibLoader;
public class StreamCallback implements FSOUND_OUTPUTTYPES, FSOUND_MISC_VALUES, FSOUND_MODES, VERSIONS {
public static void main(String[] args) {
/*
* NativeFmod Init
*/
try {
Init.loadLibraries();
}
catch(InitException e) {
System.out.println("NativeFmod error! " + e.getMessage());
System.exit(1);
}
/*
* Checking NativeFmodEx version
*/
if(NATIVEFMOD_LIBRARY_VERSION != NATIVEFMOD_JAR_VERSION) {
System.out.println("Error! NativeFmod library version (" + NATIVEFMOD_LIBRARY_VERSION
+ ") is different to jar version (" + NATIVEFMOD_JAR_VERSION + ")");
System.exit(0);
}
/*==================================================*/
/*
* Checking Fmod version
*/
if(Fmod.FSOUND_GetVersion() < FMOD_VERSION) {
System.out.println("Error : You are using the wrong DLL version! You should be using FMOD "+FMOD_VERSION);
System.exit(1);
}
System.out.println("StreamCallback example");
System.out.println("");
// ==========================================================================================
// SELECT OUPUT
// ==========================================================================================
System.out.println("Select Output :");
switch (LibLoader.getPlatform()) {
case LibLoader.PLATFORM_WINDOWS:
System.out.println("1 - Direct Sound");
System.out.println("2 - Windows Multimedia Waveout");
System.out.println("3 - ASIO");
break;
case LibLoader.PLATFORM_LINUX:
System.out.println("1 - OSS - Open Sound System");
System.out.println("2 - ESD - Elightment Sound Daemon");
System.out.println("3 - ALSA 0.9 - Advanced Linux Sound Architecture");
break;
case LibLoader.PLATFORM_MACOSX:
System.out.println("1 - Mac SoundManager");
break;
default:
System.out.println("1 - NoSound");
break;
}
int output;
do {
output = Console.readInt("Your choive = ");
} while(output < 1 || output > 4);
switch (LibLoader.getPlatform()) {
case LibLoader.PLATFORM_WINDOWS:
switch(output) {
case 1: Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); break;
case 2: Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_WINMM); break;
case 3: Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_ASIO); break;
}
break;
case LibLoader.PLATFORM_LINUX:
switch(output) {
case 1: Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_OSS); break;
case 2: Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_ESD); break;
case 3: Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_ALSA); break;
}
break;
case LibLoader.PLATFORM_MACOSX:
Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_MAC);
break;
default:
Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_NOSOUND);
break;
}
System.out.println("");
// ==========================================================================================
// INITIALIZE Fmod
// ==========================================================================================
System.out.print("Initialize Fmod...");
if(!Fmod.FSOUND_Init(44100, 32, 0))
{
System.err.println(Fmod.FMOD_ErrorString(Fmod.FSOUND_GetError()));
System.exit(1);
}
System.out.println("OK");
// ==========================================================================================
// OPEN THE STREAM
// ==========================================================================================
String streamName = "Media/drumloop.wav";
System.out.println("");
System.out.println("Opening the stream "+streamName);
FSOUND_STREAM stream = Fmod.FSOUND_Stream_Open(streamName, FSOUND_NORMAL, 0, 0);
if(stream == null)
{
System.err.println(streamName+" not found !");
System.out.print("Closing Fmod...");
Fmod.FSOUND_Close();
System.out.println("Finish");
System.exit(0);
}
// ==========================================================================================
// ADDING CALLBACKS & PLAYING
// ==========================================================================================
System.out.println("Adding end callback to the stream");
FSOUND_STREAMCALLBACK endCallback = new FSOUND_STREAMCALLBACK() {
public boolean FSOUND_STREAMCALLBACK(FSOUND_STREAM stream, ByteBuffer buff, int len, Pointer userdata)
{
System.out.print("End of the stream. Press any key to exit ...");
return true;
}
};
Fmod.FSOUND_Stream_SetEndCallback(stream, endCallback, null);
System.out.println("Playing the stream");
Fmod.FSOUND_Stream_Play(FSOUND_FREE, stream);
System.out.println("");
Console.readString("Wait while the stream is playing...\n");
System.out.println("");
// ==========================================================================================
// END
// ==========================================================================================
System.out.print("Close the music...");
Fmod.FSOUND_Stream_Stop(stream);
Fmod.FSOUND_Stream_Close(stream);
System.out.println("Finish");
System.out.print("Close Fmod...");
Fmod.FSOUND_Close();
System.out.println("Finish");
System.exit(0);
}
}