/**
* Created on 15 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
* Class that shows the initialization of Fmod : Output, Mixer, Driver and Fmod Init
*/
package org.jouvieje.Fmod.Extras;
import org.jouvieje.Fmod.Fmod;
import org.jouvieje.Fmod.Init;
import org.jouvieje.Fmod.Defines.FSOUND_CAPS;
import org.jouvieje.Fmod.Defines.VERSIONS;
import org.jouvieje.Fmod.Enumerations.FSOUND_MIXERTYPES;
import org.jouvieje.Fmod.Enumerations.FSOUND_OUTPUTTYPES;
import org.jouvieje.Fmod.Exceptions.InitException;
import org.jouvieje.libloader.LibLoader;
public class OutputDriverMixerInit implements FSOUND_OUTPUTTYPES, FSOUND_CAPS, FSOUND_MIXERTYPES, VERSIONS {
static boolean result = true;
static int choice = -1;
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("This sample will show you how to initialize Fmod.");
Console.readString("Press a key to continue...");
// ==========================================================================================
// SELECT THE OUTPUT
// ==========================================================================================
System.out.println("");
System.out.println("Select Output :");
//Print available outputs
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;
}
//Read the choice of the user
do {
choice = Console.readInt("Your choive = ");
} while(choice < 1 || choice > 4);
//Select the output
switch (LibLoader.getPlatform()) {
case LibLoader.PLATFORM_WINDOWS:
switch(choice) {
case 1: result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); break;
case 2: result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_WINMM); break;
case 3: result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_ASIO); break;
}
break;
case LibLoader.PLATFORM_LINUX:
switch(choice) {
case 1: result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_OSS); break;
case 2: result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_ESD); break;
case 3: result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_ALSA); break;
}
break;
case LibLoader.PLATFORM_MACOSX:
result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_MAC);
break;
default:
result = Fmod.FSOUND_SetOutput(FSOUND_OUTPUT_NOSOUND);
break;
}
//Check
if(!result) {
System.err.println("Output fails : "+Fmod.FMOD_ErrorString(Fmod.FSOUND_GetError()));
System.exit(1);
}
System.out.println("Output selected = "+getOutput());
Console.readString("Press ENTER to continue...");
// ==========================================================================================
// SELECT DRIVER
// ==========================================================================================
System.out.println("");
System.out.println(getOutput()+" Driver list :");
//Print driver information list
for(int i = 0; i <= Fmod.FSOUND_GetNumDrivers() - 1; i++) {
System.out.println(i+" - "+Fmod.FSOUND_GetDriverName(i));
int[] caps = new int[1];
Fmod.FSOUND_GetDriverCaps(i, caps);
if((caps[0] & FSOUND_CAPS_HARDWARE) != 0)
System.out.println(" * Driver supports hardware 3D sound!");
if((caps[0] & FSOUND_CAPS_EAX2) != 0)
System.out.println(" * Driver supports EAX 2 reverb!");
if((caps[0] & FSOUND_CAPS_EAX3) != 0)
System.out.println(" * Driver supports EAX 3 reverb!");
}
do {
choice = Console.readInt("Your choice = ");
} while(choice < 0 || choice > Fmod.FSOUND_GetNumDrivers()-1);
//Select sound card (0 = default)
if(!Fmod.FSOUND_SetDriver(choice)) {
System.err.println("Driver fails : "+Fmod.FMOD_ErrorString(Fmod.FSOUND_GetError()));
System.exit(1);
}
System.out.println("");
System.out.println("Driver = "+Fmod.FSOUND_GetDriverName(Fmod.FSOUND_GetDriver()));
System.out.println("Driver capabilities :");
int[] caps = new int[1];
Fmod.FSOUND_GetDriverCaps(Fmod.FSOUND_GetDriver(), caps);
if(caps[0] == 0)
System.out.println(" -> This driver will support software mode only. It does not properly support 3D sound hardware.");
if((caps[0] & FSOUND_CAPS_HARDWARE) != 0)
System.out.println(" -> Driver supports hardware 3D sound!");
if((caps[0] & FSOUND_CAPS_EAX2) != 0)
System.out.println(" -> Driver supports EAX 2 reverb!");
if((caps[0] & FSOUND_CAPS_EAX3) != 0)
System.out.println(" -> Driver supports EAX 3 reverb!");
System.out.println("");
Console.readString("Press a key to continue...");
// ==========================================================================================
// SELECT MIXER
// ==========================================================================================
System.out.println("");
System.out.println("Choose a Mixer :");
System.out.println("1 - FSOUND_MIXER_QUALITY_AUTODETECT (Mixer will be automaticly choosen by Fmod when the call FSOUND_Init)");
System.out.println("2 - FSOUND_MIXER_QUALITY_FPU");
System.out.println("3 - FSOUND_MIXER_QUALITY_MMXP5");
System.out.println("4 - FSOUND_MIXER_QUALITY_MMXP6");
do {
choice = Console.readInt("Your choive = ");
} while(choice < 1 || choice > 5);
switch(choice) {
case 1: result = Fmod.FSOUND_SetMixer(FSOUND_MIXER_QUALITY_AUTODETECT); break;
case 2: result = Fmod.FSOUND_SetMixer(FSOUND_MIXER_QUALITY_FPU); break;
case 3: result = Fmod.FSOUND_SetMixer(FSOUND_MIXER_QUALITY_MMXP5); break;
case 4: result = Fmod.FSOUND_SetMixer(FSOUND_MIXER_QUALITY_MMXP6); break;
}
if(!result) {
System.err.println("Mixer fail : "+Fmod.FMOD_ErrorString(Fmod.FSOUND_GetError()));
System.exit(1);
}
System.out.println("Mixer selected = "+getMixer());
System.out.println("");
Console.readString("Press a key to continue...");
// ==========================================================================================
// INITIALIZE FMOD
// ==========================================================================================
System.out.println("");
System.out.print("Initialization of Fmod...");
if(!Fmod.FSOUND_Init(44100, 32, 0)) {
System.err.println(Fmod.FMOD_ErrorString(Fmod.FSOUND_GetError()));
System.exit(1);
}
System.out.println("OK");
System.out.println("Output : "+getOutput());
System.out.println("Driver : "+Fmod.FSOUND_GetDriverName(Fmod.FSOUND_GetDriver()));
System.out.println("Mixer : "+getMixer());
// ==========================================================================================
// CLOSE FMOD
// ==========================================================================================
System.out.println("");
System.out.print("Closing Fmod...");
Fmod.FSOUND_Close();
System.out.println("OK");
}
/**
* @return
*/
private static String getOutput() {
int output = Fmod.FSOUND_GetOutput();
if(output == FSOUND_OUTPUT_NOSOUND)
return "NoSound (FSOUND_OUTPUT_NOSOUND)";
else if(output == FSOUND_OUTPUT_WINMM)
return "Windows Multimedia Waveout (FSOUND_OUTPUT_WINMM)";
else if(output == FSOUND_OUTPUT_DSOUND)
return "Direct Sound (FSOUND_OUTPUT_DSOUND)";
else if(output == FSOUND_OUTPUT_ASIO)
return "ASIO (FSOUND_OUTPUT_ASIO)";
else if(output == FSOUND_OUTPUT_OSS)
return "Open Sound System (FSOUND_OUTPUT_OSS)";
else if(output == FSOUND_OUTPUT_ESD)
return "Enlightment Sound Daemon (FSOUND_OUTPUT_ESD)";
else if(output == FSOUND_OUTPUT_ALSA)
return "Advanced Linux Sound Architecture (FSOUND_OUTPUT_ALSA)";
else if(output == FSOUND_OUTPUT_MAC)
return "Mac SoundManager (FSOUND_OUTPUT_MAC)";
else
return "ERROR : invalid output = "+output;
}
private static String getMixer() {
int mixer = Fmod.FSOUND_GetMixer();
if(mixer == FSOUND_MIXER_QUALITY_FPU)
return "FSOUND_MIXER_QUALITY_FPU";
else if(mixer == FSOUND_MIXER_QUALITY_MMXP5)
return "FSOUND_MIXER_QUALITY_MMXP5";
else if(mixer == FSOUND_MIXER_QUALITY_MMXP6)
return "FSOUND_MIXER_QUALITY_MMXP6";
else if(mixer == FSOUND_MIXER_QUALITY_AUTODETECT)
return "FSOUND_MIXER_QUALITY_AUTODETECT";
else if(mixer == FSOUND_MIXER_MAX)
return "FSOUND_MIXER_MAX";
else
return "ERROR : invalid mixer = "+mixer;
}
}