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.
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
Contenidos
Bueno ahora la estructura de nuestra aplicación sera la siguiente:
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>
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:
Hola soy Alex Céspedes fundador de ANDROFAST, programo algunas cosas por diversión, me gusta aprender cosas nuevas y estoy pendiente de todo lo que tenga que ver con tecnología. Este blog lo cree para todas las personas que tengan dificultades en la programación, para ser sincero nunca fui bueno y reprobé algunos cursos de programación, pero mis ganas de aprender pudieron más. SI YO PUEDO TU PUEDES ANIMO!
NO SIRVE
Por mensajes como el suyo desaniman a aportar conocimiento gratuito en ves de hacer una critica negativa debería decir cual es su error.
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?
Ya se actualizo con los permisos correspondientes, saludos.
debes revisar los permisos para grabar audio, para la nueva version de android no basta con que lo hagas en el manifest,tambien debes ponerlo en codigo
si debes de cambiar en build.gradle
targetSdkVersion (x) por targetSdkVersion 22 y te funcionara, avisa si te sirvio saludos
Si sirve, solo debes de echarle mas coco amigo, Buen tutorial bro
Muchas gracias!
da error en R.menu.menu
y R.id.action:settings
Se elimino esa parte ahora funciona perfectamente.
funciona genial muchas gracias, solo hay que darle permisos y a funcionar pero en versiones antiguas corre sin modificar nada de nada
Ya se actualizo con los permisos correspondientes, saludos.
hola androfast , al darle al boton de reproducir audio , cuando no ahi audio se cierra la app , si grabo algo y le doy anda bien , se podra , al darle al boton reproducir audio no se cierra al no ver audio grabado?