mirror of
https://github.com/ScrelliCopter/VGM-Tools
synced 2025-02-21 04:09:25 +11:00
70 lines
1.6 KiB
C
70 lines
1.6 KiB
C
/* (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;
|
|
}
|