mirror of
https://github.com/ScrelliCopter/VGM-Tools
synced 2025-02-21 04:09:25 +11:00
dsptool: refactor
This commit is contained in:
69
dsptools/libdsptool/math.c
Normal file
69
dsptools/libdsptool/math.c
Normal file
@@ -0,0 +1,69 @@
|
||||
/* (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;
|
||||
}
|
||||
Reference in New Issue
Block a user