====== Utilitzant JSyn en libGDX ======
[[jocs libGDX|libGDX]] és una biblioteca de codi multiplataforma pensada per a la creació de jocs.
La gestió del [[libgdx-so|so en libGDX]] és senzilla per a llençar sons registrats en arxius, que és el què es sol necessitar per als jocs. Però si volem generar els nostres son amb alguna llibreria, la cosa es pot complicar.
[[https://www.softsynth.com/jsyn/|JSyn]] és una biblioteca de codi per a Java per a la generació de sons sintetitzats. És compatible per a Java en Desktop i [[https://www.softsynth.com/jsyn/beta/jsyn_on_android.php|per a Android]] (però no per a iOS).
{{tag> #FpInfor #Dam #DamMp08 #DamMp08Uf3 #DamMp08Uf03 jocs games libGDX}}
\\
===== Projecte libGDX amb JSyn =====
Referències:
* Integrar [[https://github.com/philburk/jsyn|JSyn amb Gradle]].
* Integrar [[https://www.softsynth.com/jsyn/beta/jsyn_on_android.php|JSyn amb Android]] (a Març de 2025 funciona). No funciona directament en un libGDX.
Per aconseguir posar en marxa un projecte libGDX i emprar JSyn per al sons cal crear un objecte personalitzat segons la plataforma. Mentre en Java estàndard es fa:
Synthesizer synth = JSyn.createSynthesizer();
En Android cal fer:
Synthesizer synth = JSyn.createSynthesizer(new AndroidAudioForJSyn());
La resta del codi és igual. Per tant, caldrà fer una modificació dels //launchers// de cada plataforma i personalitzar la creació del //synth// amb el //device// concret de la versió Android.
- Crear un [[jocs_libGDX|projecte libGDX]] amb el gdx-liftoff.
- Afegir el repositori maven a Gradle (arxiu general):
repositories {
maven { url "https://jitpack.io" }
}
- Afegir biblioteques als mòduls ''core'', ''lwjgl3'' (desktop) i ''android'':
dependencies {
implementation "com.github.philburk:jsyn:latest.release"
}
- Modificar constructor del joc libGDX:
import com.jsyn.Synthesizer;
import com.jsyn.devices.AudioDeviceManager;
public class Main extends ApplicationAdapter {
private Synthesizer synth;
public Main(AudioDeviceManager device) {
if( device==null ) {
synth = JSyn.createSynthesizer();
} else {
synth = JSyn.createSynthesizer(device);
}
}
- Modificar el //launcher// de la versió //desktop//:
/** Launches the desktop (LWJGL3) application. */
public class Lwjgl3Launcher {
// ...
private static Lwjgl3Application createApplication() {
return new Lwjgl3Application(new Main(null), getDefaultConfiguration());
}
//...
- Modificar el //launcher// de la versió Anrdoid:
/** Launches the Android application. */
public class AndroidLauncher extends AndroidApplication {
@Override
protected void onCreate(Bundle savedInstanceState) {
// ...
AndroidAudioForJSyn device = new AndroidAudioForJSyn();
initialize(new Main(device), configuration);
// ...
- Descarregar l'[[https://github.com/philburk/jsyn/blob/master/android/com/jsyn/devices/android/AndroidAudioForJSyn.java|arxiu AndroidAudioForJSyn.java]] a la carpeta android/src/main/java/com/...
- Implementa el codi comú al mòdul ''core'':
public class Main extends ApplicationAdapter {
//...
LineOut lineOut;
SineOscillator sineOsc;
@Override
public void create() {
// engeguem el sintetizador
synth.start();
// Afegir un oscil·lador sinusoïdal
sineOsc = new SineOscillator();
sineOsc.frequency.set(440); // Freqüència de 440 Hz (La4)
sineOsc.amplitude.set(0.5); // Volum
// Connexió a la sortida d'àudio
lineOut = new LineOut();
synth.add(sineOsc);
synth.add(lineOut);
sineOsc.output.connect(0, lineOut.input, 0);
sineOsc.output.connect(0, lineOut.input, 1);
}
@Override
public void render() {
// al detectar un touch engeguem o apaguem
if( Gdx.input.isTouched() ) {
lineOut.start();
} else {
lineOut.stop();
}
}
- Comprova que funciona tant en Desktop (LWJGL3) com en Android.