Wednesday, June 29, 2011

0.20 - True gapless playback + wavpack/wma support

I'm headed off to vacation tomorrow so here is a new version before I go.  The main feature I added was true gapless playback for every supported filetype (mp3/aac files need to be encoded properly to support it.. ie with itunes or lame encoder).  You can enable it in the new audio section of the preferences. 

I have gotten 2 different reports about force closes due to libraries failing to load.  This unfortunately is one of the downfalls to the android OS.  Different devices and even different firmware versions of the same device can have different versions of libraries that may be incompatible.  I implemented a work-around if the audioengine library fails to load.  GMMP will just run just with some features disabled.  I will try to come up with a better solution but without getting my hands the actual device.. it will be tough.

Download 0.20 alpha here

edit: I forgot to state that mp3 and aac gapless support depends on the device.  If gmmp cannot find a decoder it can use on the device, playback will still contain gaps in between tracks.

0.20 (06/28/11):
-Gapless playback supported (disabled by default due to potential higher cpu usage)
-Added ability to preload next track to eliminate the pause during track changes
    (incidentally this creates gapless playback for formats like ogg)
-Audioengine: Raised default priority of playback thread THREAD_PRIORITY_URGENT_AUDIO
-Audioengine: Lowered CPU/Memory usage for audioengine playback
-Added audioengine preferences for decode thread priority, playback buffersize,
    gapless playback, and preload next track time
-Updated notification to show the current track instead of "service started"
-File scanner will ignore files with unreadable tags
-Queue Album On Song Play Action option now works with the browser view
-New formats supported: Wavpack (wv) and windows media audio (wma)

-Stop is called when the end of a playlist is reached (and loop/random is disabled)
-Fixed playlist bug if you had the same track in the playlist multiple times
-Audioengine: Cleanup audiotrack properly when stopping
-Audioengine: Fixed some minor seeking issues
-Audioengine: Fixed crash when stopping playback
-Caught exception for when fails to load.  gmmp will still work, but
    functionality may be limited (extra audio formats + gapless)

Tuesday, June 28, 2011

Gapless playback

I was successfully able to implement gapless playback.  I've tested with mp3 and ogg since they are the only formats i have mixed albums in, but the aac code works the same as mp3 so should that work fine and flac and the other formats are naturally gapless so they should work as well.  I am leaving for vacation on wednesday so I will try to wrap up the next release tomorrow

Monday, June 20, 2011

0.19.1 Patch

Fixed some immediate issues that I noticed and were reported to me

Download here

0.19.1 (06/20/11):
-Fixed AAC reader to recognize end of file instead of endlessly looping
-Properly registers audioengine native functions to prevent possible force
    close on startup
-Fixed crash when adding folders to the playlist in browser view
-Tracks are now added/enqueued in the correct order when using the browser view

0.19 - New underlying audio engine adding FLAC, TTA, and APE support

It's been awhile but I am finally happy enough with the current build to release it.  GMMP no longer relies on the built in android mediaplayer to process/decode audio files for playback.  This will open up many new features in the future.  I wrote A LOT of code in c++ for this and integrated 3 libraries (ffmpeg, opencore, and libflac) so I expect here to be some bugs.  I've used 1.6 and 2.2 emulator, the archos 5IT and the HTC thunderbolt to test, so the stability should be fairly good.

Due to patent issues with AAC and MP3, I do not include decoders for these formats because I do not want to get sued.  I do however, search the device to see if the standard decoders are present and use them.  Devices with DSP chips on them may not contain the standard decoders (the archos 5IT has a custom aac decoder specifically for the dsp on board).  In cases like this, gmmp will revert to using the built in mediaplayer for those specific formats.

I am trying a new site to host my downloads.  We'll see if it's any better.
Download 0.19 alpha here

0.19 (06/20/11):
-Added new underlying audioengine to handle the reading/decoding/playback
-Added full support for FLAC, monkey's audio (APE), and trueaudio (TTA)
-Album art finder checks local directory before it tries to download the art
-"Only scan new files" option for the scanner will now skip reading files that
    already exist in the database instead of reading tags and not updating the db
-Very large album art images are now downsampled to save on memory and to ensure
    they load properly
-Deleting the database when scanning will also clear the playlist
-Added clear playlist menu option
-Added license info for FFmpeg, libFLAC, and OpenCORE

-Fixed crash when image download fails
-Fixed duplicate entries when rescanning
-Fixed playlist view to update when a random song is played at the end of the playlist
-Fixed crash when artist had an ' in their name
-Music service will now become a foreground service again if playback is resumed
    by plugging in a headset
-Fixed the reading of m4a tags

My goals for 0.20:
-Gapless playback
-More format support: wavpack, shorten, wma, musepack
-Add support for mono audio tracks
-Add support for album art embedded in the audio file
-Adjustable low level audio settings (buffer size and whatnot if playback is skipping)

Monday, June 13, 2011

m4a issues

Just an FYI.  There seems to be issues with m4a right now.  The files play fine but the scanner is unable to read any tags.. at least with the m4a files I use to test.  If you have a large amount of m4a files, stick with 0.17.  It wont read them but I have gotten reports that things can get pretty sluggish in 0.18.  If you only have mp3/ogg 0.18 should work fine. 

The next update is going to be a big one and it should address the issues with m4a files.  Also I successfully got gapless playback working with ogg tonight.  MP3/M4A are a bit trickier so that may take some time, but I am making good progress.

Thursday, June 9, 2011


I am currently hard at work at replacing the underlying audioplayer that the android provides with my own custom audio engine.  Why you ask? Well there are 3 big reasons

1) Audio format support.  The default player only supports mp3 m4a ogg 3gp midi and wav (flac is supported in 3.1+ now).  What I am working on will support mpc, wma, ape, shn, tta, and wavepack as well.
2) Gapless playback for mp3 / aac.  The way mp3 and aac files are encoded leaves a slight bit of silence at the end of each track.  If they are properly encoded, metadata is added to the files that give you information about this gap so you can account for it.. giving gapless playback.  The default player does not give access or support any of that.
3) There is no way to access the actual binary data of the audio stream with the default player.  Without this data you cannot do gapless playback, crossfading, or add equalizer support (android 2.3+ adds supports for EQ but my app needs to support older versions)

I am hoping to get the initial version finished up within the next week