¿Cómo reproduzco un archivo de audio en Android?

Tengo un código para jugar un .ogg archivo de audio, que descargué de Internet. No tengo errores, así que puedo ejecutarlo, pero luego la aplicación se bloquea:

package play.my.sound;

import android.app.Activity;
import android.media.AudioManager;
import android.media.SoundPool;
import android.media.SoundPool.OnLoadCompleteListener;
import android.os.Bundle;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;

public class PlaySound2Activity extends Activity {
private SoundPool soundPool;
private int soundID;
boolean loaded = false;

/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    View view = findViewById(R.id.textView1);
    view.setOnClickListener((OnClickListener) this);
    // Set the hardware buttons to control the music
    this.setVolumeControlStream(AudioManager.STREAM_MUSIC);
    // Load the sound
    soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0);
    soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() {
        public void onLoadComplete(SoundPool soundPool, int sampleId,
                int status) {
            loaded = true;
        }
    });
    soundID = soundPool.load("sound1.ogg", 1);

}

public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() == MotionEvent.ACTION_DOWN) {
        // Getting the user sound settings
        AudioManager audioManager = (AudioManager) getSystemService    (AUDIO_SERVICE);
        float actualVolume = (float) audioManager
                .getStreamVolume(AudioManager.STREAM_MUSIC);
        float maxVolume = (float) audioManager
                .getStreamMaxVolume(AudioManager.STREAM_MUSIC);
        float volume = actualVolume / maxVolume;
        // Is the sound loaded already?
        if (loaded) {
            soundPool.play(soundID, volume, volume, 1, 0, 1f);
            Log.e("Test", "Played sound");
        }
    }
    return false;
}
}

Creo que tengo dos problemas:

  1. Puse esto en el main.xml archivo:

    
    
    
    
    Y no sé si es correcto.

  2. Pongo el archivo sound1.ogg en el capítulo respecto a la workspace->SoundPlay2 carpeta porque en la carpeta res tuve problemas, y además, intenté ponerla en las dos carpetas res que existen.

Esto es de mi consola:

[2012-01-04 19:38:16 - PlaySound2] Failed to install PlaySound2.apk on device 'emulator-5554': timeout
[2012-01-04 19:38:16 - PlaySound2] Launch canceled!
[2012-01-04 19:47:33 - PlaySound2] Error in an XML file: aborting build.
[2012-01-04 19:52:34 - PlaySound2] res\layout\main.xml:0: error: Resource entry main is already defined.
[2012-01-04 19:52:34 - PlaySound2] res\layout\main.out.xml:0: Originally defined here.
[2012-01-04 19:52:34 - PlaySound2] C:\Users\Natalia\workspace\PlaySound2\res\layout\main.out.xml:1: error: Error parsing XML: no element found

Tomé este ejemplo de "Sonidos de Android - Tutorial". Quiero reproducir un archivo de audio, más específicamente, un .wav archivo.

No sé dónde puedo encontrar información sobre los archivos que están permitidos en la clase MediaPlayer y sus características (duración, frecuencia de muestreo ...) ¿Podría decirme dónde puedo encontrar esto?

preguntado el 04 de enero de 12 a las 14:01

Este es el primer error que tengo en mi registro cat: E / AndroidRuntime (739): java.lang.RuntimeException: No se puede iniciar la actividad ComponentInfo {play.my.sound / play.my.sound.PlaySound2Activity}: java.lang. ClassCastException: play.my.sound.PlaySound2Activity no se puede convertir en android.view.View $ OnClickListener -

¿Por qué no simplemente busca en Google para encontrar respuestas simples? una simple búsqueda de "Formatos de audio admitidos" en Google arrojó desarrollador.android.com/guide/appendix/media-formats.html. desarrollador.android.com/guide/topics/media/mediaplayer.html -

6 Respuestas

Cree una carpeta sin formato en la carpeta res y agregue su archivo a ella. Luego reproduzca el archivo usando

soundID = soundPool.load(R.raw.sound1, 1);

Y también mira esto post para su problema main.xml.

contestado el 23 de mayo de 17 a las 13:05

He escrito soundID = soundPool.load (R.raw.sound1, 1); pero aparece un error hijo que he cambiado por soundID = soundPool.load (esto, R.raw.sound1, 1); y no aparecen errores, sin embargo, cuando lo ejecuto, ¡la aplicación se bloquea! - Natiya

view.setOnClickListener ((OnClickListener) this) ;. esta línea se bloquea porque no ha implementado View.onclicklistner. implementar la interfaz View.onclicklistner para la actividad. - manjusg

