Commit 54a0d28f authored by David Reid's avatar David Reid

Update dr_wav.

parent a8317537
/*
WAV audio loader and writer. Choice of public domain or MIT-0. See license statements at the end of this file.
dr_wav - v0.10.0 - 2019-08-04
dr_wav - v0.10.1 - 2019-08-31
David Reid - mackron@gmail.com
*/
......@@ -2050,12 +2050,33 @@ drwav_bool32 drwav_init_ex(drwav* pWav, drwav_read_proc onRead, drwav_seek_proc
pWav->totalPCMFrameCount = dataChunkSize / drwav_get_bytes_per_pcm_frame(pWav);
if (pWav->translatedFormatTag == DR_WAVE_FORMAT_ADPCM) {
drwav_uint64 totalBlockHeaderSizeInBytes;
drwav_uint64 blockCount = dataChunkSize / fmt.blockAlign;
pWav->totalPCMFrameCount = (((blockCount * (fmt.blockAlign - (6*pWav->channels))) * 2)) / fmt.channels; /* x2 because two samples per byte. */
/* Make sure any trailing partial block is accounted for. */
if ((blockCount * fmt.blockAlign) < dataChunkSize) {
blockCount += 1;
}
/* We decode two samples per byte. There will be blockCount headers in the data chunk. This is enough to know how to calculate the total PCM frame count. */
totalBlockHeaderSizeInBytes = blockCount * (6*fmt.channels);
pWav->totalPCMFrameCount = ((dataChunkSize - totalBlockHeaderSizeInBytes) * 2) / fmt.channels;
}
if (pWav->translatedFormatTag == DR_WAVE_FORMAT_DVI_ADPCM) {
drwav_uint64 totalBlockHeaderSizeInBytes;
drwav_uint64 blockCount = dataChunkSize / fmt.blockAlign;
pWav->totalPCMFrameCount = (((blockCount * (fmt.blockAlign - (4*pWav->channels))) * 2) + (blockCount * pWav->channels)) / fmt.channels;
/* Make sure any trailing partial block is accounted for. */
if ((blockCount * fmt.blockAlign) < dataChunkSize) {
blockCount += 1;
}
/* We decode two samples per byte. There will be blockCount headers in the data chunk. This is enough to know how to calculate the total PCM frame count. */
totalBlockHeaderSizeInBytes = blockCount * (4*fmt.channels);
pWav->totalPCMFrameCount = ((dataChunkSize - totalBlockHeaderSizeInBytes) * 2) / fmt.channels;
/* The header includes a decoded sample for each channel which acts as the initial predictor sample. */
pWav->totalPCMFrameCount += blockCount;
}
}
......@@ -4465,6 +4486,9 @@ void drwav_free(void* pDataReturnedByOpenAndRead)
/*
REVISION HISTORY
================
v0.10.1 - 2019-08-31
- Correctly handle partial trailing ADPCM blocks.
v0.10.0 - 2019-08-04
- Remove deprecated APIs.
- Add wchar_t variants for file loading APIs:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment