/* (c) 2017 Alex Barney (MIT) */ #include "dsptool.h" uint32_t getBytesForAdpcmBuffer(uint32_t samples) { uint32_t frames = samples / SAMPLES_PER_FRAME; if (samples % SAMPLES_PER_FRAME) frames++; return frames * BYTES_PER_FRAME; } uint32_t getBytesForAdpcmInfo(void) { return sizeof(ADPCMINFO); } uint32_t getBytesForAdpcmSamples(uint32_t samples) { uint32_t extraBytes = 0; uint32_t frames = samples / SAMPLES_PER_FRAME; uint32_t extraSamples = samples % SAMPLES_PER_FRAME; if (extraSamples) extraBytes = (extraSamples / 2) + (extraSamples % 2) + 1; return BYTES_PER_FRAME * frames + extraBytes; } uint32_t getBytesForPcmBuffer(uint32_t samples) { uint32_t frames = samples / SAMPLES_PER_FRAME; if (samples % SAMPLES_PER_FRAME) frames++; return frames * SAMPLES_PER_FRAME * sizeof(int16_t); } uint32_t getBytesForPcmSamples(uint32_t samples) { return samples * sizeof(int16_t); } uint32_t getNibbleAddress(uint32_t samples) { uint32_t frames = samples / SAMPLES_PER_FRAME; uint32_t extraSamples = samples - (frames * SAMPLES_PER_FRAME); return NIBBLES_PER_FRAME * frames + extraSamples + 2; } uint32_t getNibblesForNSamples(uint32_t samples) { uint32_t frames = samples / SAMPLES_PER_FRAME; uint32_t extraSamples = samples - (frames * SAMPLES_PER_FRAME); uint32_t extraNibbles = extraSamples == 0 ? 0 : extraSamples + 2; return NIBBLES_PER_FRAME * frames + extraNibbles; } uint32_t getSampleForAdpcmNibble(uint32_t nibble) { uint32_t frames = nibble / NIBBLES_PER_FRAME; uint32_t extraNibbles = nibble - (frames * NIBBLES_PER_FRAME); uint32_t samples = SAMPLES_PER_FRAME * frames; return samples + extraNibbles - 2; }