¿Cómo reproduzco un archivo de audio en Android?
Frecuentes
Visto 19,993 veces
18
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:
Puse esto en el
main.xml
archivo:Pongo el archivo
sound1.ogg
en el capítulo respecto a laworkspace->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?
6 Respuestas
5
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
3
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
2
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
1
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
0
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
0
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 java android or haz tu propia pregunta.
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 - Natiya
¿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 - manjusg