mirror of
https://github.com/mackron/miniaudio.git
synced 2026-04-22 00:06:59 +02:00
Update dr_wav.
This commit is contained in:
+27
-3
@@ -1,6 +1,6 @@
|
||||
/*
|
||||
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:
|
||||
|
||||
Reference in New Issue
Block a user