Trabajando con grabación de sonidos en Xamarin Forms

A menudo utilizamos aplicaciones que reproducen sonidos las cuales nos permiten manejar ciertas acciones como Iniciar, detener, pausar y otras más… Pero.. ¿Qué ocurre si queremos grabar el audio que manipularemos? ¡Es fácil! En este artículo enseñaré cómo hacerlo con el Plugin.AudioRecorder.

Explicaré el tema con los siguientes pasos:

  • Agregando el plugin: Plugin.AudioRecorder
  • Configuración previa
  • Grabar — Detener — Iniciar audio
  • Algunas cosas que debes saber

¿Que necesito para empezar?

✔ Agregar el plugin desde el NuGet Package: Plugin.AudioRecorder:

🔧 Configuración previa

Una vez hayas agregado el Plugin, debes agregar las configuraciones de permission and capabilities que necesita cada plataforma:

 Android
 MODIFY_AUDIO_SETTINGS        WRITE_EXTERNAL_STORAGE
 READ_EXTERNAL_STORAGE        RECORD_AUDIO
Important: Para el acceso al micrófono desde la versión Marshmallow en adelante necesitas otorgar los permisos en tiempo de ejecución.

En IOS 10 en adelante en tu archivo Info.plist agrega el string del permiso: NSMicrophoneUsageDescription.
En este string puedes agregar una breve descripción para el usuario explicando por qué necesita este permiso.

Windows en el archivo Package.appxmanifest agregar las siguientes capabilities: Internet y Microphone

Empecemos!

Inicialicemos la clase AudioRecorderService. Esta clase nos permite obtener y establecer los diferentes tipos de comportamientos que puede tener nuestra grabadora:

Te mostraré algunos de los métodos y propiedades más importantes para mí:

StopRecordingAfterTimeOut establece si la grabación se detendrá después de un tiempo de espera. Obtiene / Establece un valor bool. (Valor por defecto: True)

TotalAudioTimeOut Indica el tiempo de grabación que se tomará como tiempo de espera para detener la grabación. Obtiene / Establece un valor TimeSpan. (Valor por defecto: True)

StopRecordingOnSilence Indica si la grabación de audio en la aplicación podrá detectar un silencio y detenerla. Obtiene / Establece un valor bool. (Valor por defecto: Verdadero).

AudioSilenceTimeOut Indica el tiempo de grabación que se tomará como tiempo de espera para detener la grabación cuando se detecte un silencio. Obtiene / Establece un valor TimeSpanValue.

SilenceThreshold indica un radio de señal para comenzar a identificar el silencio en nuestro grabador, si establecemos la propiedad StopRecordingOnSilence el detector de silencio se puede activar antes del tiempo que deseamos en realidad. Obtiene / Establece un valor float entre 0 y 1. (Valor por defecto: 2).

FilePath establece la ruta de archivo de la grabadora. Si es nulo, se establecerá un archivo temporal (Con el método GetAudioFilePath). Obtiene / Establece un valor string.

IsRecording indica si su aplicación está actualmente grabando. Obtiene un valor bool.

Las propiedades se pueden configurar cuando creamos la instancia o después de crearlas. Veamos un ejemplo de cómo hacerlo:

O


Grabando audio 🎙

Para comenzar a grabar, solo usamos el método StartRecording.

Este Plugin es Task-based API y esa es la razón por la cual utilizaremos wait en el método StartRecording.

Deteniendo el audio🎙 + 🛑

Para comenzar a grabar, solo usamos el método StopRecording.

Este Plugin es Task-based API y esa es la razón por la cual utilizaremos wait en el método StopRecording.


Reproduciendo el audio 🎙 + 🎶

Para reproducir nuestro audio, los primero que debemos de hacer es inicializar la clase AudioPlayer:

En donde inicializaste la clase AudioRecorderService agrega el controlador de eventos FinishedPlaying que indica cómo será el comportamiento cuando termines de reproducir el audio:

En mi caso, agregé un cambio de color en los botones al hacer click en Play:

Después, debemos de que obtener la ruta de nuestro archivo de audio, tenemos dos formas para hacerlo:

GetAudioFilePath obtiene la ruta del archivo desde la memoria temporal.

GetAudioFileStream obtiene la ruta del archivo desde una carpeta de archivos existente.

Finalmente podrás reproducir el sonido!


Algunas cosas que debes saber

⚠ Limitations: El archivo solo se puede guardar con el formato de audio WAV.

Soporta las siguientes plataformas:

API 16 o Superior: Debe estar orientado de Android Framework 8.1 en adelante
Versión 10.0 — Build 15063 en adelante
iOS 7 en adelante

Buena suerte con tu implementación! 😎

Puedes ver un ejemplo en mi GitHub.

Referencias:

https://askxammy.com/working-with-audio-recorder-using-xamarin-forms/