En esta unidad veremos instrucciones trabajar el audio en
android.
Proyecto 0021
En Android es posible incluir audio en las apps tanto archivos
te tamaño pequeño o grandes, hay dos clases que permiten esto:
La clase MediaPlayer
La clase SoundPool
La clase SoundPool es usada para audio corto, tales como sonido
de acción de los botones, el archivo de audio debe de tener como
m´aximo un tamaño de 1Mb.
Por su parte la clase MediaPlayer es para reproducir audio
extenso.
Haremos una app con los los 2 ejemplos un botón para cada caso
para realizar esto necesitamos 2 archivos de audio en formato
mp3 uno que sea corto el tiempo de ejecución y el otro larga
ejecución, el nombre de estos archivos deber´an estar en
minúsculas, puedes seleccionar cualquier sonido desde la pagina :
http://sonidosmp3gratis.com/
ya habiendo descargado los archivos de mp3, podemos renombrarlos
con los palabras corto y largo para distinguirlos
a continuación los copiamos desde este directorio
Y ejecutamos Andriod Studio usando el nombre como proyecto 0021
ya estando en Android Studio pasamos a la sección Andriod y app
> res
ahí hacemos clic con el botón izquierdo del ratón y
seleccionamos New > Directory

Donde crearemos un directorio llamado raw, no debe ser
diferente
ya teniendo el directorio creado hacemos clic con el botón
derecho del ratón y buscamos la opción paste (pegar), que pasara
la ruta de los archivos de audio copiados anteriormente
solo realizamos un clic en el botón OK.
aquí vemos los archivos seleccionados de audio
pasemos al desarrollo de la app, usemos 2 botones en la app
quedando de la siguiente forma:

usamos el ya conocido archivo de string.xml, para crear las
referencias de los botones:
<resources>
<string
name="app_name">proyecto0021</string>
<string name="SoundPool">Sound
Pool</string>
<string name="MediaPlayer">Media
Player</string>
</resources>

agregamos el Id al primer botón (solo sera a este elemento)
pasamos a la parte lógica
la primer parte es definir estas funciones.
package com.example.dell.proyecto0021;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button play;
SoundPool sp;
int Sonido_de_Reproduccion;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
considere las funciones que se importan (Alt - Enter)
la secuencia completa es:
package com.example.dell.proyecto0021;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
Button play;
SoundPool sp;
int Sonido_de_Reproduccion;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play =
(Button)findViewById(R.id.button_play);
sp = new SoundPool(1,
AudioManager.STREAM_MUSIC,1); //los
parametros son
// no. maximo de reproducciones en este caso 1 vez maxStream
// Funcion que realizara AudioManager.STREAM_MUSIC
// la calidad del audio es 1 (muy buena)
Sonido_de_Reproduccion
=sp.load(this,R.raw.corto_resorte,1);// los
parametros son
// this se refiere a un objeto
//R.raw tomar del directorio raw el archivo de audio
corto_resorte
// y la prioridad de ejecucion 1
}
public void
AudioSoundpool(View view){
sp.play(Sonido_de_Reproduccion,1,1,1,0,0);
//los parametros son para el volumen izq. y der.
// prioridad 1 maxima prioridad
// loop las
veces que se repetira 0 es una sola ocacion, si se le pone 1 se
repetira despues de la inicial
//rate es pra qu e se reprodusca de forma normal (2 o mas es mas
rapido)
}
public void
AudioMediaPlayer (View view){
MediaPlayer mp =
MediaPlayer.create(this,R.raw.largo_mision_imposible);
mp.start();
}
}
regresamos a diseño y asociamos los botones a los métodos
ejecute el proyecto y revise el resultado
Proyecto 0022
Reproductor de música
Existen muchos reproductores de música
disponibles para Android, pero para poder aplicar los
conocimientos adquiridos hasta ahora, haremos un reproductor de
música, para ello necesitaremos 2 cosas:
1.- Im´agenes con las figuras de los botones de anterior,
background (fondo), detener, repetir, pausa, 3 portadas para los
fondos de pantalla para identificar cada melodía, repetir,
reproducir y siguiente.
2.- Las melodías (canciones),.
En ambos casos podr´as descargarlos desde este enlace el archivo
comprimido llamado Material.rar
Para este caso solo deber´an tener instalado el Winrar (lo puedes
descargar de www.winrar.com)
Ahí estar´an los dos elementos que requerimos para este proyecto:
para las im´agenes

