Grabadora de audio en Android con ejemplo

En Android para grabar audio o video, hay una clase integrada llamada MediaRecorder . Esta clase en Android ayuda a grabar fácilmente archivos de video y audio. El marco multimedia de Android brinda soporte integrado para capturar y codificar formatos comunes de audio y video. En Android, para grabar audio, usaremos un micrófono de dispositivo junto con MediaRecorder Class y para grabar video, usaremos la cámara del dispositivo del usuario y MediaRecorder Class. Ahora, en este artículo, veremos la implementación de una grabadora de audio en Android con un ejemplo. 

Métodos importantes de la clase MediaRecorder

Método 

Descripción

establecerFuenteDeAudio() Este método especificará la fuente del audio que se va a grabar.
setAudioEncoder() Este método se utiliza para especificar el codificador de audio.
establecer formato de salida() Este método se utiliza para especificar el formato de salida de nuestro audio.
establecer archivo de salida() Este método se utiliza para especificar la ruta de los archivos de audio grabados que se almacenarán.
deténgase() Este método se utiliza para detener el proceso de grabación. 
comienzo() Este método se utiliza para iniciar el proceso de grabación. 
liberar() Este método se usa para liberar el recurso que está asociado con la clase de grabadora multimedia.

Ejemplo

Ahora estamos creando una aplicación de grabadora de audio simple en la que grabaremos el audio del micrófono del dispositivo de los usuarios y luego almacenaremos esta grabación de audio en el dispositivo de los usuarios. También reproduciremos esta grabación de audio guardada. qué

Audio Recorder in Android

Implementación paso a paso

Paso 1: Crear un nuevo proyecto

Para crear un nuevo proyecto en Android Studio, consulte Cómo crear/iniciar un nuevo proyecto en Android Studio . Tenga en cuenta que seleccione Java como lenguaje de programación. 

Paso 2: agregue permisos en el archivo AndroidManifest.xml

Agregue la siguiente línea en el archivo  AndroidManifest.xml .

XML

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.gtappdevelopers.camviewlibrary">
 
    <!--Permission for recording audio and storage of audio in users device-->
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.STORAGE"/>
 
 
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.CamViewLibrary">
        <activity android:name=".MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
 
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
 
</manifest>

Paso 3: Modifique el archivo colors.xml y strings.xml

A continuación se muestra el código para el  archivo colors.xml

XML

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <color name="purple_200">#0F9D58</color>
    <color name="purple_500">#0F9D58</color>
    <color name="purple_700">#0F9D58</color>
    <color name="teal_200">#FF03DAC5</color>
    <color name="teal_700">#FF018786</color>
    <color name="black">#FF000000</color>
    <color name="white">#FFFFFFFF</color>
    <color name="gray">#A39696</color>
</resources>

A continuación se muestra el código del  archivo strings.xml

XML

<resources>
    <string name="app_name">GFG APP</string>
    <string name="toggle_flash">Toggle Flash</string>
    <string name="action_settings">Settings</string>
    <string name="scanned_data">Scanned Data</string>
    <string name="audio_recorder">Audio Recorder</string>
    <string name="start_recording">Start Recording</string>
    <string name="stop_recording">Stop Recording</string>
    <string name="play_recording">Play Recording</string>
    <string name="stop_playing">Stop Playing</string>
    <string name="status">Status</string>
</resources>

Paso 4: trabajar con el archivo activity_main.xml

Vaya a la aplicación > res > diseño > actividad_principal.xml . A continuación se muestra el código para el archivo activity_main.xml . Se agregan comentarios dentro del código para comprender el código con más detalle. 

XML

