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

Buscar y cargar imagenes de disco

Buscar y cargar imagenes de disco

Cuando se almacenan im谩genes聽en una aplicaci贸n java y se desea聽despu茅s a modo de registro buscar estas y cargarlas en聽al...

Laberinto del Terror (C贸digo Fuente + juego)

Laberinto del Terror (C贸digo Fuente + juego)

El laberinto del terror es un juego en el que haciendo uso del rat贸n y de tu pulso de borracho debes cruzar distintos la...

Rompecabezas [C贸digo Fuente]

Rompecabezas [C贸digo Fuente]

Hace tiempo me pidieron el c贸digo fuente de un juego de Puzzle de Neon Genesis Evangeli贸n, este juego es completo, tiene...

JTable editable con base de datos

JTable editable con base de datos

JTable es un componente swing java que nos permite mostrar datos en una tabla de una base de datos, sin embargo a difere...

Guardar y Leer imagenes en PostgresSQL

Guardar y Leer imagenes en PostgresSQL

En este tutorial veremos una forma para registrar archivos JPG en una base de datos PostgreSQL y recuperarlos para utili...

Control de Stock en Java (Parte 1)

Control de Stock en Java (Parte 1)

Un SGA “Sistema de Gesti贸n de Almacenes”聽 es un programa inform谩tico destinado a gestionar las entradas y sa...

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

En este post construiremos paso a paso un SharedPreferences m谩s conocido en espa帽ol como “Preferencias de Usuario...

La Inteligencia Artificial (AI – Artificial Intelligence) estar谩 presente en casi cada aspecto de nuestra vida聽en...

Una Interface Funcional es una interface que contiene uno y solo un m茅todo abstracto aunque puede contener m茅todos por d...

Un JSpinner es un componente swing de java con una caja de texto y un par de botones que nos permiten incrementar聽 y聽dec...

Android Bolivia

Bandera en Alto