charleski
Major Contributor
It appears that streamers based on open-source mpd/ffmpeg code are unable to implement gapless playback of aac files, probably because they aren't correctly handling the metadata tags. I've tested this on the latest builds of both moode and Volumio, and both skip between tracks.
I've uploaded a bunch of test tracks that you can find here:
There are two metadata methods by which gapless aac playback can be implemented, the original Apple scheme using itunsMPB tags, and the ISO method using elst/sdst tags. The files that I've uploaded use two different encoders (qaac and dBPoweramp/FDK), both of which allow the tagging method to be specified ('gm' refers to encoding via qaac using the --gapless-mode option as specified in its docs). No matter which encoder I use or which gapless mode tagging is implemented, they all fail, with an audible tick between tracks because ffmpeg isn't skipping the priming samples.
Looking at mpd's log I see ffmpeg throwing a "ffmpeg/aac: Could not update timestamps for skipped samples" warning, but only when playing the files encoded by qaac. This is thrown at this point in the ffmpeg code. ffprobe seems to show that ffmpeg is recognising both the itunsMPB and ISO tags, so I don't know if this is an ffmpeg issue or because mpd isn't properly setting the pkt_timebase. Since the files encoded with dBPoweramp/FDK don't result in this warning but still skip between tracks I'm not sure of the relevance of this warning.
All these files play with perfect gapless performance in foobar2k, and I never had this problem with Audirvana when I was using a Mac. I've included a set of files encoded with mp3 and ogg, both of which are perfectly gapless on moode (as are flacs of course), so this is just a problem with aac files.
I know there are lots of other music players for the Raspberry Pi, like picoreplayer and RopieeXL, so if you are using one of those I'd really appreciate it if you could test the files I linked above and let me know if your player can handle them gaplessly. This would save me flashing and setting them up.
I've uploaded a bunch of test tracks that you can find here:
There are two metadata methods by which gapless aac playback can be implemented, the original Apple scheme using itunsMPB tags, and the ISO method using elst/sdst tags. The files that I've uploaded use two different encoders (qaac and dBPoweramp/FDK), both of which allow the tagging method to be specified ('gm' refers to encoding via qaac using the --gapless-mode option as specified in its docs). No matter which encoder I use or which gapless mode tagging is implemented, they all fail, with an audible tick between tracks because ffmpeg isn't skipping the priming samples.
Looking at mpd's log I see ffmpeg throwing a "ffmpeg/aac: Could not update timestamps for skipped samples" warning, but only when playing the files encoded by qaac. This is thrown at this point in the ffmpeg code. ffprobe seems to show that ffmpeg is recognising both the itunsMPB and ISO tags, so I don't know if this is an ffmpeg issue or because mpd isn't properly setting the pkt_timebase. Since the files encoded with dBPoweramp/FDK don't result in this warning but still skip between tracks I'm not sure of the relevance of this warning.
All these files play with perfect gapless performance in foobar2k, and I never had this problem with Audirvana when I was using a Mac. I've included a set of files encoded with mp3 and ogg, both of which are perfectly gapless on moode (as are flacs of course), so this is just a problem with aac files.
I know there are lots of other music players for the Raspberry Pi, like picoreplayer and RopieeXL, so if you are using one of those I'd really appreciate it if you could test the files I linked above and let me know if your player can handle them gaplessly. This would save me flashing and setting them up.