Thanks for the feedback Jason. Switching to OGG definitely fixed my
issue.
The other thing I noticed is that the setLooping call to MediaPlayer
has no effect at all.
If you want looping you just set the metadata tag ANDROID_LOOP=true.

For SFX I'm using SoundPool, which seems to be doing the trick.
Thanks again for the response.

cheers,
kk.

On 23 Sep, 16:44, Jason <jason.poli...@gmail.com> wrote:
> Wow.. that IS weird.
>
> I'm not sure what the problem is here, but there are a couple of
> things I do differently:
>
> 1. Don't use MP3.  Apparently the MP3 decoder on Android is a bit
> crufty.  I was advised to use the OGG format and it works well.  You
> can create OGG files using Audacity (it's 
> free)http://audacity.sourceforge.net/
> 2. I create MediaPlayer instances using a simpler method, specifically
> the following:
>
> A) ALL of my sound files are in resources/raw (not assets)
> B) When I want to load a sound for the game it has it's own
> MediaPlayer instance (same as you)
> C) I create MediaPlayer instances using the following:
>
> MediaPlayer.create(context, resourceId);
>
> where resourceId is something like:
>
> R.raw.bgmusic
>
> This does all the data source creation etc for me, and once the call
> is complete the sound is ready to play
>
> I wonder if the way you are creating the datasource is somehow
> creating a reference to the entire folder?
>
> Also, I don't think you need to create the stream (assuming you don't
> want to use the MediaPlayer.create() method I use).  According to the
> doco the AssetFileDescriptor returned from openFd has a method called
> getFileDescriptor()
>
> On 23 Sep, 07:22, kk <kkostia...@gmail.com> wrote:
>
>
>
> > Hi all,
>
> > I'm having some trouble streaming a looping background track for my
> > game using MediaPlayer.
>
> > I have a bunch of short mp3s in /res/raw that I use as SFX and I play
> > using SoundPool.
> > The SFX playback all works fine...I'm mentioning it because it's
> > relevant as you'll see below.
>
> > The background music track (also an mp3) lives in /assets. The code I
> > use to play this track is at the bottom
> > of this post. Here's what happens:
>
> > Instead of the track looping, once it has finished playing, it starts
> > playing all the SFX from /res/raw in sequence!
> > Then, once all these have finished playing it starts all over again,
> > i.e. playing the background music track
> > and then all the SFX in the same order.
>
> > As if that wasn't weird enough, the behaviour described above only
> > happens in the emulator.
> > When tested on an HTC Tattoo and an HTC Desire it only does the above
> > once. I.e. it plays the background music
> > track, then all the SFX, and then it stops...it doesn't loop.
>
> > Any help greatly appreciated since nobody here has any idea what's
> > going wrong or how to fix it!
>
> > This is developed using:
> > SDK 1.6 API4 revision 3
> > SDK Tools revision 6
>
> > The code I use for the media player playback:
>
> > =====
> > // note: p_theSurfaceView below is my class that extends SurfaceView
> > implements SurfaceHolder.Callback
> > MediaPlayer m_mediaPlayer = new MediaPlayer();
> > FileInputStream l_fis;
> > try
> > {
> >     l_fis =
> > p_theSurfaceView.getContext().getAssets().openFd("bgmusic.mp3").createInput 
> > Stream();
> >     m_mediaPlayer.setDataSource(l_fis.getFD());
> >     // from the docs: It is the caller's responsibility to close the
> > file descriptor.
> >     // from the docs: It is safe to do so as soon as the setDataSource
> > call returns.
> >     l_fis.close();
>
> >     m_mediaPlayer.prepare();
>
> >     m_mediaPlayer.setLooping(true);
> >     m_mediaPlayer.setOnErrorListener(
> >             new MediaPlayer.OnErrorListener() {
> >                 public boolean onError(MediaPlayer p_mp, int p_what,
> > int p_extra)
> >                 {
> >                     Log.e("m_mediaPlayer", "ERROR: MediaPlayer: (" +
> > p_what +") with extra (" + p_extra +")" );
> >                     return false;
> >                 }
> >             });
>
> >     m_mediaPlayer.start();}
>
> > catch (IllegalArgumentException e)
> > {
> >     e.printStackTrace();
> >     m_mediaPlayer = null;
> >     return false;}
>
> > catch (IllegalStateException e)
> > {
> >     e.printStackTrace();
> >     m_mediaPlayer = null;
> >     return false;}
>
> > catch (IOException e)
> > {
> >     e.printStackTrace();
> >     m_mediaPlayer = null;
> >     return false;
>
> > }
>
> > return true;
> > =====
>
> > cheers,
> > kk.

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to