libGDX és una biblioteca de codi multiplataforma pensada per a la creació de jocs.
La gestió del 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.
JSyn és una biblioteca de codi per a Java per a la generació de sons sintetitzats. És compatible per a Java en Desktop i per a Android (però no per a iOS).
Referències:
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.
repositories { maven { url "https://jitpack.io" } }
core
, lwjgl3
(desktop) i android
:dependencies { implementation "com.github.philburk:jsyn:latest.release" }
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); } }
/** Launches the desktop (LWJGL3) application. */ public class Lwjgl3Launcher { // ... private static Lwjgl3Application createApplication() { return new Lwjgl3Application(new Main(null), getDefaultConfiguration()); } //...
/** Launches the Android application. */ public class AndroidLauncher extends AndroidApplication { @Override protected void onCreate(Bundle savedInstanceState) { // ... AndroidAudioForJSyn device = new AndroidAudioForJSyn(); initialize(new Main(device), configuration); // ...
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(); } }