refactored wavetable constants

This commit is contained in:
2025-08-06 22:08:13 +02:00
parent 4bf46df821
commit 73332a7292
2 changed files with 20 additions and 16 deletions
+10 -9
View File
@@ -73,9 +73,10 @@ void WT_ModInit(wt_common_t *pCom)
pFileAll = fopen("build/wave_sweep.bin", "wb");
#endif
// Create waves from 16-bit raw data
// Create waves from rom waves
memset(pCom->waves, 0, sizeof(pCom->waves));
offset = 0;
for (i=0; i < 300; i++)
for (i=0; i < WT_ROM_NUM_WAVES; i++)
{
if (i > 245)
offset = 122;
@@ -172,8 +173,8 @@ void WT_ModInit(wt_common_t *pCom)
// Allocate memory
for (i=0; i < WT_NUM_WAVETABLES; i++)
{
pCom->ppWavetables[i] = (synth_float_t**)malloc(WT_WAVETABLE_SIZE*sizeof(synth_float_t*));
for (j=0; j < WT_WAVETABLE_SIZE; j++)
pCom->ppWavetables[i] = (synth_float_t**)malloc(WT_WAVETABLE_NUM_ENTRIES*sizeof(synth_float_t*));
for (j=0; j < WT_WAVETABLE_NUM_ENTRIES; j++)
{
pCom->ppWavetables[i][j] = (synth_float_t*)malloc(WT_WAVE_SIZE*sizeof(synth_float_t));
}
@@ -214,7 +215,7 @@ void WT_ModFree(wt_common_t *pCom)
for (i=0; i < WT_NUM_WAVETABLES; i++)
{
for (j=0; j < WT_WAVETABLE_SIZE; j++)
for (j=0; j < WT_WAVETABLE_NUM_ENTRIES; j++)
{
free(pCom->ppWavetables[i][j]);
}
@@ -309,7 +310,7 @@ void WT_ProcessDataV(wt_t *pObj, synth_float_t *pPitch, synth_float_t *pCV_fm, s
if (pObj->startup)
pObj->x = 0;
pObj->wt_index = (WT_WAVETABLE_SIZE-1)*jsy_max(0, jsy_min(1, pObj->param[WT_PARAM2_WAVETABLE_ENTRY] + pCV_pwm[i]));
pObj->wt_index = (WT_WAVETABLE_NUM_ENTRIES-1)*jsy_max(0, jsy_min(1, pObj->param[WT_PARAM2_WAVETABLE_ENTRY] + pCV_pwm[i]));
pObj->wt_start = (UINT32)pObj->wt_index;
if (pCV_fm)
@@ -321,7 +322,7 @@ void WT_ProcessDataV(wt_t *pObj, synth_float_t *pPitch, synth_float_t *pCV_fm, s
ni = (UINT32)(pObj->x*(WT_WAVE_SIZE));
w1 = pObj->pCom->ppWavetables[wt_table][pObj->wt_start][ni];
w2 = pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_SIZE-1), pObj->wt_start+1)][ni];
w2 = pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_NUM_ENTRIES-1), pObj->wt_start+1)][ni];
kmix = pObj->wt_index - (UINT32)pObj->wt_index;
out = w1*(1-kmix) + w2*kmix;
@@ -343,7 +344,7 @@ void WT_ProcessDataV(wt_t *pObj, synth_float_t *pPitch, synth_float_t *pCV_fm, s
if (pObj->startup)
pObj->x = 0;
pObj->wt_index = (WT_WAVETABLE_SIZE-1)*jsy_max(0, jsy_min(1, pObj->param[WT_PARAM2_WAVETABLE_ENTRY] + pCV_pwm[i]));
pObj->wt_index = (WT_WAVETABLE_NUM_ENTRIES-1)*jsy_max(0, jsy_min(1, pObj->param[WT_PARAM2_WAVETABLE_ENTRY] + pCV_pwm[i]));
pObj->wt_start = (UINT32)pObj->wt_index;
if (pCV_fm)
@@ -358,7 +359,7 @@ void WT_ProcessDataV(wt_t *pObj, synth_float_t *pPitch, synth_float_t *pCV_fm, s
ni_next = (ni + 1)&(WT_WAVE_SIZE-1);
w1 = (pObj->pCom->ppWavetables[wt_table][pObj->wt_start][ni_next] - pObj->pCom->ppWavetables[wt_table][pObj->wt_start][ni])*nf + pObj->pCom->ppWavetables[wt_table][pObj->wt_start][ni];
w2 = (pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_SIZE-1), pObj->wt_start+1)][ni_next] - pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_SIZE-1), pObj->wt_start+1)][ni])*nf + pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_SIZE-1), pObj->wt_start+1)][ni];
w2 = (pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_NUM_ENTRIES-1), pObj->wt_start+1)][ni_next] - pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_NUM_ENTRIES-1), pObj->wt_start+1)][ni])*nf + pObj->pCom->ppWavetables[wt_table][jsy_min((WT_WAVETABLE_NUM_ENTRIES-1), pObj->wt_start+1)][ni];
kmix = pObj->wt_index - (UINT32)pObj->wt_index;
out = w1*(1-kmix) + w2*kmix;
+10 -7
View File
@@ -5,10 +5,13 @@
#include "synth_types.h"
#define WT_NUM_WAVES 422
#define WT_WAVE_SIZE 128
#define WT_NUM_WAVETABLES 40
#define WT_WAVETABLE_SIZE 64
#define WT_ROM_NUM_WAVES 300
#define WT_ROM_WAVE_SIZE 64
#define WT_ROM_WAVES_SIZE (300*64)
#define WT_WAVE_SIZE (2*WT_ROM_WAVE_SIZE)
#define WT_TOTAL_NUM_WAVES 422
#define WT_NUM_WAVETABLES 40
#define WT_WAVETABLE_NUM_ENTRIES 64
// see
// https://jacajack.github.io/music/2019/12/10/PPG-EPROM.html
@@ -40,14 +43,14 @@ typedef struct _swt_descr_entry_t
typedef struct _swt_descr_t
{
UINT32 num_entries;
wt_descr_entry_t pEntry[WT_WAVETABLE_SIZE];
wt_descr_entry_t pEntry[WT_WAVETABLE_NUM_ENTRIES];
} wt_descr_t;
typedef struct _swt_common_t
{
unsigned char wave_rawdata[38400];
synth_float_t waves[WT_NUM_WAVES][WT_WAVE_SIZE];
unsigned char wave_rawdata[WT_ROM_WAVES_SIZE];
synth_float_t waves[WT_TOTAL_NUM_WAVES][WT_WAVE_SIZE];
synth_float_t **ppWavetables[WT_NUM_WAVETABLES]; //[WT_WAVETABLE_SIZE][WT_WAVE_SIZE];
} wt_common_t;