/
ManejadorDeSonido.java
62 lines (50 loc) · 1.68 KB
/
ManejadorDeSonido.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
package com.lumpundform.audio;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.audio.Sound;
import com.badlogic.gdx.files.FileHandle;
import com.badlogic.gdx.utils.Disposable;
import com.lumpundform.audio.SonidosDisponibles;
import com.lumpundform.utilerias.LRUCache;
import com.lumpundform.utilerias.LRUCache.CacheEntryRemovedListener;
public class ManejadorDeSonido implements
CacheEntryRemovedListener<SonidosDisponibles, Sound>, Disposable {
private float volumen = 1f;
private boolean habilitado = true;
private final LRUCache<SonidosDisponibles, Sound> cacheSonido;
public ManejadorDeSonido() {
cacheSonido = new LRUCache<SonidosDisponibles, Sound>(10);
cacheSonido.setEntryRemovedListener(this);
}
public void play(SonidosDisponibles sonido) {
if (!habilitado)
return;
Sound sonidoParaReproducir = cacheSonido.get(sonido);
if (sonidoParaReproducir == null) {
FileHandle archivoDeSonido = Gdx.files.internal(sonido
.getNombreArchivo());
sonidoParaReproducir = Gdx.audio.newSound(archivoDeSonido);
cacheSonido.add(sonido, sonidoParaReproducir);
}
sonidoParaReproducir.play(volumen);
}
public void ajustarVolumen(float volumen) {
if (volumen < 0 || volumen > 1f)
throw new IllegalArgumentException(
"El volumen debe de estar entre 1 y 0.");
this.volumen = volumen;
}
public void habilitado(boolean habilitado) {
this.habilitado = habilitado;
}
@Override
public void dispose() {
for (Sound sonido : cacheSonido.retrieaveAll()) {
sonido.stop();
sonido.dispose();
}
}
@Override
public void notifyEntryRemoved(SonidosDisponibles key, Sound value) {
value.dispose();
}
}