Проблема с Soundpool и Samsung Galaxy S

недавно я приобрел обновление Samsung Galaxy S, Android 2.1, и после запуска моего приложения я обнаружил, что некоторые звуковые эффекты играют дважды одновременно. Это странно, потому что звуковые эффекты, которые демонстрируют это поведение, кажутся случайными - в некоторых случаях некоторые будут играть дважды, в других они будут играть один раз, как ожидалось. Об этой ошибке не сообщалось ни на одной другой аппаратной платформе для моего приложения. Я видел только один сообщенный инцидент этого на этом сайте, и человек переключился на использование MediaPlayer однако я действительно хочу получить средство от этого.

при запуске приложения он инициирует Soundpool следующим образом,

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 затем воспроизводятся, вызывая следующий sub, (PlaySound является глобальным переключается пользовательскими параметрами)

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

} 

как вы можете видеть, есть вызов журнала, который я использовал, чтобы увидеть, сколько раз суб был вызван, хотя это показало, что при возникновении ошибки процедура вызывается только один раз, когда звук слышен дважды с устройства.

у меня также есть один последний суб, который вызывается, когда вид поверхности уничтожается, чтобы привести в порядок.

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

   soundPool.release();
   soundPool = null;

  }
}

у кого-нибудь еще была эта проблема, если да, то как вы ее решили? Любая помощь в этом была бы очень признательна,

заранее огромное спасибо

1 ответов


преобразование звуковых файлов в OGG в папке raw, похоже, разрешило эту ошибку - с тех пор я не видел ее повторения.