From 5da815234c850dd1f1517e89854bbbed4eeb02e8 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Mon, 26 Dec 2016 10:52:57 +0100 Subject: [PATCH] Improved FLAC audio support --- examples/resources/audio/tanatana.flac | Bin 0 -> 100733 bytes src/audio.c | 25 +- src/external/dr_flac.h | 323 +++++++++++++++++++------ 3 files changed, 255 insertions(+), 93 deletions(-) create mode 100644 examples/resources/audio/tanatana.flac diff --git a/examples/resources/audio/tanatana.flac b/examples/resources/audio/tanatana.flac new file mode 100644 index 0000000000000000000000000000000000000000..dfe735cd6ef0bd73fa8e1255a342eda578b3f196 GIT binary patch literal 100733 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

#vBN3^h7iaO7aV->cwRtm13nl1*-9L+|d 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 R)H`Tt>eQ*B5j(xbO#n=JXpjH^ literal 0 HcmV?d00001 diff --git a/src/audio.c b/src/audio.c index 04ff90da4..3a4ca3dfa 100644 --- a/src/audio.c +++ b/src/audio.c @@ -593,6 +593,7 @@ Music LoadMusicStream(const char *fileName) music->ctxType = MUSIC_AUDIO_OGG; music->loop = true; // We loop by default + TraceLog(DEBUG, "[%s] FLAC total samples: %i", fileName, music->totalSamples); TraceLog(DEBUG, "[%s] OGG sample rate: %i", fileName, info.sample_rate); TraceLog(DEBUG, "[%s] OGG channels: %i", fileName, info.channels); TraceLog(DEBUG, "[%s] OGG memory required: %i", fileName, info.temp_memory_required); @@ -606,11 +607,12 @@ Music LoadMusicStream(const char *fileName) else { music->stream = InitAudioStream(music->ctxFlac->sampleRate, music->ctxFlac->bitsPerSample, music->ctxFlac->channels); - music->totalSamples = (unsigned int)music->ctxFlac->totalSampleCount; + music->totalSamples = (unsigned int)music->ctxFlac->totalSampleCount/music->ctxFlac->channels; music->samplesLeft = music->totalSamples; music->ctxType = MUSIC_AUDIO_FLAC; music->loop = true; // We loop by default + TraceLog(DEBUG, "[%s] FLAC total samples: %i", fileName, music->totalSamples); TraceLog(DEBUG, "[%s] FLAC sample rate: %i", fileName, music->ctxFlac->sampleRate); TraceLog(DEBUG, "[%s] FLAC bits per sample: %i", fileName, music->ctxFlac->bitsPerSample); TraceLog(DEBUG, "[%s] FLAC channels: %i", fileName, music->ctxFlac->channels); @@ -745,9 +747,7 @@ void UpdateMusicStream(Music music) case MUSIC_AUDIO_FLAC: { // NOTE: Returns the number of samples to process - unsigned int numSamplesFlac = (unsigned int)drflac_read_s32(music->ctxFlac, numSamples/2, (int *)pcm); - - // TODO: Samples should be provided as 16 bit instead of 32 bit! + unsigned int numSamplesFlac = (unsigned int)drflac_read_s16(music->ctxFlac, numSamples*music->stream.channels, (short *)pcm); } break; case MUSIC_MODULE_XM: jar_xm_generate_samples_16bit(music->ctxXm, pcm, numSamples); break; @@ -1145,21 +1145,14 @@ static Wave LoadFLAC(const char *fileName) // Decode an entire FLAC file in one go uint64_t totalSampleCount; - wave.data = drflac_open_and_decode_file_s32(fileName, &wave.channels, &wave.sampleRate, &totalSampleCount); + wave.data = drflac_open_and_decode_file_s16(fileName, &wave.channels, &wave.sampleRate, &totalSampleCount); - wave.sampleCount = (int)totalSampleCount; - wave.sampleSize = 32; // 32 bit per sample (float) - - // NOTE: By default, dr_flac returns 32bit float samples, needs to be converted to 16bit - WaveFormat(&wave, wave.sampleRate, 16, wave.channels); + wave.sampleCount = (int)totalSampleCount/wave.channels; + wave.sampleSize = 16; // NOTE: Only support up to 2 channels (mono, stereo) - if (wave.channels > 2) - { - WaveFormat(&wave, wave.sampleRate, wave.sampleSize, 2); - TraceLog(WARNING, "[%s] FLAC channels number (%i) not supported, converted to 2 channels", fileName, wave.channels); - } - + if (wave.channels > 2) TraceLog(WARNING, "[%s] FLAC channels number (%i) not supported", fileName, wave.channels); + if (wave.data == NULL) TraceLog(WARNING, "[%s] FLAC data could not be loaded", fileName); else TraceLog(INFO, "[%s] FLAC file loaded successfully (%i Hz, %i bit, %s)", fileName, wave.sampleRate, wave.sampleSize, (wave.channels == 1) ? "Mono" : "Stereo"); diff --git a/src/external/dr_flac.h b/src/external/dr_flac.h index d7b66f206..d2bebea5e 100644 --- a/src/external/dr_flac.h +++ b/src/external/dr_flac.h @@ -1,5 +1,5 @@ // FLAC audio decoder. Public domain. See "unlicense" statement at the end of this file. -// dr_flac - v0.4 - 2016-09-29 +// dr_flac - v0.4c - 2016-12-26 // // David Reid - mackron@gmail.com @@ -105,18 +105,32 @@ #include #include -#ifndef DR_BOOL_DEFINED -#define DR_BOOL_DEFINED -#ifdef _WIN32 -typedef char drBool8; -typedef int drBool32; +#ifndef DR_SIZED_TYPES_DEFINED +#define DR_SIZED_TYPES_DEFINED +#if defined(_MSC_VER) && _MSC_VER < 1600 +typedef signed char dr_int8; +typedef unsigned char dr_uint8; +typedef signed short dr_int16; +typedef unsigned short dr_uint16; +typedef signed int dr_int32; +typedef unsigned int dr_uint32; +typedef signed __int64 dr_int64; +typedef unsigned __int64 dr_uint64; #else #include -typedef int8_t drBool8; -typedef int32_t drBool32; +typedef int8_t dr_int8; +typedef uint8_t dr_uint8; +typedef int16_t dr_int16; +typedef uint16_t dr_uint16; +typedef int32_t dr_int32; +typedef uint32_t dr_uint32; +typedef int64_t dr_int64; +typedef uint64_t dr_uint64; #endif -#define DR_TRUE 1 -#define DR_FALSE 0 +typedef dr_int8 dr_bool8; +typedef dr_int32 dr_bool32; +#define DR_TRUE 1 +#define DR_FALSE 0 #endif // As data is read from the client it is placed into an internal buffer for fast access. This controls the @@ -262,7 +276,7 @@ typedef struct { char catalog[128]; uint64_t leadInSampleCount; - drBool32 isCD; + dr_bool32 isCD; uint8_t trackCount; const uint8_t* pTrackData; } cuesheet; @@ -305,7 +319,7 @@ typedef size_t (* drflac_read_proc)(void* pUserData, void* pBufferOut, size_t by // // The offset will never be negative. Whether or not it is relative to the beginning or current position is determined // by the "origin" parameter which will be either drflac_seek_origin_start or drflac_seek_origin_current. -typedef drBool32 (* drflac_seek_proc)(void* pUserData, int offset, drflac_seek_origin origin); +typedef dr_bool32 (* drflac_seek_proc)(void* pUserData, int offset, drflac_seek_origin origin); // Callback for when a metadata block is read. // @@ -546,6 +560,10 @@ void drflac_close(drflac* pFlac); // seeked. uint64_t drflac_read_s32(drflac* pFlac, uint64_t samplesToRead, int32_t* pBufferOut); +// Same as drflac_read_s32(), except outputs samples as 16-bit integer PCM rather than 32-bit. Note +// that this is lossey. +uint64_t drflac_read_s16(drflac* pFlac, uint64_t samplesToRead, int16_t* pBufferOut); + // Seeks to the sample at the given index. // // pFlac [in] The decoder. @@ -558,7 +576,7 @@ uint64_t drflac_read_s32(drflac* pFlac, uint64_t samplesToRead, int32_t* pBuffer // // When seeking, you will likely want to ensure it's rounded to a multiple of the channel count. You can do this with // something like drflac_seek_to_sample(pFlac, (mySampleIndex + (mySampleIndex % pFlac->channels))) -drBool32 drflac_seek_to_sample(drflac* pFlac, uint64_t sampleIndex); +dr_bool32 drflac_seek_to_sample(drflac* pFlac, uint64_t sampleIndex); @@ -607,14 +625,17 @@ drflac* drflac_open_memory_with_metadata(const void* data, size_t dataSize, drfl // // Do not call this function on a broadcast type of stream (like internet radio streams and whatnot). int32_t* drflac_open_and_decode_s32(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount); +int16_t* drflac_open_and_decode_s16(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount); #ifndef DR_FLAC_NO_STDIO // Same as drflac_open_and_decode_s32() except opens the decoder from a file. int32_t* drflac_open_and_decode_file_s32(const char* filename, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount); +int16_t* drflac_open_and_decode_file_s16(const char* filename, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount); #endif // Same as drflac_open_and_decode_s32() except opens the decoder from a block of memory. int32_t* drflac_open_and_decode_memory_s32(const void* data, size_t dataSize, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount); +int16_t* drflac_open_and_decode_memory_s16(const void* data, size_t dataSize, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount); // Frees data returned by drflac_open_and_decode_*(). void drflac_free(void* pSampleDataReturnedByOpenAndDecode); @@ -684,7 +705,7 @@ const char* drflac_next_vorbis_comment(drflac_vorbis_comment_iterator* pIter, ui //// Endian Management //// -static DRFLAC_INLINE drBool32 drflac__is_little_endian() +static DRFLAC_INLINE dr_bool32 drflac__is_little_endian() { int n = 1; return (*(char*)&n) == 1; @@ -817,7 +838,7 @@ static DRFLAC_INLINE uint32_t drflac__le2host_32(uint32_t n) #define DRFLAC_CACHE_L2_LINE_COUNT(bs) (DRFLAC_CACHE_L2_SIZE_BYTES(bs) / sizeof((bs)->cacheL2[0])) #define DRFLAC_CACHE_L2_LINES_REMAINING(bs) (DRFLAC_CACHE_L2_LINE_COUNT(bs) - (bs)->nextL2Line) -static DRFLAC_INLINE drBool32 drflac__reload_l1_cache_from_l2(drflac_bs* bs) +static DRFLAC_INLINE dr_bool32 drflac__reload_l1_cache_from_l2(drflac_bs* bs) { // Fast path. Try loading straight from L2. if (bs->nextL2Line < DRFLAC_CACHE_L2_LINE_COUNT(bs)) { @@ -871,7 +892,7 @@ static DRFLAC_INLINE drBool32 drflac__reload_l1_cache_from_l2(drflac_bs* bs) } } -static drBool32 drflac__reload_cache(drflac_bs* bs) +static dr_bool32 drflac__reload_cache(drflac_bs* bs) { // Fast path. Try just moving the next value in the L2 cache to the L1 cache. if (drflac__reload_l1_cache_from_l2(bs)) { @@ -907,7 +928,7 @@ static void drflac__reset_cache(drflac_bs* bs) bs->unalignedCache = 0; } -static drBool32 drflac__seek_bits(drflac_bs* bs, size_t bitsToSeek) +static dr_bool32 drflac__seek_bits(drflac_bs* bs, size_t bitsToSeek) { if (bitsToSeek <= DRFLAC_CACHE_L1_BITS_REMAINING(bs)) { bs->consumedBits += bitsToSeek; @@ -958,7 +979,7 @@ static drBool32 drflac__seek_bits(drflac_bs* bs, size_t bitsToSeek) } } -static drBool32 drflac__read_uint32(drflac_bs* bs, unsigned int bitCount, uint32_t* pResultOut) +static dr_bool32 drflac__read_uint32(drflac_bs* bs, unsigned int bitCount, uint32_t* pResultOut) { assert(bs != NULL); assert(pResultOut != NULL); @@ -999,7 +1020,7 @@ static drBool32 drflac__read_uint32(drflac_bs* bs, unsigned int bitCount, uint32 } } -static drBool32 drflac__read_int32(drflac_bs* bs, unsigned int bitCount, int32_t* pResult) +static dr_bool32 drflac__read_int32(drflac_bs* bs, unsigned int bitCount, int32_t* pResult) { assert(bs != NULL); assert(pResult != NULL); @@ -1018,7 +1039,7 @@ static drBool32 drflac__read_int32(drflac_bs* bs, unsigned int bitCount, int32_t return DR_TRUE; } -static drBool32 drflac__read_uint64(drflac_bs* bs, unsigned int bitCount, uint64_t* pResultOut) +static dr_bool32 drflac__read_uint64(drflac_bs* bs, unsigned int bitCount, uint64_t* pResultOut) { assert(bitCount <= 64); assert(bitCount > 32); @@ -1039,7 +1060,7 @@ static drBool32 drflac__read_uint64(drflac_bs* bs, unsigned int bitCount, uint64 // Function below is unused, but leaving it here in case I need to quickly add it again. #if 0 -static drBool32 drflac__read_int64(drflac_bs* bs, unsigned int bitCount, int64_t* pResultOut) +static dr_bool32 drflac__read_int64(drflac_bs* bs, unsigned int bitCount, int64_t* pResultOut) { assert(bitCount <= 64); @@ -1056,7 +1077,7 @@ static drBool32 drflac__read_int64(drflac_bs* bs, unsigned int bitCount, int64_t } #endif -static drBool32 drflac__read_uint16(drflac_bs* bs, unsigned int bitCount, uint16_t* pResult) +static dr_bool32 drflac__read_uint16(drflac_bs* bs, unsigned int bitCount, uint16_t* pResult) { assert(bs != NULL); assert(pResult != NULL); @@ -1072,7 +1093,7 @@ static drBool32 drflac__read_uint16(drflac_bs* bs, unsigned int bitCount, uint16 return DR_TRUE; } -static drBool32 drflac__read_int16(drflac_bs* bs, unsigned int bitCount, int16_t* pResult) +static dr_bool32 drflac__read_int16(drflac_bs* bs, unsigned int bitCount, int16_t* pResult) { assert(bs != NULL); assert(pResult != NULL); @@ -1088,7 +1109,7 @@ static drBool32 drflac__read_int16(drflac_bs* bs, unsigned int bitCount, int16_t return DR_TRUE; } -static drBool32 drflac__read_uint8(drflac_bs* bs, unsigned int bitCount, uint8_t* pResult) +static dr_bool32 drflac__read_uint8(drflac_bs* bs, unsigned int bitCount, uint8_t* pResult) { assert(bs != NULL); assert(pResult != NULL); @@ -1104,7 +1125,7 @@ static drBool32 drflac__read_uint8(drflac_bs* bs, unsigned int bitCount, uint8_t return DR_TRUE; } -static drBool32 drflac__read_int8(drflac_bs* bs, unsigned int bitCount, int8_t* pResult) +static dr_bool32 drflac__read_int8(drflac_bs* bs, unsigned int bitCount, int8_t* pResult) { assert(bs != NULL); assert(pResult != NULL); @@ -1121,7 +1142,7 @@ static drBool32 drflac__read_int8(drflac_bs* bs, unsigned int bitCount, int8_t* } -static inline drBool32 drflac__seek_past_next_set_bit(drflac_bs* bs, unsigned int* pOffsetOut) +static inline dr_bool32 drflac__seek_past_next_set_bit(drflac_bs* bs, unsigned int* pOffsetOut) { unsigned int zeroCounter = 0; while (bs->cache == 0) { @@ -1169,7 +1190,7 @@ static inline drBool32 drflac__seek_past_next_set_bit(drflac_bs* bs, unsigned in -static drBool32 drflac__seek_to_byte(drflac_bs* bs, uint64_t offsetFromStart) +static dr_bool32 drflac__seek_to_byte(drflac_bs* bs, uint64_t offsetFromStart) { assert(bs != NULL); assert(offsetFromStart > 0); @@ -1214,7 +1235,7 @@ static drBool32 drflac__seek_to_byte(drflac_bs* bs, uint64_t offsetFromStart) } -static drBool32 drflac__read_utf8_coded_number(drflac_bs* bs, uint64_t* pNumberOut) +static dr_bool32 drflac__read_utf8_coded_number(drflac_bs* bs, uint64_t* pNumberOut) { assert(bs != NULL); assert(pNumberOut != NULL); @@ -1267,7 +1288,7 @@ static drBool32 drflac__read_utf8_coded_number(drflac_bs* bs, uint64_t* pNumberO -static DRFLAC_INLINE drBool32 drflac__read_and_seek_rice(drflac_bs* bs, uint8_t m) +static DRFLAC_INLINE dr_bool32 drflac__read_and_seek_rice(drflac_bs* bs, uint8_t m) { unsigned int unused; if (!drflac__seek_past_next_set_bit(bs, &unused)) { @@ -1520,7 +1541,7 @@ static DRFLAC_INLINE int32_t drflac__calculate_prediction_64(uint32_t order, int // iteration. The prediction is done at the end, and there's an annoying branch I'd like to avoid so the main function is defined // as a #define - sue me! #define DRFLAC__DECODE_SAMPLES_WITH_RESIDULE__RICE__PROC(funcName, predictionFunc) \ -static drBool32 funcName (drflac_bs* bs, uint32_t count, uint8_t riceParam, uint32_t order, int32_t shift, const int16_t* coefficients, int32_t* pSamplesOut) \ +static dr_bool32 funcName (drflac_bs* bs, uint32_t count, uint8_t riceParam, uint32_t order, int32_t shift, const int16_t* coefficients, int32_t* pSamplesOut) \ { \ assert(bs != NULL); \ assert(count > 0); \ @@ -1630,7 +1651,7 @@ DRFLAC__DECODE_SAMPLES_WITH_RESIDULE__RICE__PROC(drflac__decode_samples_with_res // Reads and seeks past a string of residual values as Rice codes. The decoder should be sitting on the first bit of the Rice codes. -static drBool32 drflac__read_and_seek_residual__rice(drflac_bs* bs, uint32_t count, uint8_t riceParam) +static dr_bool32 drflac__read_and_seek_residual__rice(drflac_bs* bs, uint32_t count, uint8_t riceParam) { assert(bs != NULL); assert(count > 0); @@ -1644,7 +1665,7 @@ static drBool32 drflac__read_and_seek_residual__rice(drflac_bs* bs, uint32_t cou return DR_TRUE; } -static drBool32 drflac__decode_samples_with_residual__unencoded(drflac_bs* bs, uint32_t bitsPerSample, uint32_t count, uint8_t unencodedBitsPerSample, uint32_t order, int32_t shift, const int16_t* coefficients, int32_t* pSamplesOut) +static dr_bool32 drflac__decode_samples_with_residual__unencoded(drflac_bs* bs, uint32_t bitsPerSample, uint32_t count, uint8_t unencodedBitsPerSample, uint32_t order, int32_t shift, const int16_t* coefficients, int32_t* pSamplesOut) { assert(bs != NULL); assert(count > 0); @@ -1671,7 +1692,7 @@ static drBool32 drflac__decode_samples_with_residual__unencoded(drflac_bs* bs, u // Reads and decodes the residual for the sub-frame the decoder is currently sitting on. This function should be called // when the decoder is sitting at the very start of the RESIDUAL block. The first residuals will be ignored. The // and parameters are used to determine how many residual values need to be decoded. -static drBool32 drflac__decode_samples_with_residual(drflac_bs* bs, uint32_t bitsPerSample, uint32_t blockSize, uint32_t order, int32_t shift, const int16_t* coefficients, int32_t* pDecodedSamples) +static dr_bool32 drflac__decode_samples_with_residual(drflac_bs* bs, uint32_t bitsPerSample, uint32_t blockSize, uint32_t order, int32_t shift, const int16_t* coefficients, int32_t* pDecodedSamples) { assert(bs != NULL); assert(blockSize != 0); @@ -1755,7 +1776,7 @@ static drBool32 drflac__decode_samples_with_residual(drflac_bs* bs, uint32_t bit // Reads and seeks past the residual for the sub-frame the decoder is currently sitting on. This function should be called // when the decoder is sitting at the very start of the RESIDUAL block. The first residuals will be set to 0. The // and parameters are used to determine how many residual values need to be decoded. -static drBool32 drflac__read_and_seek_residual(drflac_bs* bs, uint32_t blockSize, uint32_t order) +static dr_bool32 drflac__read_and_seek_residual(drflac_bs* bs, uint32_t blockSize, uint32_t order) { assert(bs != NULL); assert(blockSize != 0); @@ -1823,7 +1844,7 @@ static drBool32 drflac__read_and_seek_residual(drflac_bs* bs, uint32_t blockSize } -static drBool32 drflac__decode_samples__constant(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, int32_t* pDecodedSamples) +static dr_bool32 drflac__decode_samples__constant(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, int32_t* pDecodedSamples) { // Only a single sample needs to be decoded here. int32_t sample; @@ -1840,7 +1861,7 @@ static drBool32 drflac__decode_samples__constant(drflac_bs* bs, uint32_t blockSi return DR_TRUE; } -static drBool32 drflac__decode_samples__verbatim(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, int32_t* pDecodedSamples) +static dr_bool32 drflac__decode_samples__verbatim(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, int32_t* pDecodedSamples) { for (uint32_t i = 0; i < blockSize; ++i) { int32_t sample; @@ -1854,7 +1875,7 @@ static drBool32 drflac__decode_samples__verbatim(drflac_bs* bs, uint32_t blockSi return DR_TRUE; } -static drBool32 drflac__decode_samples__fixed(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, uint8_t lpcOrder, int32_t* pDecodedSamples) +static dr_bool32 drflac__decode_samples__fixed(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, uint8_t lpcOrder, int32_t* pDecodedSamples) { short lpcCoefficientsTable[5][4] = { {0, 0, 0, 0}, @@ -1882,7 +1903,7 @@ static drBool32 drflac__decode_samples__fixed(drflac_bs* bs, uint32_t blockSize, return DR_TRUE; } -static drBool32 drflac__decode_samples__lpc(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, uint8_t lpcOrder, int32_t* pDecodedSamples) +static dr_bool32 drflac__decode_samples__lpc(drflac_bs* bs, uint32_t blockSize, uint32_t bitsPerSample, uint8_t lpcOrder, int32_t* pDecodedSamples) { // Warm up samples. for (uint8_t i = 0; i < lpcOrder; ++i) { @@ -1925,7 +1946,7 @@ static drBool32 drflac__decode_samples__lpc(drflac_bs* bs, uint32_t blockSize, u } -static drBool32 drflac__read_next_frame_header(drflac_bs* bs, uint8_t streaminfoBitsPerSample, drflac_frame_header* header) +static dr_bool32 drflac__read_next_frame_header(drflac_bs* bs, uint8_t streaminfoBitsPerSample, drflac_frame_header* header) { assert(bs != NULL); assert(header != NULL); @@ -1983,7 +2004,7 @@ static drBool32 drflac__read_next_frame_header(drflac_bs* bs, uint8_t streaminfo } - drBool32 isVariableBlockSize = blockingStrategy == 1; + dr_bool32 isVariableBlockSize = blockingStrategy == 1; if (isVariableBlockSize) { uint64_t sampleNumber; if (!drflac__read_utf8_coded_number(bs, &sampleNumber)) { @@ -2055,7 +2076,7 @@ static drBool32 drflac__read_next_frame_header(drflac_bs* bs, uint8_t streaminfo return DR_TRUE; } -static drBool32 drflac__read_subframe_header(drflac_bs* bs, drflac_subframe* pSubframe) +static dr_bool32 drflac__read_subframe_header(drflac_bs* bs, drflac_subframe* pSubframe) { uint8_t header; if (!drflac__read_uint8(bs, 8, &header)) { @@ -2105,7 +2126,7 @@ static drBool32 drflac__read_subframe_header(drflac_bs* bs, drflac_subframe* pSu return DR_TRUE; } -static drBool32 drflac__decode_subframe(drflac_bs* bs, drflac_frame* frame, int subframeIndex, int32_t* pDecodedSamplesOut) +static dr_bool32 drflac__decode_subframe(drflac_bs* bs, drflac_frame* frame, int subframeIndex, int32_t* pDecodedSamplesOut) { assert(bs != NULL); assert(frame != NULL); @@ -2155,7 +2176,7 @@ static drBool32 drflac__decode_subframe(drflac_bs* bs, drflac_frame* frame, int return DR_TRUE; } -static drBool32 drflac__seek_subframe(drflac_bs* bs, drflac_frame* frame, int subframeIndex) +static dr_bool32 drflac__seek_subframe(drflac_bs* bs, drflac_frame* frame, int subframeIndex) { assert(bs != NULL); assert(frame != NULL); @@ -2249,7 +2270,7 @@ static DRFLAC_INLINE uint8_t drflac__get_channel_count_from_channel_assignment(i return lookup[channelAssignment]; } -static drBool32 drflac__decode_frame(drflac* pFlac) +static dr_bool32 drflac__decode_frame(drflac* pFlac) { // This function should be called while the stream is sitting on the first byte after the frame header. memset(pFlac->currentFrame.subframes, 0, sizeof(pFlac->currentFrame.subframes)); @@ -2273,7 +2294,7 @@ static drBool32 drflac__decode_frame(drflac* pFlac) return DR_TRUE; } -static drBool32 drflac__seek_frame(drflac* pFlac) +static dr_bool32 drflac__seek_frame(drflac* pFlac) { int channelCount = drflac__get_channel_count_from_channel_assignment(pFlac->currentFrame.header.channelAssignment); for (int i = 0; i < channelCount; ++i) @@ -2287,7 +2308,7 @@ static drBool32 drflac__seek_frame(drflac* pFlac) return drflac__seek_bits(&pFlac->bs, (DRFLAC_CACHE_L1_BITS_REMAINING(&pFlac->bs) & 7) + 16); } -static drBool32 drflac__read_and_decode_next_frame(drflac* pFlac) +static dr_bool32 drflac__read_and_decode_next_frame(drflac* pFlac) { assert(pFlac != NULL); @@ -2324,24 +2345,24 @@ static void drflac__get_current_frame_sample_range(drflac* pFlac, uint64_t* pFir } } -static drBool32 drflac__seek_to_first_frame(drflac* pFlac) +static dr_bool32 drflac__seek_to_first_frame(drflac* pFlac) { assert(pFlac != NULL); - drBool32 result = drflac__seek_to_byte(&pFlac->bs, pFlac->firstFramePos); + dr_bool32 result = drflac__seek_to_byte(&pFlac->bs, pFlac->firstFramePos); memset(&pFlac->currentFrame, 0, sizeof(pFlac->currentFrame)); return result; } -static DRFLAC_INLINE drBool32 drflac__seek_to_next_frame(drflac* pFlac) +static DRFLAC_INLINE dr_bool32 drflac__seek_to_next_frame(drflac* pFlac) { // This function should only ever be called while the decoder is sitting on the first byte past the FRAME_HEADER section. assert(pFlac != NULL); return drflac__seek_frame(pFlac); } -static drBool32 drflac__seek_to_frame_containing_sample(drflac* pFlac, uint64_t sampleIndex) +static dr_bool32 drflac__seek_to_frame_containing_sample(drflac* pFlac, uint64_t sampleIndex) { assert(pFlac != NULL); @@ -2372,7 +2393,7 @@ static drBool32 drflac__seek_to_frame_containing_sample(drflac* pFlac, uint64_t return DR_TRUE; } -static drBool32 drflac__seek_to_sample__brute_force(drflac* pFlac, uint64_t sampleIndex) +static dr_bool32 drflac__seek_to_sample__brute_force(drflac* pFlac, uint64_t sampleIndex) { if (!drflac__seek_to_frame_containing_sample(pFlac, sampleIndex)) { return DR_FALSE; @@ -2398,7 +2419,7 @@ static drBool32 drflac__seek_to_sample__brute_force(drflac* pFlac, uint64_t samp } -static drBool32 drflac__seek_to_sample__seek_table(drflac* pFlac, uint64_t sampleIndex) +static dr_bool32 drflac__seek_to_sample__seek_table(drflac* pFlac, uint64_t sampleIndex) { assert(pFlac != NULL); @@ -2508,7 +2529,7 @@ typedef struct uint64_t totalSampleCount; uint16_t maxBlockSize; uint64_t runningFilePos; - drBool32 hasMetadataBlocks; + dr_bool32 hasMetadataBlocks; #ifndef DR_FLAC_NO_OGG uint32_t oggSerial; @@ -2525,7 +2546,7 @@ static DRFLAC_INLINE void drflac__decode_block_header(uint32_t blockHeader, uint *blockSize = (blockHeader & 0xFFFFFF); } -static DRFLAC_INLINE drBool32 drflac__read_and_decode_block_header(drflac_read_proc onRead, void* pUserData, uint8_t* isLastBlock, uint8_t* blockType, uint32_t* blockSize) +static DRFLAC_INLINE dr_bool32 drflac__read_and_decode_block_header(drflac_read_proc onRead, void* pUserData, uint8_t* isLastBlock, uint8_t* blockType, uint32_t* blockSize) { uint32_t blockHeader; if (onRead(pUserData, &blockHeader, 4) != 4) { @@ -2536,7 +2557,7 @@ static DRFLAC_INLINE drBool32 drflac__read_and_decode_block_header(drflac_read_p return DR_TRUE; } -drBool32 drflac__read_streaminfo(drflac_read_proc onRead, void* pUserData, drflac_streaminfo* pStreamInfo) +dr_bool32 drflac__read_streaminfo(drflac_read_proc onRead, void* pUserData, drflac_streaminfo* pStreamInfo) { // min/max block size. uint32_t blockSizes; @@ -2579,7 +2600,7 @@ drBool32 drflac__read_streaminfo(drflac_read_proc onRead, void* pUserData, drfla return DR_TRUE; } -drBool32 drflac__read_and_decode_metadata(drflac* pFlac) +dr_bool32 drflac__read_and_decode_metadata(drflac* pFlac) { assert(pFlac != NULL); @@ -2823,7 +2844,7 @@ drBool32 drflac__read_and_decode_metadata(drflac* pFlac) return DR_TRUE; } -drBool32 drflac__init_private__native(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD) +dr_bool32 drflac__init_private__native(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD) { (void)onSeek; @@ -2869,7 +2890,7 @@ drBool32 drflac__init_private__native(drflac_init_info* pInit, drflac_read_proc } #ifndef DR_FLAC_NO_OGG -static DRFLAC_INLINE drBool32 drflac_ogg__is_capture_pattern(uint8_t pattern[4]) +static DRFLAC_INLINE dr_bool32 drflac_ogg__is_capture_pattern(uint8_t pattern[4]) { return pattern[0] == 'O' && pattern[1] == 'g' && pattern[2] == 'g' && pattern[3] == 'S'; } @@ -2889,7 +2910,7 @@ static DRFLAC_INLINE uint32_t drflac_ogg__get_page_body_size(drflac_ogg_page_hea return pageBodySize; } -drBool32 drflac_ogg__read_page_header_after_capture_pattern(drflac_read_proc onRead, void* pUserData, drflac_ogg_page_header* pHeader, uint32_t* pHeaderSize) +dr_bool32 drflac_ogg__read_page_header_after_capture_pattern(drflac_read_proc onRead, void* pUserData, drflac_ogg_page_header* pHeader, uint32_t* pHeaderSize) { if (onRead(pUserData, &pHeader->structureVersion, 1) != 1 || pHeader->structureVersion != 0) { return DR_FALSE; // Unknown structure version. Possibly corrupt stream. @@ -2920,7 +2941,7 @@ drBool32 drflac_ogg__read_page_header_after_capture_pattern(drflac_read_proc onR return DR_TRUE; } -drBool32 drflac_ogg__read_page_header(drflac_read_proc onRead, void* pUserData, drflac_ogg_page_header* pHeader, uint32_t* pHeaderSize) +dr_bool32 drflac_ogg__read_page_header(drflac_read_proc onRead, void* pUserData, drflac_ogg_page_header* pHeader, uint32_t* pHeaderSize) { uint8_t id[4]; if (onRead(pUserData, id, 4) != 4) { @@ -2961,7 +2982,7 @@ static size_t drflac_oggbs__read_physical(drflac_oggbs* oggbs, void* bufferOut, return bytesActuallyRead; } -static drBool32 drflac_oggbs__seek_physical(drflac_oggbs* oggbs, uint64_t offset, drflac_seek_origin origin) +static dr_bool32 drflac_oggbs__seek_physical(drflac_oggbs* oggbs, uint64_t offset, drflac_seek_origin origin) { if (origin == drflac_seek_origin_start) { @@ -3000,7 +3021,7 @@ static drBool32 drflac_oggbs__seek_physical(drflac_oggbs* oggbs, uint64_t offset } } -static drBool32 drflac_oggbs__goto_next_page(drflac_oggbs* oggbs) +static dr_bool32 drflac_oggbs__goto_next_page(drflac_oggbs* oggbs) { drflac_ogg_page_header header; for (;;) @@ -3049,12 +3070,12 @@ static uint8_t drflac_oggbs__get_current_segment_index(drflac_oggbs* oggbs, uint return iSeg; } -static drBool32 drflac_oggbs__seek_to_next_packet(drflac_oggbs* oggbs) +static dr_bool32 drflac_oggbs__seek_to_next_packet(drflac_oggbs* oggbs) { // The current packet ends when we get to the segment with a lacing value of < 255 which is not at the end of a page. for (;;) // <-- Loop over pages. { - drBool32 atEndOfPage = DR_FALSE; + dr_bool32 atEndOfPage = DR_FALSE; uint8_t bytesRemainingInSeg; uint8_t iFirstSeg = drflac_oggbs__get_current_segment_index(oggbs, &bytesRemainingInSeg); @@ -3099,7 +3120,7 @@ static drBool32 drflac_oggbs__seek_to_next_packet(drflac_oggbs* oggbs) } } -static drBool32 drflac_oggbs__seek_to_next_frame(drflac_oggbs* oggbs) +static dr_bool32 drflac_oggbs__seek_to_next_frame(drflac_oggbs* oggbs) { // The bitstream should be sitting on the first byte just after the header of the frame. @@ -3148,7 +3169,7 @@ static size_t drflac__on_read_ogg(void* pUserData, void* bufferOut, size_t bytes return bytesRead; } -static drBool32 drflac__on_seek_ogg(void* pUserData, int offset, drflac_seek_origin origin) +static dr_bool32 drflac__on_seek_ogg(void* pUserData, int offset, drflac_seek_origin origin) { drflac_oggbs* oggbs = (drflac_oggbs*)pUserData; assert(oggbs != NULL); @@ -3204,7 +3225,7 @@ static drBool32 drflac__on_seek_ogg(void* pUserData, int offset, drflac_seek_ori return DR_TRUE; } -drBool32 drflac_ogg__seek_to_sample(drflac* pFlac, uint64_t sample) +dr_bool32 drflac_ogg__seek_to_sample(drflac* pFlac, uint64_t sample) { drflac_oggbs* oggbs = (drflac_oggbs*)(((int32_t*)pFlac->pExtraData) + pFlac->maxBlockSize*pFlac->channels); @@ -3327,7 +3348,7 @@ drBool32 drflac_ogg__seek_to_sample(drflac* pFlac, uint64_t sample) } -drBool32 drflac__init_private__ogg(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD) +dr_bool32 drflac__init_private__ogg(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD) { // Pre: The bit stream should be sitting just past the 4-byte OggS capture pattern. @@ -3491,7 +3512,7 @@ drBool32 drflac__init_private__ogg(drflac_init_info* pInit, drflac_read_proc onR } #endif -drBool32 drflac__init_private(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD) +dr_bool32 drflac__init_private(drflac_init_info* pInit, drflac_read_proc onRead, drflac_seek_proc onSeek, drflac_meta_proc onMeta, void* pUserData, void* pUserDataMD) { if (pInit == NULL || onRead == NULL || onSeek == NULL) { return DR_FALSE; @@ -3610,7 +3631,7 @@ static size_t drflac__on_read_stdio(void* pUserData, void* bufferOut, size_t byt return fread(bufferOut, 1, bytesToRead, (FILE*)pUserData); } -static drBool32 drflac__on_seek_stdio(void* pUserData, int offset, drflac_seek_origin origin) +static dr_bool32 drflac__on_seek_stdio(void* pUserData, int offset, drflac_seek_origin origin) { assert(offset > 0 || (offset == 0 && origin == drflac_seek_origin_start)); @@ -3651,7 +3672,7 @@ static size_t drflac__on_read_stdio(void* pUserData, void* bufferOut, size_t byt return (size_t)bytesRead; } -static drBool32 drflac__on_seek_stdio(void* pUserData, int offset, drflac_seek_origin origin) +static dr_bool32 drflac__on_seek_stdio(void* pUserData, int offset, drflac_seek_origin origin) { assert(offset > 0 || (offset == 0 && origin == drflac_seek_origin_start)); @@ -3727,7 +3748,7 @@ static size_t drflac__on_read_memory(void* pUserData, void* bufferOut, size_t by return bytesToRead; } -static drBool32 drflac__on_seek_memory(void* pUserData, int offset, drflac_seek_origin origin) +static dr_bool32 drflac__on_seek_memory(void* pUserData, int offset, drflac_seek_origin origin) { drflac__memory_stream* memoryStream = (drflac__memory_stream*)pUserData; assert(memoryStream != NULL); @@ -4107,7 +4128,32 @@ uint64_t drflac_read_s32(drflac* pFlac, uint64_t samplesToRead, int32_t* bufferO return samplesRead; } -drBool32 drflac_seek_to_sample(drflac* pFlac, uint64_t sampleIndex) +uint64_t drflac_read_s16(drflac* pFlac, uint64_t samplesToRead, int16_t* pBufferOut) +{ + // This reads samples in 2 passes and can probably be optimized. + uint64_t samplesRead = 0; + + while (samplesToRead > 0) { + int32_t samples32[4096]; + uint64_t samplesJustRead = drflac_read_s32(pFlac, samplesToRead > 4096 ? 4096 : samplesToRead, samples32); + if (samplesJustRead == 0) { + break; // Reached the end. + } + + // s32 -> s16 + for (uint64_t i = 0; i < samplesJustRead; ++i) { + pBufferOut[i] = (int16_t)(samples32[i] >> 16); + } + + samplesRead += samplesJustRead; + samplesToRead -= samplesJustRead; + pBufferOut += samplesJustRead; + } + + return samplesRead; +} + +dr_bool32 drflac_seek_to_sample(drflac* pFlac, uint64_t sampleIndex) { if (pFlac == NULL) { return DR_FALSE; @@ -4147,7 +4193,7 @@ drBool32 drflac_seek_to_sample(drflac* pFlac, uint64_t sampleIndex) //// High Level APIs //// -int32_t* drflac__full_decode_and_close(drflac* pFlac, unsigned int* channelsOut, unsigned int* sampleRateOut, uint64_t* totalSampleCountOut) +int32_t* drflac__full_decode_and_close_s32(drflac* pFlac, unsigned int* channelsOut, unsigned int* sampleRateOut, uint64_t* totalSampleCountOut) { assert(pFlac != NULL); @@ -4218,6 +4264,77 @@ on_error: return NULL; } +int16_t* drflac__full_decode_and_close_s16(drflac* pFlac, unsigned int* channelsOut, unsigned int* sampleRateOut, uint64_t* totalSampleCountOut) +{ + assert(pFlac != NULL); + + int16_t* pSampleData = NULL; + uint64_t totalSampleCount = pFlac->totalSampleCount; + + if (totalSampleCount == 0) + { + int16_t buffer[4096]; + + size_t sampleDataBufferSize = sizeof(buffer); + pSampleData = (int16_t*)malloc(sampleDataBufferSize); + if (pSampleData == NULL) { + goto on_error; + } + + uint64_t samplesRead; + while ((samplesRead = (uint64_t)drflac_read_s16(pFlac, sizeof(buffer)/sizeof(buffer[0]), buffer)) > 0) + { + if (((totalSampleCount + samplesRead) * sizeof(int16_t)) > sampleDataBufferSize) { + sampleDataBufferSize *= 2; + int16_t* pNewSampleData = (int16_t*)realloc(pSampleData, sampleDataBufferSize); + if (pNewSampleData == NULL) { + free(pSampleData); + goto on_error; + } + + pSampleData = pNewSampleData; + } + + memcpy(pSampleData + totalSampleCount, buffer, (size_t)(samplesRead*sizeof(int16_t))); + totalSampleCount += samplesRead; + } + + // At this point everything should be decoded, but we just want to fill the unused part buffer with silence - need to + // protect those ears from random noise! + memset(pSampleData + totalSampleCount, 0, (size_t)(sampleDataBufferSize - totalSampleCount*sizeof(int16_t))); + } + else + { + uint64_t dataSize = totalSampleCount * sizeof(int16_t); + if (dataSize > SIZE_MAX) { + goto on_error; // The decoded data is too big. + } + + pSampleData = (int16_t*)malloc((size_t)dataSize); // <-- Safe cast as per the check above. + if (pSampleData == NULL) { + goto on_error; + } + + uint64_t samplesDecoded = drflac_read_s16(pFlac, pFlac->totalSampleCount, pSampleData); + if (samplesDecoded != pFlac->totalSampleCount) { + free(pSampleData); + goto on_error; // Something went wrong when decoding the FLAC stream. + } + } + + + if (sampleRateOut) *sampleRateOut = pFlac->sampleRate; + if (channelsOut) *channelsOut = pFlac->channels; + if (totalSampleCountOut) *totalSampleCountOut = totalSampleCount; + + drflac_close(pFlac); + return pSampleData; + +on_error: + drflac_close(pFlac); + return NULL; +} + int32_t* drflac_open_and_decode_s32(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount) { // Safety. @@ -4230,7 +4347,22 @@ int32_t* drflac_open_and_decode_s32(drflac_read_proc onRead, drflac_seek_proc on return NULL; } - return drflac__full_decode_and_close(pFlac, channels, sampleRate, totalSampleCount); + return drflac__full_decode_and_close_s32(pFlac, channels, sampleRate, totalSampleCount); +} + +int16_t* drflac_open_and_decode_s16(drflac_read_proc onRead, drflac_seek_proc onSeek, void* pUserData, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount) +{ + // Safety. + if (sampleRate) *sampleRate = 0; + if (channels) *channels = 0; + if (totalSampleCount) *totalSampleCount = 0; + + drflac* pFlac = drflac_open(onRead, onSeek, pUserData); + if (pFlac == NULL) { + return NULL; + } + + return drflac__full_decode_and_close_s16(pFlac, channels, sampleRate, totalSampleCount); } #ifndef DR_FLAC_NO_STDIO @@ -4245,7 +4377,21 @@ int32_t* drflac_open_and_decode_file_s32(const char* filename, unsigned int* cha return NULL; } - return drflac__full_decode_and_close(pFlac, channels, sampleRate, totalSampleCount); + return drflac__full_decode_and_close_s32(pFlac, channels, sampleRate, totalSampleCount); +} + +int16_t* drflac_open_and_decode_file_s16(const char* filename, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount) +{ + if (sampleRate) *sampleRate = 0; + if (channels) *channels = 0; + if (totalSampleCount) *totalSampleCount = 0; + + drflac* pFlac = drflac_open_file(filename); + if (pFlac == NULL) { + return NULL; + } + + return drflac__full_decode_and_close_s16(pFlac, channels, sampleRate, totalSampleCount); } #endif @@ -4260,7 +4406,21 @@ int32_t* drflac_open_and_decode_memory_s32(const void* data, size_t dataSize, un return NULL; } - return drflac__full_decode_and_close(pFlac, channels, sampleRate, totalSampleCount); + return drflac__full_decode_and_close_s32(pFlac, channels, sampleRate, totalSampleCount); +} + +int16_t* drflac_open_and_decode_memory_s16(const void* data, size_t dataSize, unsigned int* channels, unsigned int* sampleRate, uint64_t* totalSampleCount) +{ + if (sampleRate) *sampleRate = 0; + if (channels) *channels = 0; + if (totalSampleCount) *totalSampleCount = 0; + + drflac* pFlac = drflac_open_memory(data, dataSize); + if (pFlac == NULL) { + return NULL; + } + + return drflac__full_decode_and_close_s16(pFlac, channels, sampleRate, totalSampleCount); } void drflac_free(void* pSampleDataReturnedByOpenAndDecode) @@ -4305,6 +4465,15 @@ const char* drflac_next_vorbis_comment(drflac_vorbis_comment_iterator* pIter, ui // REVISION HISTORY // +// v0.4c - 2016-12-26 +// - Add support for signed 16-bit integer PCM decoding. +// +// v0.4b - 2016-10-23 +// - A minor change to dr_bool8 and dr_bool32 types. +// +// v0.4a - 2016-10-11 +// - Rename drBool32 to dr_bool32 for styling consistency. +// // v0.4 - 2016-09-29 // - API/ABI CHANGE: Use fixed size 32-bit booleans instead of the built-in bool type. // - API CHANGE: Rename drflac_open_and_decode*() to drflac_open_and_decode*_s32()