diff --git a/miniaudio.h b/miniaudio.h index 2514a71c..b306409f 100644 --- a/miniaudio.h +++ b/miniaudio.h @@ -52905,9 +52905,10 @@ MA_API void ma_deinterleave_pcm_frames(ma_format format, ma_uint32 channels, ma_ { const ma_uint8* pSrcU8 = (const ma_uint8*)pInterleavedPCMFrames; ma_uint64 iPCMFrame; - for (iPCMFrame = 0; iPCMFrame < frameCount; ++iPCMFrame) { + + for (iPCMFrame = 0; iPCMFrame < frameCount; iPCMFrame += 1) { ma_uint32 iChannel; - for (iChannel = 0; iChannel < channels; ++iChannel) { + for (iChannel = 0; iChannel < channels; iChannel += 1) { ma_uint8* pDstU8 = (ma_uint8*)ppDeinterleavedPCMFrames[iChannel]; pDstU8[iPCMFrame] = pSrcU8[iPCMFrame*channels+iChannel]; } @@ -52918,9 +52919,9 @@ MA_API void ma_deinterleave_pcm_frames(ma_format format, ma_uint32 channels, ma_ { const ma_int16* pSrcS16 = (const ma_int16*)pInterleavedPCMFrames; ma_uint64 iPCMFrame; - for (iPCMFrame = 0; iPCMFrame < frameCount; ++iPCMFrame) { + for (iPCMFrame = 0; iPCMFrame < frameCount; iPCMFrame += 1) { ma_uint32 iChannel; - for (iChannel = 0; iChannel < channels; ++iChannel) { + for (iChannel = 0; iChannel < channels; iChannel += 1) { ma_int16* pDstS16 = (ma_int16*)ppDeinterleavedPCMFrames[iChannel]; pDstS16[iPCMFrame] = pSrcS16[iPCMFrame*channels+iChannel]; } @@ -52931,22 +52932,51 @@ MA_API void ma_deinterleave_pcm_frames(ma_format format, ma_uint32 channels, ma_ { const float* pSrcF32 = (const float*)pInterleavedPCMFrames; ma_uint64 iPCMFrame; - for (iPCMFrame = 0; iPCMFrame < frameCount; ++iPCMFrame) { + for (iPCMFrame = 0; iPCMFrame < frameCount; iPCMFrame += 1) { ma_uint32 iChannel; - for (iChannel = 0; iChannel < channels; ++iChannel) { + for (iChannel = 0; iChannel < channels; iChannel += 1) { float* pDstF32 = (float*)ppDeinterleavedPCMFrames[iChannel]; pDstF32[iPCMFrame] = pSrcF32[iPCMFrame*channels+iChannel]; } } } break; + case ma_format_s32: + { + const ma_int32* pSrcS32 = (const ma_int32*)pInterleavedPCMFrames; + ma_uint64 iPCMFrame; + for (iPCMFrame = 0; iPCMFrame < frameCount; iPCMFrame += 1) { + ma_uint32 iChannel; + for (iChannel = 0; iChannel < channels; iChannel += 1) { + ma_int32* pDstS32 = (ma_int32*)ppDeinterleavedPCMFrames[iChannel]; + pDstS32[iPCMFrame] = pSrcS32[iPCMFrame*channels+iChannel]; + } + } + } break; + + case ma_format_s24: + { + const ma_uint8* pSrcS24 = (const ma_uint8*)pInterleavedPCMFrames; + ma_uint64 iPCMFrame; + for (iPCMFrame = 0; iPCMFrame < frameCount; iPCMFrame += 1) { + ma_uint32 iChannel; + for (iChannel = 0; iChannel < channels; iChannel += 1) { + ma_uint8* pDstS24 = (ma_uint8*)ppDeinterleavedPCMFrames[iChannel]; + pDstS24[iPCMFrame + 0] = pSrcS24[(iPCMFrame*channels+iChannel)*3 + 0]; + pDstS24[iPCMFrame + 1] = pSrcS24[(iPCMFrame*channels+iChannel)*3 + 1]; + pDstS24[iPCMFrame + 2] = pSrcS24[(iPCMFrame*channels+iChannel)*3 + 2]; + } + } + } break; + + /* Generic fallback. Should never actually hit this. */ default: { ma_uint32 sampleSizeInBytes = ma_get_bytes_per_sample(format); ma_uint64 iPCMFrame; - for (iPCMFrame = 0; iPCMFrame < frameCount; ++iPCMFrame) { + for (iPCMFrame = 0; iPCMFrame < frameCount; iPCMFrame += 1) { ma_uint32 iChannel; - for (iChannel = 0; iChannel < channels; ++iChannel) { + for (iChannel = 0; iChannel < channels; iChannel += 1) { void* pDst = ma_offset_ptr(ppDeinterleavedPCMFrames[iChannel], iPCMFrame*sampleSizeInBytes); const void* pSrc = ma_offset_ptr(pInterleavedPCMFrames, (iPCMFrame*channels+iChannel)*sampleSizeInBytes); memcpy(pDst, pSrc, sampleSizeInBytes);