Yeah there's something you need to know about SoundPool: Init well
before playing - that is, you need to know way ahead of time what
sounds you will be using because it doesn't work well to play
immediately after initializing. I think they attempt to initialize
asynchronously or something because I had problems when I tried to
load and play back to back like you're trying there.
When I use SoundPool, I load everything upon creation of the instance
of the game then trigger the plays whenever I need them. Here's my
current code for SoundPoolSoundManager:
public class SoundPoolSoundManager implements SoundManager {
private static final String TAG = "SoundPoolSoundManager";
public static final int SOUND_1 = 1;
private boolean enabled = true;
private Context context;
private SoundPool soundPool;
private HashMap<Integer, Integer> soundPoolMap;
public SoundPoolSoundManager(Context context) {
this.context = context;
}
public void reInit() {
init();
}
public void init() {
if (enabled) {
Log.d(TAG, "Initializing new SoundPool");
//re-init sound pool to work around bugs
release();
soundPool = new SoundPool(SOUNDPOOL_STREAMS,
AudioManager.STREAM_MUSIC, 100);
soundPoolMap = new HashMap<Integer, Integer>();
soundPoolMap.put(SOUND_1, soundPool.load(context,
R.raw.sound1,
1));
Log.d(TAG, "SoundPool initialized");
}
}
public void release() {
if (soundPool != null) {
Log.d(TAG, "Closing SoundPool");
soundPool.release();
soundPool = null;
Log.d(TAG, "SoundPool closed");
return;
}
}
public void playSound(int sound) {
if (soundPool != null) {
Log.d(TAG, "Playing Sound " + sound);
AudioManager mgr = (AudioManager)
context.getSystemService(Context.AUDIO_SERVICE);
int streamVolume =
mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
Integer soundId = soundPoolMap.get(sound);
if (soundId != null) {
soundPool.play(soundPoolMap.get(sound),
streamVolume,
streamVolume, 1, 0, 1f);
}
}
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
On Nov 9, 4:28 am, g1bb <[EMAIL PROTECTED]> wrote:
> Hello,
>
> I posted this on the AndDev forums as well, and I'm somewhat of a
> novice to Java.
>
> I've tried the following code after seeing the snippet
> athttp://www.anddev.org/using_soundpool_instead_of_mediaplayer-t3115.html,
> and I can't seem to get this to work. Here's what I have:
>
> public class OneShotAlarm extends BroadcastReceiver
> {
> private SoundPool soundPool;
> private HashMap<Integer, Integer> soundPoolMap;
>
> @Override
> public void onReceive(Context context, Intent intent)
> {
> soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
> soundPoolMap = new HashMap<Integer, Integer>();
> soundPoolMap.put(1, soundPool.load(context, R.raw.sound1,
> 1));
>
> AudioManager mgr = (AudioManager)
> context.getSystemService(Context.AUDIO_SERVICE);
> int streamVolume =
> mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
> soundPool.play(soundPoolMap.get(1), streamVolume,
> streamVolume, 1, 0, 1f);
> }
>
> }
>
> You'll notice I replaced instaces of 'getContext()' with 'Context', as
> 'getContext()' doesn't seem to be available from where I have this
> code.
>
> Here is my LogCat that's being returned, and no sound is being played:
> 11-08 19:25:23.679: DEBUG/dalvikvm(1822): Trying to load lib /system/
> lib/libsoundpool.so 0x0
> 11-08 19:25:23.759: DEBUG/dalvikvm(1822): Added shared lib /system/lib/
> libsoundpool.so 0x0
> 11-08 19:25:23.819: WARN/SoundPool(1822): sample 1 not READY
>
> Any ideas on this? I've been pulling my hair out all day messing with
> MediaPlayer, then I came across SoundPool and it looked like it would
> be a great alternative.
>
> Thanks in advance.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en
-~----------~----~----~----~------~----~------~--~---