Efectos de sonido del juego en Android
Estoy desarrollando un juego sencillo en Android. Quiero agregar efectos de sonido para cada uno de los eventos táctiles. Sin embargo, tengo agregar efectos de sonido de fondo que se ejecuta a lo largo del juego. Pero cómo puede añadir efecto de sonido diminuto para tocar cualquier personaje del juego. Para una mejor comprensión siguiente es mi diseño de clase: Tengo una actividad principal desde donde como vista llamo a mi clase GameView que extiende surfaceView. Para el sonido bacground Acabo de crear el sonido en mainActivity y luego llamó a que GameView clase como bellow:
public class MainActivity extends Activity { MediaPlayer backgroundMusic; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); backgroundMusic = MediaPlayer.create(MainActivity.this, R.raw.bg); backgroundMusic.setLooping(true); backgroundMusic.setVolume(10.0f, 3.0f); backgroundMusic.start(); setContentView(new GameView(this)); } }
Y el siguiente es mi clase GameView. Quiero añadir efecto de sonido aquí en esta clase onTouchEvent como bellow:
- Android VideoView: no debe silenciar el audio de otras aplicaciones
- Android: Listener para grabar sonido si se produce algún sonido
- ¿Cómo mantener el tamaño de audio, reducido, mientras se graba en android?
- ¿Cambiar el volumen de medios en Android?
- Superpowered SDK: Implementación de SuperpoweredRecorder.h y configuración de rutas de grabación
public class GameView extends SurfaceView { @Override public boolean onTouchEvent(MotionEvent event) { //checking condition I want to give different sound here. } }
Intenté hacerlo como mainActivity (que está usando MediaPlayer.creat ()), pero muestra error. ¿Alguien sabe cómo añadir ese efecto de sonido sobre la base de mi diseño de clase?
- Hacer un bucle de audio en Android
- Android - cómo hacer un clic de botón reproducir un archivo de sonido cada vez que se ha presionado?
- Android obtener frecuencias de sonido en tiempo real?
- Cómo lograr una reproducción de audio sin interrupciones entre bucle en Android
- Android: El uso de los fallos de MIC (a través de setAudioSource)
- Desarrollo de Android: para saber qué aplicación está reproduciendo música actualmente
- Mute Efecto de audio izquierdo / derecho usando sdk Superpowered
- Combinar ambos canales estéreo en mono?
Para efectos de sonido cortos como explosiones, colecciones de monedas, etc, es mejor usar SoundPool
.
Sólo tienes que crear una agrupación de sonidos:
SoundPool sp = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
En Lollipop y más tarde:
AudioAttributes attrs = new AudioAttributes.Builder() .setUsage(AudioAttributes.USAGE_GAME) .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) .build(); SoundPool sp = new SoundPool.Builder() .setMaxStreams(10) .setAudioAttributes(attrs) .build();
Esto crea una piscina de sonido para max. De 10 secuencias de sonido (es decir, cuántos efectos de sonido simultáneos se pueden reproducir en cualquier momento) y utiliza AudioManager.STREAM_MUSIC
como secuencia de sonidos.
Asegúrese de establecer también el control de volumen en su Activity
, de modo que el usuario pueda cambiar el volumen de la secuencia adecuada:
setVolumeControlStream(AudioManager.STREAM_MUSIC);
Que, usted necesita para cargar los efectos de sonido en la piscina y darles sus identificadores:
int soundIds[] = new int[10]; soundIds[0] = sp.load(context, R.raw.your_sound, 1); //rest of sounds goes here
Tienes que pasar un contexto para cargar el método, por lo que o lo hace dentro de su actividad, o obtener es de algún otro lugar.
Y el paso final para jugar el sonido es llamar al método de play
:
sp.play(soundIds[0], 1, 1, 1, 0, 1.0);
Los parámetros son:
-
SoundID un id de sonido devuelto por la función load ()
-
LeftVolumen valor de volumen izquierdo (rango = 0.0 a 1.0)
-
RightVolume volumen de volumen derecho (rango = 0.0 a 1.0)
-
Prioridad de prioridad (0 = prioridad más baja)
-
Modo bucle de bucle (0 = no hay bucle, -1 = bucle para siempre)
-
Tasa de reproducción (1,0 = reproducción normal, rango de 0,5 a 2,0)
Es necesario recordar que SoundPool
no debe utilizar archivos de medios de más de 1 MB, SoundPool
más pequeños sean los archivos, mejor efecto y rendimiento tendrá.
Asegúrese de liberar SoundPool
cuando haya terminado o en Activity.onDestroy
.
sp.release();
Espero que esto ayude
GameView no es una subclase de Contexto. Pase la actividad o el ApplicationContext a Mediaplayer
Sólo haz lo siguiente …
MediaPlayer mp = MediaPlayer.create(getApplicationContext(), R.raw.combo); mp.start();
Lo encontré en Cómo jugar un efecto de sonido en Android
- Caja de AlertDialog de Android WindowManager $ Problema de BadTokenException
- Navegue por el sistema de archivos de Frambuesa Pi desde android vía bluetooth