Los sonidos de nuestra app pueden alertar al usuario de un mensaje o un estado especial. Una forma sencilla de generar un sonido es un generador de tonos. Veamos un ejemplo:
val tg = ToneGenerator(AudioManager.STREAM_NOTIFICATION, ToneGenerator.MAX_VOLUME)
override fun onResume() {
super.onResume()
tg.startTone(ToneGenerator.TONE_CDMA_ABBR_ALERT)
}
override fun onStop() {
super.onStop()
tg.release()
}
Creamos una instancia de la clase ToneGenerator, que sonará en el canal de notificaciones con el volumen máximo. Cuando la ventana se hace activa, llama a onResume, donde utilizamos el método startTone del generador con uno de los muchos tipos de sonidos de que dispone. Es una buena práctica liberar los recursos del generador una vez que no los necesitemos, por ejemplo, en onStop. Es imprescindible elegir adecuadamente en qué canal sonará el aviso, pues el sistema de audio de Android enrutará el tono que generemos en ese canal, mezclándolo con todos los sonidos que lleguen de otras fuentes.
Quizá los sonidos disponibles en el generador de tonos sean demasiado simples para el efecto que buscamos. Si necesitamos sonidos más complejos, utilizaremos archivos que hayamos creado con algún editor de audio o descargado de internet. Para reproducir varios sonidos de forma rápida y eficiente, lo mejor es utilizar un SoundPool. Este objeto guardará en memoria los sonidos y los reproducirá cuando se lo pidamos, mezclándolos en el canal correspondiente.