<?xml version="1.0" encoding="utf-8"?>
<!--XML code for activity_main.xml-->
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">
 
    <!--Heading Text View-->
    <TextView
        android:id="@+id/txthead"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerHorizontal="true"
        android:text="@string/audio_recorder"
        android:textAlignment="center"
        android:textColor="@color/black"
        android:textSize="30sp" />
 
    <!--This will display the status of our app when
        we will record some audio and play that audio-->
    <TextView
        android:id="@+id/idTVstatus"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="150dp"
        android:text="@string/status"
        android:textAlignment="center"
        android:textSize="18sp" />
 
    <!--Linear Layout for adding textviews
        in horizontal manner-->
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:layout_marginTop="30dp"
        android:orientation="horizontal"
        android:weightSum="4">
 
        <!--Textview to start audio recording
            drawableTop will add above mic image-->
        <TextView
            android:id="@+id/btnRecord"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@color/purple_500"
            android:padding="5dp"
            android:text="@string/start_recording"
            android:textAlignment="center"
            android:textColor="@color/white"
            app:drawableTopCompat="@drawable/ic_start_recording" />
 
        <!--Textview to stop audio recording
            drawableTop will add above mic image-->
        <TextView
            android:id="@+id/btnStop"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@color/purple_500"
            android:padding="5dp"
            android:text="@string/stop_recording"
            android:textAlignment="center"
            android:textColor="@color/white"
            app:drawableTopCompat="@drawable/ic_stop_recording" />
 
        <!--Textview to play audio that is recorded
            drawableTop will add above mic image-->
        <TextView
            android:id="@+id/btnPlay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@color/purple_500"
            android:padding="5dp"
            android:text="@string/play_recording"
            android:textAlignment="center"
            android:textColor="@color/white"
            app:drawableTopCompat="@drawable/ic_play_audio" />
 
        <!--Textview to pause the play of audio recording
            drawableTop will add above mic image-->
        <TextView
            android:id="@+id/btnStopPlay"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_margin="5dp"
            android:layout_weight="1"
            android:background="@color/purple_500"
            android:lines="2"
            android:padding="5dp"
            android:text="@string/stop_playing"
            android:textAlignment="center"
            android:textColor="@color/white"
            app:drawableTopCompat="@drawable/ic_pause_audio" />
 
    </LinearLayout>
</RelativeLayout>

Paso 5: trabajar con el archivo MainActivity.java

Vaya a la aplicación > java > el nombre del paquete de su aplicación > MainActivity.java . A continuación se muestra el código del archivo MainActivity.java . Se agregan comentarios dentro del código para comprender el código con más detalle. 

Java

import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;
 
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
 
import java.io.IOException;
 
import static android.Manifest.permission.RECORD_AUDIO;
import static android.Manifest.permission.WRITE_EXTERNAL_STORAGE;
 
public class MainActivity extends AppCompatActivity {
 
    // Initializing all variables..
    private TextView startTV, stopTV, playTV, stopplayTV, statusTV;
     
    // creating a variable for medi recorder object class.
    private MediaRecorder mRecorder;
     
    // creating a variable for mediaplayer class
    private MediaPlayer mPlayer;
     
    // string variable is created for storing a file name
    private static String mFileName = null;
     
    // constant for storing audio permission
    public static final int REQUEST_AUDIO_PERMISSION_CODE = 1;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
         
        // initialize all variables with their layout items.
        statusTV = findViewById(R.id.idTVstatus);
        startTV = findViewById(R.id.btnRecord);
        stopTV = findViewById(R.id.btnStop);
        playTV = findViewById(R.id.btnPlay);
        stopplayTV = findViewById(R.id.btnStopPlay);
        stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
        playTV.setBackgroundColor(getResources().getColor(R.color.gray));
        stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
 
        startTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // start recording method will
                // start the recording of audio.
                startRecording();
            }
        });
        stopTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // pause Recording method will
                // pause the recording of audio.
                pauseRecording();
 
            }
        });
        playTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // play audio method will play
                // the audio which we have recorded
                playAudio();
            }
        });
        stopplayTV.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                // pause play method will
                // pause the play of audio
                pausePlaying();
            }
        });
    }
 
    private void startRecording() {
        // check permission method is used to check
        // that the user has granted permission
        // to record nd store the audio.
        if (CheckPermissions()) {
             
            // setbackgroundcolor method will change
            // the background color of text view.
            stopTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
            startTV.setBackgroundColor(getResources().getColor(R.color.gray));
            playTV.setBackgroundColor(getResources().getColor(R.color.gray));
            stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
            
            // we are here initializing our filename variable
            // with the path of the recorded audio file.
            mFileName = Environment.getExternalStorageDirectory().getAbsolutePath();
            mFileName += "/AudioRecording.3gp";
             
            // below method is used to initialize
            // the media recorder class
            mRecorder = new MediaRecorder();
             
            // below method is used to set the audio
            // source which we are using a mic.
            mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
             
            // below method is used to set
            // the output format of the audio.
            mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
             
            // below method is used to set the
            // audio encoder for our recorded audio.
            mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
             
            // below method is used to set the
            // output file location for our recorded audio
            mRecorder.setOutputFile(mFileName);
            try {
                // below method will prepare
                // our audio recorder class
                mRecorder.prepare();
            } catch (IOException e) {
                Log.e("TAG", "prepare() failed");
            }
            // start method will start
            // the audio recording.
            mRecorder.start();
            statusTV.setText("Recording Started");
        } else {
            // if audio recording permissions are
            // not granted by user below method will
            // ask for runtime permission for mic and storage.
            RequestPermissions();
        }
    }
 
    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // this method is called when user will
        // grant the permission for audio recording.
        switch (requestCode) {
            case REQUEST_AUDIO_PERMISSION_CODE:
                if (grantResults.length > 0) {
                    boolean permissionToRecord = grantResults[0] == PackageManager.PERMISSION_GRANTED;
                    boolean permissionToStore = grantResults[1] == PackageManager.PERMISSION_GRANTED;
                    if (permissionToRecord && permissionToStore) {
                        Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_LONG).show();
                    } else {
                        Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_LONG).show();
                    }
                }
                break;
        }
    }
 
    public boolean CheckPermissions() {
        // this method is used to check permission
        int result = ContextCompat.checkSelfPermission(getApplicationContext(), WRITE_EXTERNAL_STORAGE);
        int result1 = ContextCompat.checkSelfPermission(getApplicationContext(), RECORD_AUDIO);
        return result == PackageManager.PERMISSION_GRANTED && result1 == PackageManager.PERMISSION_GRANTED;
    }
 
    private void RequestPermissions() {
        // this method is used to request the
        // permission for audio recording and storage.
        ActivityCompat.requestPermissions(MainActivity.this, new String[]{RECORD_AUDIO, WRITE_EXTERNAL_STORAGE}, REQUEST_AUDIO_PERMISSION_CODE);
    }
 
 
    public void playAudio() {
        stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
        startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
        playTV.setBackgroundColor(getResources().getColor(R.color.gray));
        stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
         
        // for playing our recorded audio
        // we are using media player class.
        mPlayer = new MediaPlayer();
        try {
            // below method is used to set the
            // data source which will be our file name
            mPlayer.setDataSource(mFileName);
             
            // below method will prepare our media player
            mPlayer.prepare();
             
            // below method will start our media player.
            mPlayer.start();
            statusTV.setText("Recording Started Playing");
        } catch (IOException e) {
            Log.e("TAG", "prepare() failed");
        }
    }
 
    public void pauseRecording() {
        stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
        startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
        playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
        stopplayTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
         
        // below method will stop
        // the audio recording.
        mRecorder.stop();
         
        // below method will release
        // the media recorder class.
        mRecorder.release();
        mRecorder = null;
        statusTV.setText("Recording Stopped");
    }
 
    public void pausePlaying() {
        // this method will release the media player
        // class and pause the playing of our recorded audio.
        mPlayer.release();
        mPlayer = null;
        stopTV.setBackgroundColor(getResources().getColor(R.color.gray));
        startTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
        playTV.setBackgroundColor(getResources().getColor(R.color.purple_200));
        stopplayTV.setBackgroundColor(getResources().getColor(R.color.gray));
        statusTV.setText("Recording Play Stopped");
    }
}

Todos los elementos de diseño se almacenan en la carpeta de elementos de diseño. Navegue a la aplicación > res > carpeta dibujable para ver todos los dibujables. Ahora ejecute la aplicación en el dispositivo físico para probarla.  

Salida: ejecutar en dispositivo físico

Enlace de GitHub para el proyecto: https://github.com/ChaitanyaMunje/QR_Code_Scanner/tree/Audio_recorder

Publicación traducida automáticamente

Artículo escrito por chaitanyamunje y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

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