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.