Como crear una grabadora de audio en android studio

Buenas hoy veremos como crear una grabadora de voz en android studio de una forma muy sencilla, aclaro que este ejercicio grabara un solo sonido a la vez y luego podrá reproducir todo lo grabado.
así que sin mas rodeos, necesitaremos lo siguiente:

3 botones con los siguientes id
btnPlay
btnStop
btnGrabar

Y les pondremos las siguientes imágenes para embellecer los botones, no creo que  sea necesario explicar que cada imagen representa una acción.

 

grabar

reproducir

detener

Nota Importante:

Este ejercicio fue actualizado el 06/06/2018
Debido a los comentarios y correo de muchos usuarios que no podían incluirle los permisos de ejecución (permission Runtime) decidí actualizar con los permisos y ahora el ejercicio esta totalmente funcional.

Como crear una grabadora de audio en android studio

Bueno ahora la estructura de nuestra aplicación sera la siguiente:


grabadora en android

A continuación les dejo el código del modo gráfico aclaro que las imágenes de los botones que les deja arriba deben agregarlos a la carpeta drawable
Bien aclaremos algo por favor para que nuestra grabadora funciones bien miren el código de abajo y vallan a la parte de los botones, verán que estamos invocando a el Onclick y este a su vez llamara a cada uno de los métodos que declaramos en nuestro MainActivity de esa forma cada botón ejecutara un método que le permitirá grabar, detener, parar.

activity_main

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="      Grabadora de Audio"
        android:id="@+id/textView"
        android:textSize="30dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentRight="true"
        android:layout_alignParentEnd="true"
        android:layout_gravity="center|left"
        android:singleLine="true" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="ANDROFAST"
        android:id="@+id/textView2"
        android:textColor="#ff3eff0f"
        android:textSize="35dp"
        android:layout_below="@+id/textView"
        android:layout_centerHorizontal="true"
        android:singleLine="true" />

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView"
        android:src="@drawable/logo"
        android:layout_below="@+id/textView2"
        android:layout_alignLeft="@+id/textView2"
        android:layout_alignStart="@+id/textView2"
        android:layout_alignRight="@+id/textView2"
        android:layout_alignEnd="@+id/textView2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnStop"
        android:layout_alignTop="@+id/btnGrabar"
        android:layout_centerHorizontal="true"
        android:singleLine="false"
        android:background="@drawable/stop"
        android:onClick="detener" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnPlay"
        android:layout_alignTop="@+id/btnStop"
        android:layout_alignRight="@+id/textView"
        android:layout_alignEnd="@+id/textView"
        android:background="@drawable/play"
        android:onClick="reproducir" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/btnGrabar"
        android:layout_marginTop="59dp"
        android:background="@drawable/grabar"
        android:onClick="grabar"
        android:layout_below="@+id/imageView"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true" />

</RelativeLayout>
Ahora empezamos con la parte de nuestro código:

MainActivity.java

import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.os.Bundle;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.view.View;
import android.widget.Toast;

import java.io.IOException;

public class MainActivity extends Activity {
    private MediaRecorder miGrabacion;
    private String outputFile = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat .requestPermissions(MainActivity.this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.RECORD_AUDIO}, 1000);
        }

    }

    public void grabar(View view) {
        outputFile = Environment.getExternalStorageDirectory().
                getAbsolutePath() + "/Grabacion.3gp";


        miGrabacion = new MediaRecorder();
        miGrabacion.setAudioSource(MediaRecorder.AudioSource.MIC);
        miGrabacion.setOutputFormat(MediaRecorder.OutputFormat.
                THREE_GPP);
        miGrabacion.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
        miGrabacion.setOutputFile(outputFile);


        try {
            miGrabacion.prepare();
            miGrabacion.start();
        } catch (IllegalStateException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Toast.makeText(getApplicationContext(), "La grabación comenzó", Toast.LENGTH_LONG).show();
    }


    public void detener(View view) {

        if (miGrabacion != null) {
            miGrabacion.stop();
            miGrabacion.release();
            miGrabacion = null;
            Toast.makeText(getApplicationContext(), "El audio  grabado con éxito", Toast.LENGTH_LONG).show();
        }

    }

    public void reproducir(View view) {

        MediaPlayer m = new MediaPlayer();

        try {
            m.setDataSource(outputFile);
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            m.prepare();
        } catch (IOException e) {
            e.printStackTrace();
        }

        m.start();
        Toast.makeText(getApplicationContext(), "reproducción de audio", Toast.LENGTH_LONG).show();
    }

}

 

Ahora le toca a nuestro AndroidManifest.xml para darles los permisos correspondientes.

AndroidManifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO" />

 

Y bueno con eso hemos terminado ahora toca, descargar el archivo, para los interesados:

Password: www.androfast.com

 

0

12 pensamientos sobre “Como crear una grabadora de audio en android studio

  1. henry rodriguez

    apenas abre la aplicación se detiene, igualmente muchas gracias.
    He intentado hacer una aplicacion para grabar audio (mas bien para transmitirlo pero primero lo primero) y siempre se detiene la aplicacion cuando le doy al boton que tengo destinado para grabar, alguna sugerencia?

    0
  2. Angel

    funciona genial muchas gracias, solo hay que darle permisos y a funcionar pero en versiones antiguas corre sin modificar nada de nada

    0

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *