stb_vorbis.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388
  1. // Ogg Vorbis audio decoder - v1.09 - public domain
  2. // http://nothings.org/stb_vorbis/
  3. //
  4. // Original version written by Sean Barrett in 2007.
  5. //
  6. // Originally sponsored by RAD Game Tools. Seeking sponsored
  7. // by Phillip Bennefall, Marc Andersen, Aaron Baker, Elias Software,
  8. // Aras Pranckevicius, and Sean Barrett.
  9. //
  10. // LICENSE
  11. //
  12. // This software is dual-licensed to the public domain and under the following
  13. // license: you are granted a perpetual, irrevocable license to copy, modify,
  14. // publish, and distribute this file as you see fit.
  15. //
  16. // No warranty for any purpose is expressed or implied by the author (nor
  17. // by RAD Game Tools). Report bugs and send enhancements to the author.
  18. //
  19. // Limitations:
  20. //
  21. // - floor 0 not supported (used in old ogg vorbis files pre-2004)
  22. // - lossless sample-truncation at beginning ignored
  23. // - cannot concatenate multiple vorbis streams
  24. // - sample positions are 32-bit, limiting seekable 192Khz
  25. // files to around 6 hours (Ogg supports 64-bit)
  26. //
  27. // Feature contributors:
  28. // Dougall Johnson (sample-exact seeking)
  29. //
  30. // Bugfix/warning contributors:
  31. // Terje Mathisen Niklas Frykholm Andy Hill
  32. // Casey Muratori John Bolton Gargaj
  33. // Laurent Gomila Marc LeBlanc Ronny Chevalier
  34. // Bernhard Wodo Evan Balster alxprd@github
  35. // Tom Beaumont Ingo Leitgeb Nicolas Guillemot
  36. // Phillip Bennefall Rohit Thiago Goulart
  37. // manxorist@github saga musix
  38. //
  39. // Partial history:
  40. // 1.09 - 2016/04/04 - back out 'truncation of last frame' fix from previous version
  41. // 1.08 - 2016/04/02 - warnings; setup memory leaks; truncation of last frame
  42. // 1.07 - 2015/01/16 - fixes for crashes on invalid files; warning fixes; const
  43. // 1.06 - 2015/08/31 - full, correct support for seeking API (Dougall Johnson)
  44. // some crash fixes when out of memory or with corrupt files
  45. // fix some inappropriately signed shifts
  46. // 1.05 - 2015/04/19 - don't define __forceinline if it's redundant
  47. // 1.04 - 2014/08/27 - fix missing const-correct case in API
  48. // 1.03 - 2014/08/07 - warning fixes
  49. // 1.02 - 2014/07/09 - declare qsort comparison as explicitly _cdecl in Windows
  50. // 1.01 - 2014/06/18 - fix stb_vorbis_get_samples_float (interleaved was correct)
  51. // 1.0 - 2014/05/26 - fix memory leaks; fix warnings; fix bugs in >2-channel;
  52. // (API change) report sample rate for decode-full-file funcs
  53. //
  54. // See end of file for full version history.
  55. //////////////////////////////////////////////////////////////////////////////
  56. //
  57. // HEADER BEGINS HERE
  58. //
  59. #ifndef STB_VORBIS_INCLUDE_STB_VORBIS_H
  60. #define STB_VORBIS_INCLUDE_STB_VORBIS_H
  61. #if defined(STB_VORBIS_NO_CRT) && !defined(STB_VORBIS_NO_STDIO)
  62. #define STB_VORBIS_NO_STDIO 1
  63. #endif
  64. #ifndef STB_VORBIS_NO_STDIO
  65. #include <stdio.h>
  66. #endif
  67. #ifdef __cplusplus
  68. extern "C" {
  69. #endif
  70. /////////// THREAD SAFETY
  71. // Individual stb_vorbis* handles are not thread-safe; you cannot decode from
  72. // them from multiple threads at the same time. However, you can have multiple
  73. // stb_vorbis* handles and decode from them independently in multiple thrads.
  74. /////////// MEMORY ALLOCATION
  75. // normally stb_vorbis uses malloc() to allocate memory at startup,
  76. // and alloca() to allocate temporary memory during a frame on the
  77. // stack. (Memory consumption will depend on the amount of setup
  78. // data in the file and how you set the compile flags for speed
  79. // vs. size. In my test files the maximal-size usage is ~150KB.)
  80. //
  81. // You can modify the wrapper functions in the source (setup_malloc,
  82. // setup_temp_malloc, temp_malloc) to change this behavior, or you
  83. // can use a simpler allocation model: you pass in a buffer from
  84. // which stb_vorbis will allocate _all_ its memory (including the
  85. // temp memory). "open" may fail with a VORBIS_outofmem if you
  86. // do not pass in enough data; there is no way to determine how
  87. // much you do need except to succeed (at which point you can
  88. // query get_info to find the exact amount required. yes I know
  89. // this is lame).
  90. //
  91. // If you pass in a non-NULL buffer of the type below, allocation
  92. // will occur from it as described above. Otherwise just pass NULL
  93. // to use malloc()/alloca()
  94. typedef struct
  95. {
  96. char *alloc_buffer;
  97. int alloc_buffer_length_in_bytes;
  98. } stb_vorbis_alloc;
  99. /////////// FUNCTIONS USEABLE WITH ALL INPUT MODES
  100. typedef struct stb_vorbis stb_vorbis;
  101. typedef struct
  102. {
  103. unsigned int sample_rate;
  104. int channels;
  105. unsigned int setup_memory_required;
  106. unsigned int setup_temp_memory_required;
  107. unsigned int temp_memory_required;
  108. int max_frame_size;
  109. } stb_vorbis_info;
  110. // get general information about the file
  111. extern stb_vorbis_info stb_vorbis_get_info(stb_vorbis *f);
  112. // get the last error detected (clears it, too)
  113. extern int stb_vorbis_get_error(stb_vorbis *f);
  114. // close an ogg vorbis file and free all memory in use
  115. extern void stb_vorbis_close(stb_vorbis *f);
  116. // this function returns the offset (in samples) from the beginning of the
  117. // file that will be returned by the next decode, if it is known, or -1
  118. // otherwise. after a flush_pushdata() call, this may take a while before
  119. // it becomes valid again.
  120. // NOT WORKING YET after a seek with PULLDATA API
  121. extern int stb_vorbis_get_sample_offset(stb_vorbis *f);
  122. // returns the current seek point within the file, or offset from the beginning
  123. // of the memory buffer. In pushdata mode it returns 0.
  124. extern unsigned int stb_vorbis_get_file_offset(stb_vorbis *f);
  125. /////////// PUSHDATA API
  126. #ifndef STB_VORBIS_NO_PUSHDATA_API
  127. // this API allows you to get blocks of data from any source and hand
  128. // them to stb_vorbis. you have to buffer them; stb_vorbis will tell
  129. // you how much it used, and you have to give it the rest next time;
  130. // and stb_vorbis may not have enough data to work with and you will
  131. // need to give it the same data again PLUS more. Note that the Vorbis
  132. // specification does not bound the size of an individual frame.
  133. extern stb_vorbis *stb_vorbis_open_pushdata(
  134. const unsigned char * datablock, int datablock_length_in_bytes,
  135. int *datablock_memory_consumed_in_bytes,
  136. int *error,
  137. const stb_vorbis_alloc *alloc_buffer);
  138. // create a vorbis decoder by passing in the initial data block containing
  139. // the ogg&vorbis headers (you don't need to do parse them, just provide
  140. // the first N bytes of the file--you're told if it's not enough, see below)
  141. // on success, returns an stb_vorbis *, does not set error, returns the amount of
  142. // data parsed/consumed on this call in *datablock_memory_consumed_in_bytes;
  143. // on failure, returns NULL on error and sets *error, does not change *datablock_memory_consumed
  144. // if returns NULL and *error is VORBIS_need_more_data, then the input block was
  145. // incomplete and you need to pass in a larger block from the start of the file
  146. extern int stb_vorbis_decode_frame_pushdata(
  147. stb_vorbis *f,
  148. const unsigned char *datablock, int datablock_length_in_bytes,
  149. int *channels, // place to write number of float * buffers
  150. float ***output, // place to write float ** array of float * buffers
  151. int *samples // place to write number of output samples
  152. );
  153. // decode a frame of audio sample data if possible from the passed-in data block
  154. //
  155. // return value: number of bytes we used from datablock
  156. //
  157. // possible cases:
  158. // 0 bytes used, 0 samples output (need more data)
  159. // N bytes used, 0 samples output (resynching the stream, keep going)
  160. // N bytes used, M samples output (one frame of data)
  161. // note that after opening a file, you will ALWAYS get one N-bytes,0-sample
  162. // frame, because Vorbis always "discards" the first frame.
  163. //
  164. // Note that on resynch, stb_vorbis will rarely consume all of the buffer,
  165. // instead only datablock_length_in_bytes-3 or less. This is because it wants
  166. // to avoid missing parts of a page header if they cross a datablock boundary,
  167. // without writing state-machiney code to record a partial detection.
  168. //
  169. // The number of channels returned are stored in *channels (which can be
  170. // NULL--it is always the same as the number of channels reported by
  171. // get_info). *output will contain an array of float* buffers, one per
  172. // channel. In other words, (*output)[0][0] contains the first sample from
  173. // the first channel, and (*output)[1][0] contains the first sample from
  174. // the second channel.
  175. extern void stb_vorbis_flush_pushdata(stb_vorbis *f);
  176. // inform stb_vorbis that your next datablock will not be contiguous with
  177. // previous ones (e.g. you've seeked in the data); future attempts to decode
  178. // frames will cause stb_vorbis to resynchronize (as noted above), and
  179. // once it sees a valid Ogg page (typically 4-8KB, as large as 64KB), it
  180. // will begin decoding the _next_ frame.
  181. //
  182. // if you want to seek using pushdata, you need to seek in your file, then
  183. // call stb_vorbis_flush_pushdata(), then start calling decoding, then once
  184. // decoding is returning you data, call stb_vorbis_get_sample_offset, and
  185. // if you don't like the result, seek your file again and repeat.
  186. #endif
  187. ////////// PULLING INPUT API
  188. #ifndef STB_VORBIS_NO_PULLDATA_API
  189. // This API assumes stb_vorbis is allowed to pull data from a source--
  190. // either a block of memory containing the _entire_ vorbis stream, or a
  191. // FILE * that you or it create, or possibly some other reading mechanism
  192. // if you go modify the source to replace the FILE * case with some kind
  193. // of callback to your code. (But if you don't support seeking, you may
  194. // just want to go ahead and use pushdata.)
  195. #if !defined(STB_VORBIS_NO_STDIO) && !defined(STB_VORBIS_NO_INTEGER_CONVERSION)
  196. extern int stb_vorbis_decode_filename(const char *filename, int *channels, int *sample_rate, short **output);
  197. #endif
  198. #if !defined(STB_VORBIS_NO_INTEGER_CONVERSION)
  199. extern int stb_vorbis_decode_memory(const unsigned char *mem, int len, int *channels, int *sample_rate, short **output);
  200. #endif
  201. // decode an entire file and output the data interleaved into a malloc()ed
  202. // buffer stored in *output. The return value is the number of samples
  203. // decoded, or -1 if the file could not be opened or was not an ogg vorbis file.
  204. // When you're done with it, just free() the pointer returned in *output.
  205. extern stb_vorbis * stb_vorbis_open_memory(const unsigned char *data, int len,
  206. int *error, const stb_vorbis_alloc *alloc_buffer);
  207. // create an ogg vorbis decoder from an ogg vorbis stream in memory (note
  208. // this must be the entire stream!). on failure, returns NULL and sets *error
  209. #ifndef STB_VORBIS_NO_STDIO
  210. extern stb_vorbis * stb_vorbis_open_filename(const char *filename,
  211. int *error, const stb_vorbis_alloc *alloc_buffer);
  212. // create an ogg vorbis decoder from a filename via fopen(). on failure,
  213. // returns NULL and sets *error (possibly to VORBIS_file_open_failure).
  214. extern stb_vorbis * stb_vorbis_open_file(FILE *f, int close_handle_on_close,
  215. int *error, const stb_vorbis_alloc *alloc_buffer);
  216. // create an ogg vorbis decoder from an open FILE *, looking for a stream at
  217. // the _current_ seek point (ftell). on failure, returns NULL and sets *error.
  218. // note that stb_vorbis must "own" this stream; if you seek it in between
  219. // calls to stb_vorbis, it will become confused. Morever, if you attempt to
  220. // perform stb_vorbis_seek_*() operations on this file, it will assume it
  221. // owns the _entire_ rest of the file after the start point. Use the next
  222. // function, stb_vorbis_open_file_section(), to limit it.
  223. extern stb_vorbis * stb_vorbis_open_file_section(FILE *f, int close_handle_on_close,
  224. int *error, const stb_vorbis_alloc *alloc_buffer, unsigned int len);
  225. // create an ogg vorbis decoder from an open FILE *, looking for a stream at
  226. // the _current_ seek point (ftell); the stream will be of length 'len' bytes.
  227. // on failure, returns NULL and sets *error. note that stb_vorbis must "own"
  228. // this stream; if you seek it in between calls to stb_vorbis, it will become
  229. // confused.
  230. #endif
  231. extern int stb_vorbis_seek_frame(stb_vorbis *f, unsigned int sample_number);
  232. extern int stb_vorbis_seek(stb_vorbis *f, unsigned int sample_number);
  233. // these functions seek in the Vorbis file to (approximately) 'sample_number'.
  234. // after calling seek_frame(), the next call to get_frame_*() will include
  235. // the specified sample. after calling stb_vorbis_seek(), the next call to
  236. // stb_vorbis_get_samples_* will start with the specified sample. If you
  237. // do not need to seek to EXACTLY the target sample when using get_samples_*,
  238. // you can also use seek_frame().
  239. extern void stb_vorbis_seek_start(stb_vorbis *f);
  240. // this function is equivalent to stb_vorbis_seek(f,0)
  241. extern unsigned int stb_vorbis_stream_length_in_samples(stb_vorbis *f);
  242. extern float stb_vorbis_stream_length_in_seconds(stb_vorbis *f);
  243. // these functions return the total length of the vorbis stream
  244. extern int stb_vorbis_get_frame_float(stb_vorbis *f, int *channels, float ***output);
  245. // decode the next frame and return the number of samples. the number of
  246. // channels returned are stored in *channels (which can be NULL--it is always
  247. // the same as the number of channels reported by get_info). *output will
  248. // contain an array of float* buffers, one per channel. These outputs will
  249. // be overwritten on the next call to stb_vorbis_get_frame_*.
  250. //
  251. // You generally should not intermix calls to stb_vorbis_get_frame_*()
  252. // and stb_vorbis_get_samples_*(), since the latter calls the former.
  253. #ifndef STB_VORBIS_NO_INTEGER_CONVERSION
  254. extern int stb_vorbis_get_frame_short_interleaved(stb_vorbis *f, int num_c, short *buffer, int num_shorts);
  255. extern int stb_vorbis_get_frame_short (stb_vorbis *f, int num_c, short **buffer, int num_samples);
  256. #endif
  257. // decode the next frame and return the number of *samples* per channel.
  258. // Note that for interleaved data, you pass in the number of shorts (the
  259. // size of your array), but the return value is the number of samples per
  260. // channel, not the total number of samples.
  261. //
  262. // The data is coerced to the number of channels you request according to the
  263. // channel coercion rules (see below). You must pass in the size of your
  264. // buffer(s) so that stb_vorbis will not overwrite the end of the buffer.
  265. // The maximum buffer size needed can be gotten from get_info(); however,
  266. // the Vorbis I specification implies an absolute maximum of 4096 samples
  267. // per channel.
  268. // Channel coercion rules:
  269. // Let M be the number of channels requested, and N the number of channels present,
  270. // and Cn be the nth channel; let stereo L be the sum of all L and center channels,
  271. // and stereo R be the sum of all R and center channels (channel assignment from the
  272. // vorbis spec).
  273. // M N output
  274. // 1 k sum(Ck) for all k
  275. // 2 * stereo L, stereo R
  276. // k l k > l, the first l channels, then 0s
  277. // k l k <= l, the first k channels
  278. // Note that this is not _good_ surround etc. mixing at all! It's just so
  279. // you get something useful.
  280. extern int stb_vorbis_get_samples_float_interleaved(stb_vorbis *f, int channels, float *buffer, int num_floats);
  281. extern int stb_vorbis_get_samples_float(stb_vorbis *f, int channels, float **buffer, int num_samples);
  282. // gets num_samples samples, not necessarily on a frame boundary--this requires
  283. // buffering so you have to supply the buffers. DOES NOT APPLY THE COERCION RULES.
  284. // Returns the number of samples stored per channel; it may be less than requested
  285. // at the end of the file. If there are no more samples in the file, returns 0.
  286. #ifndef STB_VORBIS_NO_INTEGER_CONVERSION
  287. extern int stb_vorbis_get_samples_short_interleaved(stb_vorbis *f, int channels, short *buffer, int num_shorts);
  288. extern int stb_vorbis_get_samples_short(stb_vorbis *f, int channels, short **buffer, int num_samples);
  289. #endif
  290. // gets num_samples samples, not necessarily on a frame boundary--this requires
  291. // buffering so you have to supply the buffers. Applies the coercion rules above
  292. // to produce 'channels' channels. Returns the number of samples stored per channel;
  293. // it may be less than requested at the end of the file. If there are no more
  294. // samples in the file, returns 0.
  295. #endif
  296. //////// ERROR CODES
  297. enum STBVorbisError
  298. {
  299. VORBIS__no_error,
  300. VORBIS_need_more_data=1, // not a real error
  301. VORBIS_invalid_api_mixing, // can't mix API modes
  302. VORBIS_outofmem, // not enough memory
  303. VORBIS_feature_not_supported, // uses floor 0
  304. VORBIS_too_many_channels, // STB_VORBIS_MAX_CHANNELS is too small
  305. VORBIS_file_open_failure, // fopen() failed
  306. VORBIS_seek_without_length, // can't seek in unknown-length file
  307. VORBIS_unexpected_eof=10, // file is truncated?
  308. VORBIS_seek_invalid, // seek past EOF
  309. // decoding errors (corrupt/invalid stream) -- you probably
  310. // don't care about the exact details of these
  311. // vorbis errors:
  312. VORBIS_invalid_setup=20,
  313. VORBIS_invalid_stream,
  314. // ogg errors:
  315. VORBIS_missing_capture_pattern=30,
  316. VORBIS_invalid_stream_structure_version,
  317. VORBIS_continued_packet_flag_invalid,
  318. VORBIS_incorrect_stream_serial_number,
  319. VORBIS_invalid_first_page,
  320. VORBIS_bad_packet_type,
  321. VORBIS_cant_find_last_page,
  322. VORBIS_seek_failed
  323. };
  324. #ifdef __cplusplus
  325. }
  326. #endif
  327. #endif // STB_VORBIS_INCLUDE_STB_VORBIS_H
  328. //
  329. // HEADER ENDS HERE
  330. //
  331. //////////////////////////////////////////////////////////////////////////////