y para las melodías (canciones):

Comencemos con la aplicación, usemos el métodos para crear
nuestra activity con el nombre proyecto0022.
Copiamos del directorio las im´agenes
Tal como en los casos anteriores debemos "copiar" las im´agenes
al directorio res > drawable > paste

aplicamos en OK
y de nuevo aplicamos en OK

Ahora agregaremos los archivos de audio usando la secuencia de
app > res > New > Directory y se llamara raw


Ya teniendo el directorio regresamos al directorio donde se
encuentran las melodías (canciones), copiamos estos
archivos, regresamos a andriod_studio y pasamos al directorio raw
creado anteriormente, ahí realizamos el proceso de paste.

aplicamos el botón OK

Para continuar pasamos al ´area de activity main y usamos los
atributos y seleccionamos background

Usamos el control de backgorund (...) el cual nos llevara al
menú Drawable > Project y ahí tomamos background

el resultado de esto:

usamos de a paleta de controles Common > ImageView ,
soltamos el control en el ´area del la activity, donde se mostrara
:

la seleccion es en Drawable > Project > portada1

Realizamos el ajuste de la imagen y las distancia con
blueprint.

Regresamos a Desing (diseño), procure que el ajuste de la
imagen se vea algo como la imagen inferior.

Agregamos el nombre a contentDescription (usamos Crtl+ Espacio)
seleccionando @string/app_name

Agregaremos botones para los controles de
reproducción de melodías, esto los agregaremos con la paleta
Common > Button, debemos de hacer esto no con el proceso
anterior de button hay diferencia entre estos 2 controles de
paleta, el que se esta indicando es modificable de forma din´amica,
y hacemos los cambios siguientes: ID btn_play, layout_50dpy
layout_height ser´an 50dp y en TextView text lo dejaremos vacio.

En atributos seleccionamos background, seleccionamos la imagen
"reproducir" para asignar el botón de play y la figura tal como se
ve abajo

el efecto se vera la forma:


el proceso lo repetimos para los botones que se ven en la
imagen siguiente:

