Commit Briefs
don't call player_sendeof on IMSG_STOP
the refactoring introduced this error where we call report an EOF upon IMSG_STOP, making the player infinitely loop.
add a simple filetype detector instead of relying on file extension
just a bit of "magic" :) Flac are easy, they always start with "fLaC". mp3 are weird because they either start with "ID3" (but this theoretically only ensures that's a tagged file, not an mp3) or 0xFF 0xFB. Ogg Opus should have a magic sequence "OpusHead" somewhere near the start of the file but also have the ogg' "OggS" magic bytes. I hope it's enough to distinguish between Ogg Opus and Vorbis. Another option would be to refactor play_oggvorbis/opus to not close the file on failure and try in cascade the play_* functions, but it's more complex and this solution seems to be enough.
refactor player_playnext: return status code
let the caller decide to call senderr or sendeof.
pledge audio too
while for my particular use-case this has always worked with only "stdio recvfd", sio_open(3) mentions that if no further sio_open calls are made all pledges can be dropped except for "audio", so let's keep it.
remove the got_stop hack
now player_playnext has enough information to decide wheter to call player_senderr or player_sendeof.
change the log debug string for player_setup
now it includes all the params, not only the rate