In regards to getting gapless playback with mplayer...
If a named pipe is used to stream the audio, linux does enough buffering to achieve gapless playback. Just set up aplay to read from a pipe and use mplayer to send raw pcm to the pipe.
$ mkfifo audiofifo
$ aplay -t raw -c 2 -f S16_LE -r 44100 audiofifo &
$ mplayer -ao pcm:nowaveheader:file=audiofifo <audio files>
Ideas taken from http://www.volkerschatz.com/hardware/itxplayer.html (scroll down to software/audio player)
Actually, I just tested this by putting mplayer options
into gmusicbrowser and then creating a pipe
and then an aplay instance
aplay -t raw -c 2 -f S16_LE -r 44100 /home/user/gmbfifo
And it works beautifully when playing any audio from the library! 8)
thanks, good to know.
I don't know if I'll add an option to do that automatically, but at least I'll mention this trick in the FAQ
just tried this cause in general i've been missing this feature a bit in mplayer (gstreamer just uses more cpu).
in general it seems to work, but somehow it screws up my progress-scale widget and the pos-widget. the overall runtime of a song sometimes gets exceeded by the counter (especially when skipping towards the end of a track to try the gapless feature ;) ).
also: would i have to create the pipe and the aplay instance everytime i start gmb? (not that this is a problem, i could simply make a script for that.) i don't know much about pipes in linux, do they have to be closed again?
It can cause delays between what you hear and the displayed position, other problems are probably coming from mplayer (try to running it from the command line).
The fifo doesn't need to be recreated
I'm not sure on what condition aplay quits, you could run
while true ; do aplay -t raw -c 2 -f S16_LE -r 44100 /home/user/gmbfifo ; done
to make sure it is re-launched when it quits.
I have found that at times the size of the fifo is not large enough. aplay eats all the data in the fifo before mplayer can provide more. I think when this happens aplay stops. The size of the fifo buffer can be increased. This hero has written a C program to do that: https://gist.github.com/cyfdecyf/1ee981611050202d670c