puede distribuir los botones inferiores de mejor manera que se
vean de forma correcta en su celular.
Terminando esta parte pasamos al la parte lógica
MainActivity.java para el desarrollo de la app.
package com.example.dell.proyecto0022;
import android.media.MediaPlayer;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
//creacion de objetos y
variables a usar
//botones dinamicos
"cambian de forma cuando se aplican"
Button play_pause,btn_repetir;
MediaPlayer mp;
ImageView iv;
int repetir =2,posicion=0;
MediaPlayer vectormp [] = new MediaPlayer[3];// 3 es porque son 3 melodías, si necesitan mas se
cambia este valor (es un ejemplo pequeño)
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
play_pause =
(Button)findViewById(R.id.btn_play);
btn_repetir =
(Button)findViewById(R.id.btn_repetir);
iv =
(ImageView)findViewById(R.id.imageView);
//se
crea un vector para 3 posiciones
vectormp[0] =
MediaPlayer.create(this,R.raw.race);
vectormp[1] =
MediaPlayer.create(this,R.raw.sound);
vectormp[2] =
MediaPlayer.create(this,R.raw.tea);
}
//metodo para el boton
PlayPause
public void PlayPause (View view){
if(vectormp[posicion].isPlaying()){ //verifica
si esta en reproduccion
vectormp[posicion].pause();
play_pause.setBackgroundResource(R.drawable.reproducir);
Toast.makeText(this,"Pausa",Toast.LENGTH_SHORT).show();
}else{
vectormp[posicion].start(); //si no esta en
reproduccion
play_pause.setBackgroundResource(R.drawable.pausa);
Toast.makeText(this,"Play",Toast.LENGTH_SHORT).show();
} //termina else
}
//metodo para el boton stop
public void Stop(View view){
if(vectormp[posicion] !=
null){
vectormp[posicion].stop();
vectormp[0] = MediaPlayer.create(this,R.raw.race);
vectormp[1] = MediaPlayer.create(this,R.raw.sound);
vectormp[2] = MediaPlayer.create(this,R.raw.tea);
posicion =0;
play_pause.setBackgroundResource(R.drawable.reproducir);
iv.setImageResource(R.drawable.portada1); //activar
la portada
Toast.makeText(this,"Stop",Toast.LENGTH_SHORT).show();
}
}
//metodo repetir una
pista
public void Repetir(View view){
if(repetir ==1){
btn_repetir.setBackgroundResource(R.drawable.no_repetir); //del lado izquierdo esta la figura de repetir
Toast.makeText(this, "No repetir",Toast.LENGTH_SHORT).show();
vectormp[posicion].setLooping(false);
repetir = 1;
}else{
}
}
// metodo para
saltar a la siguiente melodia
public void Siguiente(View view){
if(posicion <
vectormp.length -1){
if(vectormp[posicion].isPlaying()){
vectormp[posicion].stop();
posicion ++;
vectormp[posicion].start();
if(posicion ==0){
iv.setImageResource(R.drawable.portada1);
}else if(posicion ==1){
iv.setImageResource(R.drawable.portada2);
}else if(posicion ==2){
iv.setImageResource(R.drawable.portada3);
}
}else {
posicion++;
if(posicion ==0){
iv.setImageResource(R.drawable.portada1);
}else if(posicion ==1){
iv.setImageResource(R.drawable.portada2);
}else if(posicion ==2){
iv.setImageResource(R.drawable.portada3);
}
}
}else{
Toast.makeText(this,"No hay canciones",Toast.LENGTH_SHORT).show();
}
}
//metodo para regresar a la
cancion anterior
public void Anterior(View view){
if(posicion >=
1){ //verificar que no avance mas o menos de las que
existen
if(vectormp[posicion].isPlaying()){
vectormp[posicion].stop(); //es necesario porque si se esta
reproduciendo una melodia detenerla
vectormp[0] = MediaPlayer.create(this,R.raw.race);
vectormp[1] = MediaPlayer.create(this,R.raw.sound);
vectormp[2] = MediaPlayer.create(this,R.raw.tea);
posicion--; //resta en una posicion la melodia que se esta
reproduciendo
if(posicion ==0){
iv.setImageResource(R.drawable.portada1);
}else if(posicion ==1){
iv.setImageResource(R.drawable.portada2);
}else if(posicion ==2){
iv.setImageResource(R.drawable.portada3);
}
vectormp[posicion].start();
}else{
posicion--;
if(posicion ==0){
iv.setImageResource(R.drawable.portada1);
}else if(posicion ==1){
iv.setImageResource(R.drawable.portada2);
}else if(posicion ==2){
iv.setImageResource(R.drawable.portada3);
}
}
}else{
Toast.makeText(this,"No
hay mas canciones",Toast.LENGTH_SHORT).show();
}
}
}
Por ultimo se asignamos a cada boton su evento en Design



Proyecto 0023
Grabadora de audio
Primeramente necesitamos el material para
trabajo que son im´agenes tal como el ejemplo anterior material_grabacion_audio.rar
Descarga el archivo comprimido y descomprime con
winrar dejarlos en un directorio especifico que ubiques
f´acilmente.
Para realizar este proyecto esto es necesario
usar la clase MediaRecorder se utiliza para grabar Audio y Video
en diferentes formatos que se codifican cuando se almacenan.
Antes de poder iniciar la aplicación el usuario
deber´a de autorizar el proceso de almacenamiento de información ya
que se altera el contenido del sistema, lo cual se presentara
antes de iniciar la grabación y solo sera una sola ocasión, esto
se presentara en 2 pasos, debemos de aceptar los mensajes para que
pueda grabar ya sea la imagen o audio.
Iniciamos seleccionando los archivos que descargamos
anteriormente e indique copiar.

Desplegamos app > res > drawable, al abrirlo, botón
derecho e indicamos pegar



Establecemos el fondo de la app (background)

Agregamos un ImageView
al agregar ImageView nos llevara a la siguiente
ventana, seleccionamos la imagen android

ingresamos la imagen al diseño de la app, y realizamos ajuste
de la ImageView:

