Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Android / Funny Sounds: Sonidos divertidos para celular

Funny Sounds: Sonidos divertidos para celular

Autor jc mouse domingo, agosto 4, 2013

En este tutorial “Android Bolivia” construiremos nuestra propia aplicaci贸n para molestar a los amigos con sonidos divertidos (pedos, piropos, silbidos, chistes, etc), podremos usarlo en sal贸n de clases, en el recreo, en la universidad, en el trabajo y porque no en la iglesia 馃槈

app funny

Al termino de este tutorial, aprenderemos el uso de archivos de sonido en android, veremos el uso de聽ImageButton en XML y su implementaci贸n en c贸digo, veremos como usar dos LAYOUTS (vistas) para cada posici贸n del tel茅fono (Landscape y Portrait).

Necesitamos.

– IDE Eclipse Indigo con Android instalado y configurado.

– Archivos de sonido MP3, imagenes JPG y PNG

Nivel: Android b谩sico, Java intermedio, XML intermedio

Duraci贸n: 20 minutos

SONIDOS DIVERTIDO PROYECTO ECPLISE

1.Crea un nuevo聽Application Android Project聽con la siguiente configuraci贸n:

Application Name:聽Funny Sounds

Project Name:聽FunnySounds

Package Name:聽com.tutorial.funnysounds

Activity:聽Blank Activity

Activity Name: MainActivity.java

Layout Name:聽activity_main.xml

2. Para este proyecto, haremos uso de im谩genes JPG y PNG 聽para los botones y el fondo de la aplicaci贸n, utilizaremos tambi茅n archivos XML para la animaci贸n de botones como vimos en post anteriores.

resource

Estos archivos, debes colocarlos en la carpeta聽RES/DRAWABLE-MDPI/聽.

Necesitamos 4 archivos de sonido en formato MP3 (latigo,silbido,pedo,yegua) de 1 0 3 segundos de duraci贸n, estos archivos de audio debemos colocarlos en la carpeta ASSETS.

Descargate los archivos de imagen, XML y MP3聽[AQUI]

3. Vamos ahora a crear la interfaz de usuario, abre el archivo activity_main.xml que esta en RES/LAYOUT/ Y reemplaza el c贸digo por:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/sf_bg"
    android:orientation="vertical"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:layout_gravity="center"     
        android:layout_weight="1"
        android:src="@drawable/sflogov" />

    <ImageButton
        android:id="@+id/btnYegua"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:layout_weight="1"
        android:layout_marginBottom="4dp"
        android:background="@drawable/btn_main"
        android:src="@drawable/yegua" />

 <ImageButton
        android:id="@+id/btnPedo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:layout_weight="1"
        android:layout_marginBottom="4dp"
        android:background="@drawable/btn_main"
        android:src="@drawable/pedo" />

    <ImageButton
        android:id="@+id/btnSilbido"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:layout_marginBottom="4dp"
        android:background="@drawable/btn_main"
        android:contentDescription="@null"
        android:src="@drawable/silbido" />

    <ImageButton
        android:id="@+id/btnLatigo"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@drawable/btn_main"
        android:contentDescription="@null"
        android:layout_weight="1"
        android:src="@drawable/latigo" />

</LinearLayout>

Guardamos los cambios y ejecutamos, nuestra aplicaci贸n tiene listo ya la interfaz pero tenemos un peque帽o problema.

Vista Portrait. En esta vista tenemos nuestra aplicaci贸n tal cual la hab铆amos dise帽ado en eclipse.

portrait

Vista Landscape. En la vista Landscape, nuestra aplicaci贸n al tratar de adaptarse a la forma de la pantalla, se a deformado, los botones est谩n muy delgados lo que le da un mal aspecto.

landscape view

Para solucionar este problema tenemos dos soluciones, podr铆amos bloquear la orientaci贸n de la pantalla o utilizar un layout para cada posici贸n, landscape o portrait. A continuaci贸n, llevaremos a cabo la segunda opci贸n.

4. Para hacer uso de un layout para cada posici贸n de la pantalla en android, basta con a帽adir una nueva carpeta “layout-land” para la vista LANDSCAPE a la carpeta RES. De esta forma cuando nuestra aplicaci贸n este en ejecuci贸n, android sabr谩 que layout utilizar seg煤n la orientaci贸n de la pantalla.

En la nueva carpeta聽layout-land, crea un archivo Android XML Layout File (New->Other -> Android ) con el mismo nombre de nuestro layout principal, “activity_main.xml“, eclipse te da varias opciones al crear este archivo, por el momento no nos interesan as铆 que dale FINISH para terminar su creaci贸n.

Nuestro proyecto Android, debe tener el siguiente aspecto:

sound project

El c贸digo XML para el nuevo activity_main.xml es:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/LinearLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@drawable/sf_bg"
    android:gravity="center"
    android:orientation="vertical" >

    <ImageView
        android:id="@+id/imageView1"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:contentDescription="@null"
        android:paddingBottom="10dp"
        android:src="@drawable/sflogoh" />

    <LinearLayout
        android:id="@+id/LinearLayout2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">

            <ImageButton
                android:id="@+id/btnSilbido"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/silbido" />

            <ImageButton
                android:id="@+id/btnLatigo"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/latigo" />

            <ImageButton
                android:id="@+id/btnYegua"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/yegua" />

            <ImageButton
                android:id="@+id/btnPedo"
                android:layout_width="0dip"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:padding="24dp"
                android:layout_margin="4dp"
                android:contentDescription="@null"
                android:background="@drawable/btn_main"
                android:src="@drawable/pedo" />

    </LinearLayout>

</LinearLayout>

Nuestra vista en landscape esta lista.

