3.5.- Datos basados en el tiempo Flashcards
Aplicaciones multimedia. Procesamiento de datos y control del tiempo (5)
El tiempo de procesamiento de datos es crucial, pero en casos como el control en tiempo real, como la reproducción multimedia, el tiempo de procesamiento tiene un límite máximo.
Aplicaciones multimedia. Archivos de audio y video (5)
Un archivo de audio representa valores de voltaje en relación con el tiempo, traducidos por el sistema de audio a presión de aire en los altavoces. Similarmente, un archivo de vídeo consiste en imágenes que deben proyectarse secuencialmente a una frecuencia mínima para crear la ilusión de movimiento.
Aplicaciones multimedia. Calidad de datos y velocidad de reproducción (5)
A diferencia de la captura de imágenes fijas, la captura de audio o vídeo debe ser lo suficientemente rápida para evitar la pérdida de datos y mantener la calidad.
Librerías multimedia integradas. Hilos (3)
Las librerías multimedia integradas, como MediaPlayer, gestionan procesos como decodificación, cacheado, buffering y reproducción, generando hilos de proceso específicos sin afectar al hilo principal de la aplicación.
Librerías multimedia integradas. NDK (3)
La velocidad de las clases integradas en el sistema puede no ser suficiente, y puede ser necesario recurrir al NDK para evitar pasos innecesarios en los procedimientos convencionales del reproductor.
Archivos multimedia. Tamaño y tiempo (3)
El tiempo influye en el tamaño de los archivos. Por ejemplo, al grabar audio a 8 kbps, el tamaño del archivo aumentará 8 kbits por segundo. Es esencial considerar el espacio de disco disponible en el dispositivo antes de iniciar una grabación.
Archivos multimedia. Limitaciones de tamaño y tiempo (3)
Las librerías multimedia del sistema generalmente permiten establecer límites de tiempo y/o tamaño del archivo resultante de la captación de vídeo o audio.
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Permisos. Manifest (1)
Añadir los permisos y uso de hardware en el manifest. Permisos para grabar audio y para guardar el audio en un archivo de disco externo. Además, se necesita un dispositivo con micrófono.
* <>uses-permission android:name = ”android.permission.RECORD_AUDIO”/>
* <>uses-permission android:name = ”android.permission.WRITE_EXTERNAL_STORAGE”/>
* <>uses-feature android:name = ”android.hardware.microphone” android:required=”true”/>
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Intefaz gráfica. Elemento VideoView (1)
En el layout, añadir dos botones, uno para comenzar y detener la grabación y otro para reproducir el archivo de audio resultado.
* Se define un ConstraintLayout, que es el contenedor principal de la interfaz de usuario.
* Se define un TextView con el ID textView.
* Se define un botón con el ID btnGrabar.
* Se define otro botón con el ID btnReproducir.
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Controlador. Definición clase (1)
Se importan las clases necesarias:
* android.Manifest: Para gestionar los permisos de la aplicación.
* android.media.MediaPlayer: Para reproducir audio.
* android.media.MediaRecorder: Para grabar audio.
* kotlinx.android.synthetic.main.activity_main. : Para permitir el uso de las vistas definidas en el layout activity_main de manera sintética (uso de la propiedad findViewById no es necesario).
* java.io. : Para operaciones de entrada/salida de archivos.
Se define la clase MainActivity, que extiende AppCompatActivity, indicando que es una actividad de Android.
* class MainActivity : AppCompatActivity() { … }:
Se declara una variable booleana isGrabando que se utilizará para controlar si se está grabando audio o no.
* private var isGrabando = false
Se declara una variable grabadora de tipo MediaRecorder y se marca como lateinit, lo que significa que se inicializará más adelante en el código. Esta instancia de MediaRecorder se utilizará para grabar audio.
* private lateinit var grabadora: MediaRecorder:
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Controlador. Método onCreate() (1)
Método para controlar la grabación y reproducción de audio Al hacer clic en el botón btnGrabar, se ejecuta la función onGrabar(). Al hacer clic en el botón btnReproducir, se reproduci el archivo de audio previamente grabado. Además, inicialmente, el botón btnReproducir está desactivado (isEnabled = false).
* Llamar a la implementación de la superclase y establecen el contenido de la actividad utilizando el archivo de diseño activity_main.xml.
* Se asocia un OnClickListener al botón con el ID btnGrabar. Cuando se hace clic en este botón, se ejecutará la función onGrabar().
* Se desactiva el botón con el ID btnReproducir, lo que significa que no estará habilitado para recibir eventos de clic.
* Se asocia un OnClickListener al botón con el ID btnReproducir. Cuando se hace clic en este botón, se ejecutará el código dentro del bloque.
1. Se obtiene la referencia al archivo de salida mediante la llamada a la función getArchivoSalida().
2. Se crea un objeto MediaPlayer.
3. Se establece la fuente de datos para el reproductor de medios utilizando la ruta del archivo obtenido.
4. Se prepara el reproductor (prepare()).
5. Se inicia la reproducción del archivo de audio (start()).
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Controlador. Método onGrabar() (1)
Método que cambia el estado de grabación según el valor actual de isGrabando. Si está grabando, detendrá la grabación y actualiza el texto del botón. Si no está grabando, inicia la grabación y actualiza el texto del botón.
* Se verifica el valor de la variable isGrabando. Si es true, significa que la aplicación está actualmente en modo de grabación.
* Se actualiza el valor de isGrabando a false, indicando que la grabación debe detenerse.
* Se actualiza el texto del botón con el ID btnGrabar a “Grabar”.
* Se llama a la función stopGrabacion().
* Si isGrabando es false, se actualiza el valor a true, indicando que se iniciará la grabación.
* Se actualiza el texto del botón con el ID btnGrabar a “Detener”.
* Se llama a la función startGrabacion().
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Controlador. Método onStart() (1)
Método que se ejecuta al iniciar la actividad. Solicita permisos de grabación y escritura, configura la grabadora de medios (MediaRecorder) para limitar la duración y el tamaño de la grabación, y establece oyentes para manejar eventos de error e información durante la grabación. Además, muestra mensajes y llama a la función onGrabar() en caso de eventos específicos.
* Se llama al método onStart() de la superclase para realizar las operaciones necesarias durante el inicio de la actividad.
* Se verifica si la versión de Android es igual o superior a la versión Marshmallow (Android 6.0). Si es así, se solicitan permisos de grabación de audio (RECORD_AUDIO) y escritura en almacenamiento extern (WRITE_EXTERNAL_STORAGE). La solicitud de permisos se realiza utilizando el método requestPermissions, y el código de solicitud es 6969.
* Se instancia un objeto MediaRecorder y se configuran propiedades como la duración máxima de grabación y el tamaño máximo del archivo.
* Se establece un OnErrorListener para manejar eventos de error en la grabadora. En caso de error, se muestra un mensaje y se llama a la función onGrabar().
* Se establece un OnInfoListener para manejar eventos informativos en la grabadora. Se manejan eventos específicos como la duración máxima alcanzada y el tamaño máximo alcanzado. Dependiendo del evento, se muestra un mensaje y se llama a la función onGrabar().
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Controlador. Método onStop() (1)
El método asegura que los recursos asociados con la grabadora (MediaRecorder) se liberam adecuadamente cuando la actividad entra en el estado de “detenida” (onStop()). Esto es importante para evitar posibles problemas de memoria y para garantizar que la grabadora se libera de manera ordenada antes de que la actividad se detenga por completo.
* Se llama al método release() del objeto MediaRecorder (grabadora). Este método libera los recursos asociados con la grabadora, finalizando cualquier grabación que esté en curso y liberando la instancia de la grabadora. Es importante liberar los recursos de la grabadora cuando ya no se necesitan para evitar posibles pérdidas de memoria y asegurarse de que los recursos se devuelvan correctamente al sistema.
* Se llama al método onStop() de la superclase para realizar las operaciones necesarias durante la parada de la actividad.
3.5.1. Ejemplo: app grabadora de audio
Aplicación grabadora de audio. Controlador. Método startGrabación() (1)
El método se encarga de configurar y comenzar la grabación de audio utilizando un objeto MediaRecorder. Antes de iniciar la grabación, elimina cualquier archivo de grabación anterior. La configuración incluye la especificación de la fuente de audio, el formato de salida y el codificador de audio. La función maneja posibles errores durante la preparación y el inicio de la grabación.
* Se obtiene una referencia al archivo de salida de la grabación llamando a la función getArchivoSalida(). Esta función probablemente devuelve un objeto File que representa el archivo donde se almacena la grabación.
* Se verifica si el archivo de salida ya existe (exists()). Si existe, se elimina el archivo. Esto asegura que se comience una nueva grabación sin sobrescribir un archivo de grabación anterior,
* Se configuran varias propiedades de la grabadora:
1. setOutputFile: Establece la ruta del archivo de salida para la grabación.
2. setAudioSource: Configura la fuente de audio como el micrófono del dispositivo.
3. setOutputFormat: Establece el formato de salida de la grabación como AMR_NB.
4. setAudioEncoder: Configura el codificador de audio como AMR_NB.
5. setAudioChannels: Configura el número de canales de audio (en este caso, 2 canales).
- Se intenta preparar y comenzar la grabación. En caso de que ocurra una excepción durante la preparación o inicio, se muestra un mensaje de error.