Ací es mostren les diferències entre la revisió seleccionada i la versió actual de la pàgina.
| Ambdós costats versió prèvia Revisió prèvia Següent revisió | Revisió prèvia | ||
|
libgdx-so [2025/02/27 23:05] enric_mieza_sanchez [Exemple amb AudioDevice] |
libgdx-so [2025/03/02 23:26] (actual) enric_mieza_sanchez [So en libGDX] |
||
|---|---|---|---|
| Línia 1: | Línia 1: | ||
| ====== So en libGDX ====== | ====== So en libGDX ====== | ||
| + | |||
| + | Article de referència: | ||
| Tenim dues opcions per tractar el so en libGDX: | Tenim dues opcions per tractar el so en libGDX: | ||
| - | * La fàcil: emprant els [[https:// | + | * La fàcil: emprant els [[https:// |
| - | * La complicada: emprant [[https:// | + | * La complicada: emprant [[https:// |
| + | |||
| + | Pots veure com utilitzar el sintetitzador de sons [[libGDX_JSYn|JSyn en libGDX]] en aquesta wiki. | ||
| - | {{tag> #FpInfor #Dam #DamMp08 #DamMp08Uf3 # | + | {{tag> #FpInfor #Dam #DamMp08 #DamMp08Uf3 # |
| + | \\ | ||
| ===== Exemple amb AudioDevice ===== | ===== Exemple amb AudioDevice ===== | ||
| Línia 15: | Línia 20: | ||
| <code java> | <code java> | ||
| + | |||
| float freq = 440.0f; | float freq = 440.0f; | ||
| float sampleRate = 44100; | float sampleRate = 44100; | ||
| Línia 21: | Línia 27: | ||
| boolean running = true; | boolean running = true; | ||
| AudioDevice audioDevice; | AudioDevice audioDevice; | ||
| + | AudioThread audioThread; | ||
| public static float[] generaSinusoide(float frequency, float sampleRate, float durationInSeconds) { | public static float[] generaSinusoide(float frequency, float sampleRate, float durationInSeconds) { | ||
| Línia 32: | Línia 39: | ||
| } | } | ||
| - | Thread | + | class AudioThread extends |
| - | float[] sineWave = generaSinusoide(freq, | + | @Override |
| + | public void run() { | ||
| + | // creem sinusoide (un sol cop) | ||
| + | | ||
| - | | + | |
| - | if( sona ) | + | if( sona ) |
| - | audioDevice.writeSamples(sineWave, | + | audioDevice.writeSamples(sineWave, |
| - | else { | + | else { |
| - | // dormim una estona (la mateixa que el fragment d' | + | // dormim una estona (la mateixa que el fragment d' |
| - | try { | + | try { |
| - | Thread.sleep((long) (step*1000) ); | + | Thread.sleep((long) (step*1000) ); |
| - | } catch(Exception e) { | + | } catch(Exception e) { |
| - | e.printStackTrace(); | + | e.printStackTrace(); |
| + | } | ||
| } | } | ||
| } | } | ||
| } | } | ||
| - | }); | + | } |
| @Override | @Override | ||
| public void create() { | public void create() { | ||
| - | | + | |
| - | image = new Texture(" | + | |
| - | // Crear un dispositiu d' | + | // Crear un dispositiu d' |
| audioDevice = Gdx.audio.newAudioDevice((int) sampleRate, true); | audioDevice = Gdx.audio.newAudioDevice((int) sampleRate, true); | ||
| - | // posem en marxa el thread d' | + | |
| - | | + | |
| + | | ||
| + | audioThread.start(); | ||
| } | } | ||
| @Override | @Override | ||
| public void render() { | public void render() { | ||
| - | // GUI | + | // ...activitat GUI... |
| - | ScreenUtils.clear(0.15f, 0.15f, 0.2f, 1f); | + | |
| - | batch.begin(); | + | |
| - | batch.draw(image, 140, 210); | + | |
| - | batch.end(); | + | |
| // al detectar un touch apaguem o engeguem | // al detectar un touch apaguem o engeguem | ||
| Línia 79: | Línia 86: | ||
| // indiquem al thread de so que acabi | // indiquem al thread de so que acabi | ||
| running = false; | running = false; | ||
| + | |||
| // destruim objectes GUI | // destruim objectes GUI | ||
| batch.dispose(); | batch.dispose(); | ||
| image.dispose(); | image.dispose(); | ||
| - | | + | |
| + | | ||
| try { | try { | ||
| - | | + | |
| } catch(Exception e) { | } catch(Exception e) { | ||
| e.printStackTrace(); | e.printStackTrace(); | ||