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(); |