0

Ya da sürekli olarak yeniden yerleştirmek zorunda mıyım?Aynı kaynaktan birden fazla ses kaynağını (MediaPlayer) aynı anda çalabilmemin bir yolu var mı?

Bir gemi her patladığında patlama yapan bir ses dosyam var, ancak bazen üç veya daha fazla gemi aynı anda patlayabilir, böylece aynı ses klibinin üst üste gelmesini istiyorum. Yeni örnekler oluşturmazsam bunu yapmayacağımı fark ettim. Kaybettiğim bir şey mi var, yoksa bunu yapmanın tek yolu mu?

//declaration 
private final MediaPlayer[] explosionSound = new MediaPlayer[5]; 

//constructor 
for (int i = 0; i < 5; i++) 
{ 
    explosionSound[i] = MediaPlayer.create(app, R.raw.explosion); 
} 

//in program where I want to use it (when I want to play the sound) 
for (int i = 0; i < 5; i++) 
{ 
    if (!explosionSound[i].isPlaying()) 
    { 
     explosionSound[i].start(); 
     break; 
    } 
} 

//onDestroy() method to release the media 
for (int i = 0; i < 5; i++) 
{ 
    explosionSound[i].release(); 
} 

Ben anonim yenisini örneğini çalıştım ama (Hata kaybolduktan Eğer OnDestroy() yönteminde bırakın iken) onu serbest bırakılması değil şikayet etti. Hemen serbest bırakamam ya da ses hiç çalmıyor. Ben de kendimi 5 patlamayla sınırlamak istemiyorum. Şimdi de bellek sorunları için endişeleniyorum.

Bunu yapmanın daha kolay bir yolu var mı?

cevap

1

MediaPlayer, gerçekten küçük, çakışan ses klipleri sorununu çözmek için değildir. Uzun süren medya, hem ses hem de video için daha fazla.

Özel durumunuz için daha iyi bir araç, kasanız için özel olarak tasarlanmış SoundPool'dur.

+0

SoundPool'u kullanıyorum, API 21 gerektiren AudioAttributes'ı da kullanmalıyım. Şu anda MediaPlayer ile, 8 çalışmamdaki min API'm. SoundPool, API 21 veya üstü olan tek seçenek mi? Uygulamamın eski telefonlarda da çalışmasını istiyorum. –

+0

Tüm SoundPool yöntemleri, çoğudan daha önce API düzeyi 8'den beri kullanılabilir. Bağlandığım dokümanlarda kendiniz için bunu görebilirsiniz. –

İlgili konular