====== 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.