studio mediaplayer ejemplo android soundpool

ejemplo - mediaplayer android studio



Soundpool solo reproduce los primeros 5 segundos del archivo. ¿Por qué? (5)

Así que creo que alcanzaste el límite de 1M en SoundPool.

SoundPool es código duro del tamaño del búfer como 1M, para todos los archivos cargados, almacenar en formato pcm.

Por eso no le importa ogg o wav.

Utilizo Soundpool en mi aplicación, hasta ahora funciona bien, pero tengo un archivo wav que dura 10 segundos. Desafortunadamente, el grupo de sonido solo reproduce los primeros 5 segundos. ¿Cómo hacer soundpool para reproducir toda la pista? He convertido wav a - ogg y mp3 sigue siendo el mismo problema. Juega solo los primeros 5 segundos. Cualquier ayuda sería muy apreciada.

//set up audio player mSoundPool = new SoundPool(20, AudioManager.STREAM_MUSIC, 0); //load fx mSoundPoolMap.put(RAW_1_1, mSoundPool.load(this, R.raw.loop1, 1)); //playing soundpool case R.id.button1: mSoundPool.stop(mStream1); mStream1= mSoundPool.play(mSoundPoolMap.get(RAW_1_1), streamVolume, streamVolume, 1, LOOP_1_TIME, 1f);

UPD Last: Tal vez alguien lo encuentre aquí y lo lea. Parece que el soundpool no puede reproducir más de 5 segundos. Es su máximo, para sonidos más largos utiliza MediaPlayer. Espero que no pases tanto tiempo como yo.


Esta actividad me funciona

public class MainActivity extends Activity { private Integer soundID; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); this.setVolumeControlStream(AudioManager.STREAM_MUSIC); // Load the sound AudioManager audioManager = (AudioManager) getSystemService(AUDIO_SERVICE); float actualVolume = (float) audioManager .getStreamVolume(AudioManager.STREAM_MUSIC); float maxVolume = (float) audioManager .getStreamMaxVolume(AudioManager.STREAM_MUSIC); final float volume = actualVolume / maxVolume; SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { @Override public void onLoadComplete(SoundPool soundPool, int sampleId, int status) { soundPool.play(soundID, volume, volume, 1, 0, 1f); try { Thread.sleep(5000); // play twice } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } soundPool.play(soundID, volume, volume, 1, 0, 1f); } }); } }); soundID = soundPool.load(this, R.raw.sound2, 1); //load fx //playing soundpool } }

Debe cargar su sonido de forma asincrónica y verificar el caché de audio; puede desbordarse.

Lee este artículo http://www.google.by/url?http://www.vogella.com/articles/AndroidMedia/article.html

Es muy atenta


Hemos resuelto un problema similar al disminuir nuestra tasa de muestreo de efectos * .ogg. Nuestra frecuencia de muestreo inicial fue de 44 kHz ~ y solo 10 segundos de sonido reproducido, disminuyendo a 16 kHz incrementando la capacidad de reproducción a 30 segundos

La solución se encontró en esta discusión.


SoundPool diseñado para reproducir efectos de sonido cortos. Para reproducir música (archivos de audio grandes) necesitas usar MediaPlayer

// R.raw.audio_file - res/raw/audio_file.mp3 mediaPlayer = MediaPlayer.create(this, R.raw.audio_file); mediaPlayer.start();


Su archivo es probablemente demasiado grande. Intente cambiar de estéreo a mono, si no necesita estéreo de todos modos. O intenta reducir la muestra de tu archivo.

Reduciendo el tamaño de archivo trabajado en mi caso.