Skip to main content

Guide: Reducing audio skipping and stuttering

Many of the advanced features of gmmp can consume a good amount of cpu so this is a guide for getting playback as smooth as possible.

To start I would like to explain why these features can consume a lot of CPU time.  In order to provide some of the advanced features like gapless playback, equalization, and extra format (flac, wv, wma, ape) support I had to write my own code to read in the audio data, decode it, then send it to the audio device for output. I will refer to this as the "audioengine". Normally you can just use a built in java class (MediaPlayer)provided by google to play an audio track, but the features I mentioned are simply not possible to do with the MediaPlayer class.

As time goes on it seems google is adding more features that make it possible to do some of these things just by simply using the built in API.  Examples of this are equalizer support in 2.3+ and flac support in 3.1+.  GMMP is smart enough to use the built in features when possible, then fall back to the audioengine if needed.  The built in features typically will take advantage of any additional hardware (dsp chips) on the device to reduce the amount of CPU needed.  The audioengine runs purely in software.

The following are settings you can tweak to improve playback.

1)  If you do not care about gapless playback or an equalizer, disable them.  This will force the android MediaPlayer to be used over the AudioEngine for all the supported formats.
Preferences -> Audio -> Uncheck Gapless Playback
Equalizer View->Menu->Toggle EQ (hit until you see Status: Disabled)

2) Adjusting Priority:  There are 2 priority settings you can play around with: Playback Priority and Decoding Priority.  This will cause the playback and decoding to be giving higher cpu priority over other processing running on the device.  I've found some devices actually skip more if the highest priority is used.  Each device is different so you will need to play around with the priorities to find the sweet spot.  Adjusting decoding priority will have much more of an effect than the playback priority.
Preferences -> Audio -> Playback Priority and Decoding Priority

3) Buffer size:  You can adjust how much memory is allocated to buffer the audio data before playback.  If you tried 1 and 2 above and still get skipping, try increasing the buffer size.
Preferences -> Audio -> Playback Buffer Size

Optimizing your equalizer settings:
If you are using the equalizer and are still getting skipping after doing everything suggested above, try the following:

1) Decrease the EQ quality
Preferences -> Audio -> Equalizer -> Quality

2) Lower the amount of bands used
Preferences -> Audio -> Equalizer -> Number of Bands

3) Take advantage of the preamp setting.  The preamp uses next to no CPU time at all so use it.  A band that is set to 0 dB will be skipped during processing.   So set your bands so you have as many at zero as possible.  Instead of settings like this: preamp 0, b1 +3, b2 +2, b3 -1, b4 +2, b5 +2,  use this:  preamp -2, b1 +1, b2 0, b3 -3, b4 0, b5 0.   Only 2 bands need to be processed which saves CPU and the overall sound should be somewhat similar.

Edit:  If you want to use an equalizer but nothing above works and you have 2.3 or higher, you can try using the android EQ instead (Preferences - > Audio  -> Equalizer -> uncheck Use GMMP EQ)  The quality is not nearly as good but the playback should be smoother

Popular posts from this blog

3.4.5 Release / Preview of 3.5

3.4.5 was just uploaded to google play and should be rolling out over the next few days. Changelog: 3.4.5 (2023-08-29): Added Dutch translation Fixed crash editing rules in rule groups Disable IAP donation options if Full Version Unlock has not been purchased to prevent confusion Other changes since 3.4.0: Added Finnish translation and updated other translations Added donation options to the purchase settings area Fixed crash when trying to bookmark / unbookmark currently playing song Fixed Finnish not showing up in the language select Fixed other various crashes Fixed issue where rating or editing tags could potentially split the album Fixed some of the lists/grids not refreshing after changes 3.5 Preview I've been working on some new UI options planned for 3.5.  So far I've finished a new gradient background option for now playing.  There are 2 different styles (linear / radial) with 2 different color sources for each.  One source will take from the theme colors, the other st

3.4.9

More fixes.  Check out discord for info on the 3.5 alpha. 3.4.9 (2024-02-14): Fixed tab navigation returning to the wrong view on screen orientation change Fixed queue not being focused on the playing track sometimes while using tab navigation 3.4.8 (2023-12-21): Fixed backup/restore intent receiver not working with IAP unlock Fixed crash sorting playlist contents

3.4.0

Plans for 3.4 changed a bit when google announced they will be hiding apps on newer versions of android if they dont target the newer sdks.  GMMP always tries to target one of the more recent versions of android, but the unlocker has no need for that since its essentially just a license key.  As of May 1st the unlocker will be hidden on newer versions of android to those who have not already purchased.  Because of this, the focus of 3.4 was to get in app purchases working to allow users to buy the full version after May 1st.  There is a new 'Purchase' section in the settings where the unlocker can now be purchased. One other change in 3.4 is the support for the Android 13+ media controls.  They changed around how to customize them, so that is reflected in a new 'Media Controls' section of the settings. The language can also be changed for just GMMP via the system settings The changelog itself is fairly small but I did a large update of all the libraries / dependencies t