consulte el tutorial de donde tomó el código. han implementado Ontouchlistener. Compare su código línea por línea. - manjusg

Soundpool está pensado principalmente para su uso en juegos. Como producir sonidos de explosión en un juego de guerra. Si desea reproducir un archivo o una transmisión. Es mejor que use la clase Mediapalyer o incluso las apis de audio nativas disponibles desde Android 2.3 en adelante. - manjusg

Nunca antes había visto Class SoundPool, sin embargo, recomendaría usar una clase MediaPlayer:

mMediaPlayer = new MediaPlayer(this, R.raw.yourfile);
mMediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.prepare();
mMediaPlayer.start();

Asegúrese de poner el archivo en la carpeta PROJECT / res / raw / (o créelo si no existe)

También hay algo mal con su main.xml. ¿Puedes publicarlo?

Respondido el 04 de enero de 12 a las 19:01

¿Podría decirme qué parte de mi código tengo que eliminar o cambiar para insertar eso? - Natiya

Para ser honesto, si no sabe qué cambiar, no comprende su propio código. Elimine todas las líneas que interactúan con su Soundpool y luego lea esto: desarrollador.android.com/reference/android/media/MediaPlayer.html - Fuerza

Ejemplo para tocar algún tipo de timbre. En la carpeta res en la carpeta sin formato tengo un buzzer.wav

Método para tocar este timbre:

     /**
 * Method to play an alarm sound to signal half time or full time.
 */
private void playAlarm() {
    MediaPlayer mp = MediaPlayer.create(this,
            R.raw.buzzer);
    mp.start();
    mp.setOnCompletionListener(new OnCompletionListener() {

        @Override
        public void onCompletion(MediaPlayer mp) {
            mp.release();
        }

    });

}

Respondido el 04 de enero de 12 a las 19:01

¿Este método es solo para reproducir archivos .wav? ¿Dónde tengo que agregarlo en mi código? ¡¡Gracias!! - Natiya

He hecho algo así, pero he utilizado un archivo .ogg. Cuando introduzco un archivo .wav, no funciona. ¿Hay alguna especificación sobre esto que deba saber? ¡¡Gracias!! - Natiya

primero necesitas guardar sonido1.ogg archivo en src \ main \ res \ raw directorio

instalados de pase directo "sound1.ogg" archivo, pase el archivo de esta manera R.ruido.sonido1

soundID = soundPool.load(R.raw.sound1, 1);

contestado el 02 de mayo de 18 a las 07:05

No es así como se implementa OnClickListener, es una interfaz para implementar en la clase que no se fuerza a la conversión. Hiciste eso como una solución rápida, pero te volviste loco desde que AudioManager se ejecutó primero, así que pensaste que era culpable.

Respondido el 03 de junio de 18 a las 11:06

Para ser honesto, siempre preferiría Mediaplayer sobre cualquier otra API. Después de descargar el archivo, guárdelo en un almacenamiento externo o carpeta sin procesar y reprodúzcalo usando los métodos dados o puede reproducirlo directamente desde Internet.Precaución: tenga cuidado con el almacenamiento en búfer.

Para reproducir audio directamente desde Internet, agregue este código. Nota: versión de Api> = 21 y asegúrese de agregar el permiso de Internet en el manifiesto

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)//This method requires android version more than 20
    public void playSoundFrom_internet(String url) {
        MediaPlayer mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioAttributes(
                new AudioAttributes.Builder()
                        .setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)
                        .setUsage(AudioAttributes.USAGE_MEDIA)
                        .build()
        );
        try {
            mediaPlayer.setDataSource(url);
            mediaPlayer.prepare(); // might take long! (for buffering, etc)
            mediaPlayer.start();
        }catch(IOException E){
            E.printStackTrace();
        }
    }

Para reproducir audio desde la carpeta res:

    public void playSoundFrom_raw(@RawRes int rawId, Context context){
        MediaPlayer mediaPlayer = MediaPlayer.create(context,rawId);
        mediaPlayer.start();
    }

Para reproducir audio desde un archivo. Nota: asegúrese de agregar el permiso de almacenamiento

    public void playSoundFrom_file(String filePath){
        try {
            MediaPlayer mediaPlayer = new MediaPlayer();
            mediaPlayer.setDataSource(filePath);
            mediaPlayer.prepare();
            mediaPlayer.start();
        } catch (IOException e) {
            e.printStackTrace();
        }

    }

Respondido 16 Jul 21, 12:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.