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