SoundPool Laden van URL

Ik laad mijn mp3 via een pad in de soundpool. Om redenen die ik niet wil bespreken, wil ik niet laden via R.raw ...

Maar ik krijg de foutmelding:

play(int, float, float, int, int, float) in the type SoundPool is not  applicable for the arguments (Object, float, float, int, int, float)

Is er een manier om het object te converteren naar een int ?

SoundPool mySoundPool = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
HashMap mySoundPoolMap = new HashMap(); 
mySoundPoolMap.put(0,  mySoundPool.load("android.resource://com.App.Notifications/raw/myMP3",1));

float streamVolume = mAudioManager.getStreamVolume(AudioManager.STREAM_MUSIC);
streamVolume = streamVolume/mAudioManager.getStreamMaxVolume(AudioManager.STREAM_MUSIC);

mySoundPool.play(mySoundPoolMap.get(0), streamVolume, streamVolume, 1, 0, 1f);
1

1 antwoord

Kijkend naar de SoundPool -documenten zijn er een aantal manieren om iets toe te voegen aan een goede pool:

  1. laden (AssetFileDescriptor afd, int priority)
  2. laden (Context-context, int-resId, int-prioriteit)
  3. laden (reekspad, int-prioriteit)
  4. laden (FileDescriptor fd, lange afstand, lange lengte, int-prioriteit)

Omdat u een gebundelde asset niet wilt laden, kunt u geen van de eerste twee opties gebruiken. Dat betekent dat je optie 3 of 4 moet gebruiken.

De beste optie is om het geluidsbestand waarschijnlijk zelf te downloaden van de url en vervolgens het bestand op te slaan en vervolgens het geluid toe te voegen aan de SoundPool met een FileDescriptor die naar dat bestand verwijst of met behulp van de String die het pad van het bestand bevat.

Update: When you add an item to the SoundPool using load an int is returned. This int is a handle to the sound. Then to play the sound you must use that int to tell the SoundPool which sound you want to play:

Bijvoorbeeld:

sp = new SoundPool();
int handle1 = sp.load(/* add sound 1*/);
int handle2 = sp.load(/* add sound 1*/);

sp.play(handle2, /*other args*/);//play sound 2
1
toegevoegd
je kunt het geluid alleen gebruiken als het klaar is met laden. je moet setOnLoadCompleteListener gebruiken
toegevoegd de auteur android developer, de bron
Ik probeer de string te gebruiken maar de play() wil een int, hoe krijg ik zijn id na mySoundPoolMap.put (0, mySoundPool.load ("android.resource: //com.App.Notifications/r‌ aw/myMP3 " 1));
toegevoegd de auteur panthro, de bron
Ik heb dit geprobeerd, ik krijg geen fouten, maar het geluid speelt nog steeds niet, geen ideeën?
toegevoegd de auteur panthro, de bron
Wanneer u play aanroept, moet u de int -hendel gebruiken die door de aanroep is geretourneerd naar load . Zie mijn update voor een korte uitleg
toegevoegd de auteur slayton, de bron
ja u laadt het geluid waarschijnlijk niet correct. Soundpool kan geluiden van een URL niet laden.
toegevoegd de auteur slayton, de bron