Agregamos en contentDescription
Agregamos 2 controles de botones, y ajustamos las distancias.

el botón del lado izquierdo los asignamos en ID btn_rec y del
lado derecho su ID btn_play

establecemos layout_width a 128dp, y layout_height a 128dp, y al
botón btn_rec, se agrega la imagen en background stop_rec,
ajustamos el botón, lo subimos un poco, y borramos el TextView en
Text lo dejamos vacío para retirar el nombre button.

Para el segundo botón usamos layout_width a 128dp, y
layout_height a 128dp, y al botón btn_play, se agrega la imagen en
background reproducir, ajustamos el botón, lo subimos un poco, y
borramos el TextView en Text lo dejamos vacío para retirar el
nombre button.

Modificaremos el archivo colors.xml modificamos los valores de
los colores a los siguientes valores y su resultado en colores se
ve del lado derecho
<?xml version="1.0"
encoding="utf-8"?>
<resources>
<color
name="colorPrimary">#8BC34A</color>
<color
name="colorPrimaryDark">#689F38</color>
<color
name="colorAccent">#8BC34A</color>
</resources> |

|
Ya teniendo esto pasamos a la parte lógica de la app
package com.example.dell.proyecto0023;
import android.Manifest;
import android.content.pm.PackageManager;
import android.media.MediaPlayer;
import android.media.MediaRecorder;
import android.os.Environment;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import java.io.IOException;
public class MainActivity extends AppCompatActivity {
private MediaRecorder grabacion;
private String archivoSalida = null; //es para asignarle un nombre a la pista de audio
private Button btn_recorder;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn_recorder = (Button)
findViewById(R.id.btn_rec);
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 Recorder(View view) {
if (grabacion == null) {
archivoSalida =
Environment.getExternalStorageDirectory().getAbsolutePath() +
"/Grabacion.mp3"; //tambien en formato .3gp
grabacion = new MediaRecorder();
grabacion.setAudioSource(MediaRecorder.AudioSource.MIC);
grabacion.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);// gpp esta relacionado con el formato .mp3
grabacion.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB); //con esto termina el encoder
grabacion.setOutputFile(archivoSalida);
try {
grabacion.prepare();
grabacion.start();
}
catch (IOException e){
}
btn_recorder.setBackgroundResource(R.drawable.rec);
Toast.makeText(getApplicationContext(),"Grabando
...",Toast.LENGTH_SHORT).show();
}else if(grabacion !=
null){ //al presionar el mismo boton se
detiene la grabacion
grabacion.stop();
grabacion.release();
grabacion = null;
btn_recorder.setBackgroundResource(R.drawable.stop_rec);
Toast.makeText(getApplicationContext(),"Grabacion Finalizada
..",Toast.LENGTH_SHORT).show();
}
}
//metodo para reproducir
audio
public void Reproducir(View view){
MediaPlayer mediaPlayer =
new MediaPlayer();
try{
mediaPlayer.setDataSource(archivoSalida);
mediaPlayer.prepare();
}catch (IOException e){
}
mediaPlayer.start();
Toast.makeText(getApplicationContext(),"Reproducir
Audio",Toast.LENGTH_SHORT).show();
}
}
Pasamos ahora a Manifiest y agregamos las lineas siguientes
(Manifiest es para permitir ciertos procesos o escrituras de
archivos en android)

Agregamos lo metodos que se crearon

REFERENCIAS
Proyecto0021
https:https://developer.android.com/guide/topics/media/mediaplayer
http://www.androidcurso.com/index.php/recursos/37-unidad-6-multimedia-y-ciclo-de-vida/168-introduciendo-efectos-de-audio-con-soundpool
https://developer.android.com/reference/android/media/SoundPool
Proyecto0022
https://www.androidpit.es/mejores-reproductores-musica-para-android
https://androidstudiofaqs.com/tutoriales/crear-reproductor-musica-android-studio
https://code.tutsplus.com/es/tutorials/create-a-music-player-on-android-project-setup--mobile-22764
Proyecto0023
http://www.androidcurso.com/index.php/recursos/37-unidad-6-multimedia-y-ciclo-de-vida/169-grabacion-de-audio
https://www.video2brain.com/mx/tutorial/programando-nuestra-app-para-grabar-audio