Error return codes possible from libvorbis and libvorbisfile: All 'failure' style returns are <0; this either indicates a generic 'false' value (eg, ready? T or F) or an error condition. Code can safely just test for < 0, or look at the specific return code for more detail. *** Return codes: OV_FALSE The call returned a 'false' status (eg, ov_bitrate_instant can return OV_FALSE if playback is not in progress, and thus there is no instantaneous bitrate information to report. OV_HOLE libvorbis/libvorbisfile is alerting the application that there was an interruption in the data (one of: garbage between pages, loss of sync followed by recapture, or a corrupt page) OV_EREAD A read from media returned an error. OV_EFAULT Internal logic fault; indicates a bug or heap/stack corruption. OV_EIMPL The bitstream makes use of a feature not implemented in this library version. OV_EINVAL Invalid argument value. OV_ENOTVORBIS Bitstream/page/packet is not Vorbis data. OV_EBADHEADER Invalid Vorbis bitstream header. OV_EVERSION Vorbis version mismatch. OV_ENOTAUDIO Packet data submitted to vorbis_synthesis is not audio data. OV_EBADPACKET Invalid packet submitted to vorbis_synthesis. OV_EBADLINK Invalid stream section supplied to libvorbis/libvorbisfile, or the requested link is corrupt. OV_ENOSEEK Bitstream is not seekable. **************************************************************** *** Libvorbis functions that can return failure/error codes: int vorbis_analysis_headerout() OV_EIMPL int vorbis_analysis_wrote() OV_EINVAL int vorbis_synthesis_headerin() OV_ENOTVORBIS, OV_EVERSION, OV_EBADHEADER int vorbis_synthesis() OV_ENOTAUDIO, OV_EBADPACKET int vorbis_synthesis_read() OV_EINVAL **************************************************************** *** Libvorbisfile functions that can return failure/error codes: int ov_open_callbacks() OV_EREAD, OV_ENOTVORBIS, OV_EVERSION, OV_EBADHEADER, OV_FAULT int ov_open() OV_EREAD, OV_ENOTVORBIS, OV_EVERSION, OV_EBADHEADER, OV_FAULT long ov_bitrate() OV_EINVAL, OV_FALSE long ov_bitrate_instant() OV_FALSE ogg_int64_t ov_raw_total() OV_EINVAL ogg_int64_t ov_pcm_total() OV_EINVAL double ov_time_total() OV_EINVAL int ov_raw_seek() OV_ENOSEEK, OV_EINVAL, OV_BADLINK int ov_pcm_seek_page() OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT int ov_pcm_seek() OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT int ov_time_seek() OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT int ov_time_seek_page() OV_ENOSEEK, OV_EINVAL, OV_EREAD, OV_BADLINK, OV_FAULT long ov_read() OV_HOLE, OV_EBADLINK