Soundpool ne joue que les 5 premières secondes du fichier. Pourquoi?

J'utilise Soundpool dans mon application, jusqu'à maintenant cela fonctionne bien, mais j'ai un fichier wav de 10 secondes. Malheureusement, soundpool ne joue que les 5 premières secondes. Comment faire de soundpool pour jouer toute la piste? J'ai convertis wav to – ogg et mp3 encore le même problème. Il ne joue que les 5 premières secondes. Toute aide serait très appréciée.

//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: Peut-être que quelqu'un le trouvera ici et le lira. On dirait que soundpool ne peut pas jouer plus de 5 secondes. C'est son maximum, pour des sons plus longs utilisent MediaPlayer. J'espère que vous ne passerez pas tellement de temps que je l'ai fait)

  • Comment obtenir un Android ListPreference défini dans Xml dont les valeurs sont des nombres entiers?
  • Obtenez le niveau de l'API Android du téléphone en cours d'exécution de ma demande
  • Android: Comprendre le processus d'installation d'APK
  • Media Player appelé dans l'état 0, erreur (-38,0)
  • Est-ce que «Evitez les cadres d'injection de dépendance» dans le Guide de mémoire Android s'applique également à Dagger?
  • App crash sur l'appareil HTC M8 avec OS Lollipop pour appel de service Web
  • SendUserActionEvent () mView == null après avoir cliqué sur le bouton
  • Quand utiliser JNIEXPORT et JNICALL dans Android NDK?
  • Android Studio: Erreur: /android-studio/gradle/gradle-2.4/lib/plugins/gradle-diagnostics-2.4.jar (Aucun fichier ou répertoire de ce type)
  • Comment puis-je savoir si l'écran est activé sur Android?
  • Null FragmentTransaction est passé à TabListener.onTabSelected ()
  • Comment revenir au fragment précédent en appuyant sur le bouton de retour manuelle du fragment individuel?
  • 5 Solutions collect form web for “Soundpool ne joue que les 5 premières secondes du fichier. Pourquoi?”

    Je pense donc que vous avez atteint la limite 1M de SoundPool.

    SoundPool est un code dur de la taille du tampon comme 1M, pour tous les fichiers chargés, stockez au format pcm.

    Donc, il ne faut pas oublier ogg ou wav.

    Nous avons résolu un problème similaire en diminuant notre taux d'échantillonnage des effets * .ogg. Notre taux d'échantillonnage initial était de 44 kHz ~ et seulement 10 secondes de son joué, diminuant jusqu'à 16 kHz pour augmenter la jouabilité à 30 secondes

    Une solution a été trouvée dans cette discussion

    SoundPool conçu pour jouer de courts effets sonores. Pour jouer de la musique (gros fichiers audio), vous devez utiliser MediaPlayer

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

    Cette activité fonctionne pour moi

     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 } } 

    Vous devez vous charger de l'asynchronisme du son et vérifier le cache audio – il peut être débordé.

    Lisez cet article http://www.google.by/url?http://www.vogella.com/articles/AndroidMedia/article.html

    C'est très attentif

    Votre fichier est probablement trop important. Essayez de passer de stéréo à mono, si vous n'avez pas besoin de stéréo de toute façon. Ou essayez de supprimer votre fichier.

    La réduction des fichiers a fonctionné dans mon cas.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.