^ Back to Top
Seguridad informatica
Aplicaciones Android
Soluciones informaticas
Software de seguridad
App de localización

 

 

Busqueda Personalizada

Codigo útil

                                                           f2 cod

MediaRecorder es una  práctica solución informática con diversas posibilidades, en concreto esta clase de Android se encarga de gestionar las grabaciones de audio y video así como la medición de decibelios a través del dispositivo.
Tenéis una extensa información sobre MediaRecorder en la página oficial de Android Developers.
Ops Pro utiliza MediaRecorder como medidor de decibelios, se trata de una implementación sencilla, os lo mostrare a través de ejemplos:
-Comenzamos instanciando e inicializando  la clase.
public static MediaRecorder mRecorder = null;
-Iniciamos los parámetros del grabador:
            mRecorder = new MediaRecorder();
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
  //No indicamos ningún archivo ya que solo queremos escuchar
            mRecorder.setOutputFile("/dev/null");
Estos parámetros son muy intuitivos, en este caso nos referimos al Micro del dispositivo como punto de entrada de la grabación, formato de salida THREE_GPP y formato de codificación AMR_NB  ( los distintos tipos de formato y su explicación puedes encontrarlo en MediaRecorder Formats.)
El ultimo parámetro (setOutputFile(“/dev/null”) se refiere a la ruta donde se encuentra el archivo donde guardaremos las grabaciones realizadas en este caso no hace falta ya que solo escucharemos.
Una vez creada la clase y configurado los parámetros iniciaremos el servicio, lo haremos a través de un try para ge<stionar los errores en caso de tenerlos.
-Importante el uso del parámetro aquí de:
mRecorder.prepare; Prepara la grabadora para comenzar a capturar y codificar los datos. Este método debe ser llamado después de configurar las fuentes de audio y video, codificadores, formato de archivo, etc., pero antes de start ().
En el párrafo anterior hablamos del método start(); pues bien se trata de un método en el que para facilitar la llamada a la clase MediRecorder incluiremos tanto la creación como la configuración de MediaRecorder.
Al mismo tiempo que existe una clase start (); para iniciar la grabación existe otra para pararla que sería stop ();
Los parámetros básicos de stop () serian:
mRecorder.stop (); (paramos la clase)
            mRecorder.reset (); (reiniciamos los parámetros)
            mRecorder.release (); (Impide que el objeto anteriormente creado vuelva ser reutilizado)            
            mRecorder = null;
Al utilizar MediaRecorder como medidor de decibelios utilizare un método llamado getAmplitude () que también se incluye en la API MediaRecorder y que me servirá para registrar la mayor amplitud del sonido captado desde la última vez que se llamó al método
    public double getAmplitude() {
        if (mRecorder!= null)
            return (mRecorder.getMaxAmplitude ());
        else
            return 0;
    }

                               Vigilante de sueños

Código útil:
    public void start () {
        if (mRecorder == null) {
            //Inicializamos los parametros del grabador
            mRecorder = new MediaRecorder ();
            mRecorder.setAudioSource (MediaRecorder.AudioSource.MIC);
            mRecorder.setOutputFormat (MediaRecorder.OutputFormat.THREE_GPP);
            mRecorder.setAudioEncoder (MediaRecorder.AudioEncoder.AMR_NB);
    
            //No indicamos ningún archivo ya que solo queremos escuchar
            mRecorder.setOutputFile ("/dev/null");    
            try {
                mRecorder.prepare ();
            } catch (IllegalStateException e) {
                Log.e ("error", "IllegalStateException");
            } catch (IOException e) {
                Log.e ("error", "IOException");
                ;}
//Para la escucha
    public void stop() {
        if (mRecorder != null) {
            mRecorder.stop();
            mRecorder.reset();
            mRecorder.release();            
            mRecorder = null;
        }    }    
    //Devuelve la mayor amplitud del sonido captado desde la última vez que se llamo al método
    public double getAmplitude() {
        if (mRecorder!= null)
            return (mRecorder.getMaxAmplitude ());
        else
            return 0;
    }    
            mRecorder.start ();
        }    }
Puedes consultar la página de Android Developers referida a MediaRecorder como apoyo a tus creaciones. MediaRecorder.

Una vez explicado cómo funciona la clase MediaRecorder solo queda incorporarla a nuestro código y ponerla a funcionar.
Lo ideal sería utilizar una tarea asíncrona para no entorpecer el hilo principal de la App.AsynTask.
Desde esta tarea gestionaremos el retorno de getAmplitude (), por ejemplo mostrando los valores devueltos a traves de cualquier control que deseemos (Button,TextView,EditText,etc…..)


Tarea asíncrona Ear:
public class Ear extends AsyncTask<Void, Double, Void> {
            @Override
            protected void onPreExecute(){      
                cu.cancel(true);
                start();
            }
            @Override
            protected Void doInBackground(Void... arg0) {                 
Log.i("okk", "Estamos a la escucha de que el sonido supere el limite");
                if(!isCancelled()){
                do{    
                    cont++;
Log.i("okk", "Limite........"+cont);
SystemClock.sleep(2000); // Intervalo de tiempo entre escuchas…
Double amplitude = 20 * Math.log10(getAmplitude() / 32768.0);
                    publishProgress(amplitude);
                    
                       if(amplitude>-1.0){
Log.i("okk", "Limite superado,gestionamos la notificacion a traves de limiteSuperado...");
                         limite="superado";
                         limiteSuperado(limite); //-6 Limite superado...
                      }   
                    
                }while(i==1); }      
                return null;  
            }
            @SuppressLint("UseValueOf")
            @Override
            protected void onProgressUpdate(Double... values) {
                 Double value =values[0] ;
                     value = new Double(values[0]);
                     String db =String.valueOf(value);
                updateText(db);          
               }
            @Override
            protected void onCancelled() {
                ear= null;            
            }                                                  
            @Override
            protected void onPostExecute(Void result) {
                   stop();   
            }
        }
En cuanto se supere el límite de decibelios entramos en un bucle If que gestionaremos a nuestro antojo, en caso de Ops Pro se manda una notificación al teléfono que escucha para advertirlo de que algo pasa.
El medidor de decibelios forma parte del sistema Vigila sueños de Ops Pro, puedes obtener más información en http://www.poweb-online.es
Un saludo Poweb.

Descarga de Manuales

Manuales.
Descarga manuales de configuracion e instalacion de distintos servidores, tanto Windows como Linux

Mas info ...

Gestiona tu Dominio o Servidor