audio programozás android - soundpool és médialejátszó

Android Sound Control

Hogyan kell játszani a hangokat SoundPool

Írjon egy kérelmet, hogy fog játszani egy hangot, amikor megérinti a képernyőt. Hozzon létre egy új projekt neve CrazySong, csomag hívás






ru.mobilab.crazysong, hiszen rámutatnak a fő tevékenység CrazySongActivity.

Itt látható a forma main.xml


Nézzük meg a következő lépéseket kell végrehajtania annak érdekében, hogy játszani egy hangfájlt. Először is, van egy olyan objektum létrehozása soundPool. A kivitelező is több paraméter. Az első paraméter megadja a maximális számú egyidejű lejátszható fájlokat. A második paraméter meghatározza, hogy milyen típusú audio stream. A legtöbb esetben a jó ár-érték itt soundPool STREAM_MUSIC, bár lehetséges, hogy más audiót. Céljuk nyilvánvaló. (STREAM_ALARM, STREAM_DTMF, STREAM_NOTIFICATION, STREAM_RING, STREAM_SYSTEM, STREAM_VOICE_CALL). A harmadik paraméter mintavételi frekvencia. Jelenleg ez nem befolyásol semmit, akkor állítsa 0 ide.

Ha már létrehozott egy eszközt a Soundpool segítségével setOnLoadCompleteListener add hozzá OnLoadCompleteListener, amely nyomon követi a letöltés befejeződött. Mivel a paraméterek onLoadComplete metódus SoundPool tárgy vitt minta számát és állapotát a művelet befejeződött. Ha minden jól megy, a status nulla.

játék módszert használjuk az alábbi beállításokat játszik a minta:

  • soundID változó mintaszám. Ez a szám adja vissza eredményeként az eljárás terhelést.
  • leftVolume értéke a bal csatorna mennyiség (0,0-1,0)
  • rightVolume értéke a jobb csatorna mennyiség (0,0-1,0)
  • prioritás menet prioritás (0 - legalacsonyabb prioritás)
  • hurok hányszor ismételje meg a mintát (0 nem ismételjük -1 - hurok)
  • Lejátszási sebesség (változhat 0,5-2,0, 1 - normál sebesség)







Ennek eredményeként a módszer lejátszani száma streamID (vagy 0 a hiba esetén), amelyeket fel lehet használni, hogy ellenőrizzék a lejátszást. Például ezt az értéket használjuk, ha hívja a módszerek szüneteltetését és újraindítását, megáll, setVolume, setLoop. Ha a fájlok maximális számát játszható túllépése esetén a hívás egy másik módszer a játék vezet a befejezése a lejátszás az egyik éppen játszott mintákat.

mi osztály alább látható kódot
csomag ru.mobilab.crazysong;

SoundPool és memóriavesztés

A fórumok vannak olyan jelentések, hogy a használata SoundPool okoz memóriavesztés probléma. Néhány következetes és megbízható információt nem található ebből az alkalomból. Ha nem fog veszíteni több hang, ajánlott programfuttatási

Játék háttérzene Android segítségével MediaPlayer

Ha megy, hogy feltölt egy fájlt az internetről, a lépések némileg eltérő módon. létrehozásához nem kell használni a módszert. Forrás audio adatok által meghatározott eljárás setDataSource, ami után a kell hívni készíteni () metódus a fonál blokkolása, amíg a médialejátszó kész reprodukálni a zenét. prepareAsync () metódus ugyanazt a funkciót egy aszinkron üzemmódban, azaz nem blokkolja az áramlás okozta. Abban az esetben, prepareAsync OnPreparedListener akkor kell használni, hogy meghatározzuk, mikor a MediaPlayer kész a fájl lejátszásához. Vegye figyelembe, hogy ha a létrehozni módszer nem kell készíteni, mert, ahogy nevezik belsőleg létre.

Van még egy sürgető kérdést: hogyan kell meghatározni, hogy a fájl lejátszása alatt? Erre a célra a visszahívás onCompletion. Kötni, hogy a mi médialejátszó meg kell futtatni a következő kódot:

Ez minden. hangvisszaadás nem olyan nehéz téma. Archiválja a projekt mozheteskachat itt.