Sayı

2010-12-28 15 views
6

Kısa bir süre önce bir Samsung Galaxy S, Android 2.1 güncellemesi edindim ve uygulamanızı çalıştırdıktan sonra ses efektlerinin bir kısmının eşzamanlı olarak iki kez çaldığını gördüm. Bu gariptir çünkü bu davranışı sergileyen ses efektleri rastgele görünebilir - bazı durumlarda, bazıları beklendiği gibi oynayacakları diğerlerinin iki katı oynayacaktır. Bu hata, uygulamam için başka bir donanım platformunda bildirilmedi. Bu sitede yalnızca bir kişinin bildirdiği bir olayla karşılaştım ve kişi MediaPlayer'ı kullanmaya başladı, ancak gerçekten bunun için bir çare bulmak istiyorum. Uygulamanın şu şekilde onu Soundpool başlatır çalıştırılırSayı

,

public static final int SOUND_EXPLOSION = 1; 
public static final int SOUND_CLEAR = 2; 
public static final int SOUND_CLICK = 3; 
public static final int SOUND_MAGIC = 4; 
public static final int SOUND_ROCKET = 5; 
public static final int SOUND_MELT = 6; 

private SoundPool soundPool; 
private AudioManager mgr; 
private HashMap<Integer, Integer> soundPoolMap; 

private void initSounds() 
{ 
    soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100); 

    soundPoolMap = new HashMap<Integer, Integer>(); 

    soundPoolMap.put(SOUND_EXPLOSION, soundPool.load(getContext(), R.raw.explosion3, 1)); 
    soundPoolMap.put(SOUND_CLEAR, soundPool.load(getContext(), R.raw.pop, 1)); 
    soundPoolMap.put(SOUND_CLICK, soundPool.load(getContext(), R.raw.click, 1)); 
    soundPoolMap.put(SOUND_MAGIC, soundPool.load(getContext(), R.raw.swoosh, 1)); 
    soundPoolMap.put(SOUND_ROCKET, soundPool.load(getContext(), R.raw.rocket, 1)); 
    soundPoolMap.put(SOUND_MELT, soundPool.load(getContext(), R.raw.melt3, 1)); 
    mgr = (AudioManager)getContext().getSystemService(Context.AUDIO_SERVICE); 
} 

Ses fx sonra aşağıdaki alt arayarak oynanır, (PlaySound kullanıcı seçeneklerine toggled bir küresel)

public void playSound(int sound) 
{ 


if (PlaySound == true) 
{ 
    Log.w("playSound","Playing Sound" + sound);   
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC); 
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);  
    float volume = streamVolumeCurrent/streamVolumeMax; 
    soundPool.play(soundPoolMap.get(sound), volume, volume, 1, 0, 1f); 
} 

} 

Gördüğünüz gibi, alt bölümün kaç kez çağrıldığını gördüğüm bir günlük çağrısı var, bununla birlikte, hata meydana geldiğinde rutinin yalnızca cihazdan iki kez ses duyulduğunda bir kez çağrıldığını ortaya çıkardı.

Ayrıca, yüzey görünümü toparlanma için tahrip edildiğinde çağrılan son bir alt bölüme sahibim.

public void ReleaseSounds() 
{ 
    if (soundPool != null) 
    { 

    soundPool.release(); 
    soundPool = null; 

    } 
} 

Böyle bir sorunu olan başka biri olduysa, nasıl çözdünüz? Bu konuda herhangi bir Yardım büyük ham klasörde OGG ses dosyalarını dönüştürme önceden

+0

İlk günlerini tamamlayın ama sorun ortadan kalkmış gibi görünüyor. Ham klasördeki ses dosyaları wav ve mp3 karışımıydı (orijinal formatlar), o zamandan beri bunları OGG formatına dönüştürdüm ve ilk denemeden daha kararlı görünüyor. – Steven

cevap

8

yılında

çok teşekkür ederiz takdir bu hatayı çözmüş görünüyor olacaktır - O zamandan beri bunun bir tekrarı görmedim.

+1

Şanslısınız - bazı telefonlarda mp3 + soundpool çöküyor, başkaları üzerinde çalışıyor. Ben de sıkıştırmamalarına rağmen OGG'ye geçtim. – richq

+0

Bu benim için de bu garip yanılgıyı çözüyor gibi görünüyor ... (wav-> ogg) Teşekkürler! – sstn

+0

Android telefonlarda ogg için donanım kod çözücüler var mı? – slf