2010-12-28 14 views
6

Recentemente ho acquistato un aggiornamento Samsung Galaxy S, Android 2.1 e dopo aver eseguito la mia app ho scoperto che alcuni degli effetti sonori vengono riprodotti due volte contemporaneamente. Questo è strano perché gli effetti sonori che mostrano questo comportamento sembrano casuali - in alcuni casi alcuni suoneranno due volte su altri che suoneranno una volta come previsto. Questo bug non è stato segnalato su alcuna altra piattaforma hardware per la mia app. Ho visto solo un incidente segnalato su questo sito e la persona è passata a utilizzare MediaPlayer, ma voglio davvero ottenere un rimedio per questo.Problema con Soundpool e Samsung Galaxy S

Quando l'applicazione viene eseguita avvia la Soundpool come segue,

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

sound fx sono poi giocato telefonando al sub, (PlaySound è una società globale toggled dalle opzioni utente)

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

} 

Come potete vedere c'è una chiamata di registro che ho usato per vedere quante volte è stato chiamato il sottotitolo anche se questo ha rivelato che quando si verifica il bug la routine viene chiamata solo una volta quando il suono viene ascoltato due volte dal dispositivo.

Ho anche un ultimo sottotitolo che viene chiamato quando la vista della superficie viene distrutta per riordinare.

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

    soundPool.release(); 
    soundPool = null; 

    } 
} 

Qualcun altro ha avuto questo problema, in caso affermativo come lo hai risolto? Qualsiasi aiuto su questo sarebbe molto apprezzato,

Molte grazie in anticipo

+0

Ok i suoi primi giorni, ma il problema sembra essere andato via. I file audio nella cartella raw erano un mix di wav e mp3 - (i formati originali), li ho convertiti in formato OGG e dai test iniziali sembra più stabile. – Steven

risposta

8

Conversione di file audio a OGG nella cartella grezzo sembra aver risolto questo bug - non ho visto una ripetizione di esso da allora.

+1

Sei fortunato - mp3 + soundpool si blocca su alcuni telefoni, funziona su altri. Sono passato anche ad OGG, anche se non si comprimono. – richq

+0

Questo sembra risolvere questo strano bug anche per me ... (wav-> ogg) Grazie! – sstn

+0

I telefoni Android dispongono di decoder hardware per ogg? – slf

Problemi correlati