lands view

5. Para terminar, abrimos el archivo聽MainActivity.java y reemplazamos el c贸digo por:

package com.tutorial.funnysounds;

import java.io.IOException;
import android.media.AudioManager;
import android.media.SoundPool;
import android.os.Bundle;
import android.app.Activity;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.ImageButton;

public class MainActivity extends Activity  implements OnClickListener {

 private ImageButton btn1,btn2,btn3,btn4;
 private SoundPool soundPool;
 private int yeguaSound, pedoSound, silbidoSound, latigoSound = -1;

 @Override
 protected void onCreate(Bundle savedInstanceState) {

  //-->PARA PANTALLA COMPLETA
  requestWindowFeature(Window.FEATURE_NO_TITLE);
  getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
  WindowManager.LayoutParams.FLAG_FULLSCREEN);
  //-->end

  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);

  //botones
  btn1 = (ImageButton) findViewById( R.id.btnYegua );
  btn2 = (ImageButton) findViewById( R.id.btnPedo );
  btn3 = (ImageButton) findViewById( R.id.btnSilbido );
  btn4 = (ImageButton) findViewById( R.id.btnLatigo );
  btn1.setOnClickListener(this);
  btn2.setOnClickListener(this);
  btn3.setOnClickListener(this);
  btn4.setOnClickListener(this);
  //sonido
  setVolumeControlStream(AudioManager.STREAM_MUSIC);
  soundPool = new SoundPool( 20, AudioManager.STREAM_MUSIC, 0);
  try{
   AssetManager assetManager = getAssets();
   AssetFileDescriptor sound1 = assetManager.openFd("yegua.mp3");
   AssetFileDescriptor sound2 = assetManager.openFd("pedo.mp3");
   AssetFileDescriptor sound3 = assetManager.openFd("silbido.mp3");
   AssetFileDescriptor sound4 = assetManager.openFd("latigo.mp3");
   yeguaSound = soundPool.load( sound1 ,1);
   pedoSound = soundPool.load( sound2,1);
   silbidoSound = soundPool.load( sound3,1);
   latigoSound = soundPool.load( sound4,1);
  }
  catch( IOException ex)
  {
   Log.e("Error de sonido", ex.getMessage() );
  }

 }

 @Override
 public boolean onCreateOptionsMenu(Menu menu) {
  // Inflate the menu; this adds items to the action bar if it is present.
  getMenuInflater().inflate(R.menu.main, menu);
  return true;
 }

 @Override
 public void onClick(View arg0) {
  // TODO Auto-generated method stub
  switch ( arg0.getId() ) 
  {
   case R.id.btnYegua  : dale_play( yeguaSound ); break;
   case R.id.btnPedo  : dale_play( pedoSound ); break;
   case R.id.btnSilbido: dale_play( silbidoSound ); break;
   case R.id.btnLatigo : dale_play( latigoSound ); break;
  }
 }

 /**
 * Metodo privado para reproducir sonido
 * @param int id identificador de sonido
 * */
 private void dale_play( int id )
 {
  if( id != -1 )
  {
   soundPool.play( id ,1,1,0,0,1 );
  }
 }

}

Para manejar sonido en android contamos con la API聽SoundPool, con esta api podemos reproducir peque帽os archivos de sonido.

app funny

Codigo Fuente

Proyecto: Funny Sound

IDE: Eclipse Indigo

馃檪

Tags

Si te ha gustado podr铆as compartirlo o dejar un comentario. 隆Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnolog铆a en Bolivia.

Toda la informaci贸n que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si as铆 lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

Tambi茅n Te Podr铆a Interesar

Codigo de Control en Visual Basic | Impuestos Bolivia

Codigo de Control en Visual Basic | Impuestos Bolivia

En esta oportunidad dejamos las fuentes del Generador de C贸digo de Control de Impuestos Bolivia (Facturaci贸n Virtual), e...

Plantilla android de aviso de p谩gina en construcci贸n

Plantilla android de aviso de p谩gina en construcci贸n

Cuando tenemos dominio web pero aun no tenemos el contenido listo es com煤n colocar en su lugar una simple web de aviso q...

TextToSpeech: Convierte texto a voz

TextToSpeech: Convierte texto a voz

TextToSpeech o TTS, es el sintetizador de voz para android, en los celulares inteligentes viene un motor TTS por defecto...

Lector Feed con Java/Rome

Lector Feed con Java/Rome

En este tutorial crearemos un lector de Feeds en Java/netbeans, pero antes debemosa saber que es un Feed, seg煤n Santa Wi...

GridView con imagenes en miniatura

GridView con imagenes en miniatura

Entre las muchas aplicaciones que hay en la playstore de google est谩n las galer铆as de fotos de chicas 馃檪 que tantos nos e...

Matriz de Adyacencia: Representaci贸n de grafos en Java

Matriz de Adyacencia: Representaci贸n de grafos en Java

En este post conoceremos una forma de representar grafos mediante una Matriz de Adyacencia y un ejemplo b谩sico de este e...

Deja un comentario

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

*

Comparte lo que sabes

Categorias

脷ltimas entradas

Si quieres cambiar el nombre de tus atributos sin tener que reescribir c贸digo java por X o Y raz贸n, GSON te permite reno...

Un JList nos permite almacenar objetos en una lista y mostrarlos gr谩ficamente en una serie vertical en el cual el usuari...

El proyecto聽“Java Decompiler”聽tiene como objetivo desarrollar herramientas para descompilar y analizar byte...

En este post aprenderemos lo que es un JSON Web Token, como crear nuestro propio token de acceso y como usarlo en un Ser...

Android Bolivia

Bandera en Alto