mirror of
https://github.com/vsariola/sointu.git
synced 2025-05-28 03:10:24 -04:00
Add regression tests for delay (DLL) opcode.
This commit is contained in:
parent
a49fba060c
commit
4b9b1710eb
@ -37,7 +37,7 @@ regression_test(test_envelope "" ENVELOPE)
|
||||
regression_test(test_load "" LOAD)
|
||||
regression_test(test_store "" STORE)
|
||||
regression_test(test_globalstore)
|
||||
regression_test(test_panning ENVELOPE)
|
||||
regression_test(test_panning ENVELOPE PANNING)
|
||||
regression_test(test_multiple_instruments ENVELOPE)
|
||||
regression_test(test_fop_pop LOAD FOP_POP)
|
||||
regression_test(test_fop_addp LOAD)
|
||||
@ -51,7 +51,7 @@ regression_test(test_fop_mulp2 LOAD FOP_MULP2)
|
||||
regression_test(test_fop_loadnote)
|
||||
regression_test(test_vco_sine ENVELOPE VCO_SINE)
|
||||
regression_test(test_vco_trisaw ENVELOPE)
|
||||
regression_test(test_vco_noise ENVELOPE)
|
||||
regression_test(test_vco_noise ENVELOPE VCO_NOISE)
|
||||
regression_test(test_vco_pulse ENVELOPE VCO_PULSE)
|
||||
regression_test(test_vco_gate ENVELOPE)
|
||||
regression_test(test_vco_stereo ENVELOPE)
|
||||
@ -70,6 +70,12 @@ regression_test(test_dst_sh ENVELOPE)
|
||||
regression_test(test_dst_sh_modulation "VCO_SINE;ENVELOPE;STORE")
|
||||
regression_test(test_dst_stereo ENVELOPE)
|
||||
|
||||
|
||||
regression_test(test_dll "ENVELOPE;FOP_MULP;PANNING;VCO_SINE")
|
||||
regression_test(test_dll_chorus "ENVELOPE;FOP_MULP;PANNING;VCO_SINE")
|
||||
regression_test(test_dll_notetracking "ENVELOPE;FOP_MULP;PANNING;VCO_NOISE")
|
||||
regression_test(test_dll_reverb "ENVELOPE;FOP_MULP;PANNING;VCO_SINE")
|
||||
|
||||
regression_test(test_envelope_modulation "VCO_SINE;ENVELOPE;STORE")
|
||||
regression_test(test_envelope_16bit ENVELOPE "" test_envelope)
|
||||
target_compile_definitions(test_envelope_16bit PUBLIC GO4K_USE_16BIT_OUTPUT)
|
BIN
tests/expected_output/test_dll.raw
Normal file
BIN
tests/expected_output/test_dll.raw
Normal file
Binary file not shown.
BIN
tests/expected_output/test_dll_chorus.raw
Normal file
BIN
tests/expected_output/test_dll_chorus.raw
Normal file
Binary file not shown.
BIN
tests/expected_output/test_dll_notetracking.raw
Normal file
BIN
tests/expected_output/test_dll_notetracking.raw
Normal file
Binary file not shown.
BIN
tests/expected_output/test_dll_reverb.raw
Normal file
BIN
tests/expected_output/test_dll_reverb.raw
Normal file
Binary file not shown.
655
tests/test_dll.asm
Normal file
655
tests/test_dll.asm
Normal file
@ -0,0 +1,655 @@
|
||||
bits 32
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // useful macros
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // export function (make it accessable from main.cpp)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%macro export_func 1
|
||||
global _%1
|
||||
_%1:
|
||||
%endmacro
|
||||
%define USE_SECTIONS
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // basic defines for the song/synth
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define AUTHORING ; Use to export the current tick being rendered
|
||||
;%define SINGLE_TICK_RENDERING ; Use to render single tick on _4klang_render invocation ( requires AUTHORING enabled )
|
||||
%define SAMPLE_RATE 44100
|
||||
%define MAX_INSTRUMENTS 1
|
||||
%define MAX_VOICES 1
|
||||
%define HLD 1 ; // can be adjusted to give crinkler some other possibilities
|
||||
%define BPM 100
|
||||
%define MAX_PATTERNS 1
|
||||
%define PATTERN_SIZE_SHIFT 4
|
||||
%define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
|
||||
%define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
|
||||
%define SAMPLES_PER_TICK (SAMPLE_RATE*4*60/(BPM*16))
|
||||
%define DEF_LFO_NORMALIZE 0.000038
|
||||
%define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // some defines for unit usage, which reduce synth code size
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define GO4K_USE_16BIT_OUTPUT ; // removing this will output to 32bit floating point buffer
|
||||
;%define GO4K_USE_GROOVE_PATTERN ; // removing this skips groove pattern code
|
||||
;%define GO4K_USE_ENVELOPE_RECORDINGS ; // removing this skips envelope recording code
|
||||
;%define GO4K_USE_NOTE_RECORDINGS ; // removing this skips note recording code
|
||||
%define GO4K_USE_UNDENORMALIZE ; // removing this skips denormalization code in the units
|
||||
%define GO4K_CLIP_OUTPUT ; // removing this skips clipping code for the final output
|
||||
%define GO4K_USE_DST ; // removing this will skip DST unit
|
||||
%define GO4K_USE_DLL ; // removing this will skip DLL unit
|
||||
%define GO4K_USE_PAN ; // removing this will skip PAN unit
|
||||
%define GO4K_USE_GLOBAL_DLL ; // removing this will skip global dll processing
|
||||
%define GO4K_USE_FSTG ; // removing this will skip global store unit
|
||||
%define GO4K_USE_FLD ; // removing this will skip float load unit
|
||||
%define GO4K_USE_GLITCH ; // removing this will skip GLITCH unit
|
||||
%define GO4K_USE_ENV_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_ENV_MOD_GM ; // removing this will skip env gain modulation code
|
||||
%define GO4K_USE_ENV_MOD_ADR ; // removing this will skip env attack/decay/release modulation code
|
||||
%define GO4K_USE_VCO_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCO_PHASE_OFFSET ; // removing this will skip initial phase offset code
|
||||
%define GO4K_USE_VCO_SHAPE ; // removing this skips waveshaping code
|
||||
%define GO4K_USE_VCO_GATE ; // removing this skips gate code
|
||||
%define GO4K_USE_VCO_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCO_MOD_PM ; // removing this skips phase modulation code
|
||||
%define GO4K_USE_VCO_MOD_TM ; // removing this skips transpose modulation code
|
||||
%define GO4K_USE_VCO_MOD_DM ; // removing this skips detune modulation code
|
||||
%define GO4K_USE_VCO_MOD_CM ; // removing this skips color modulation code
|
||||
%define GO4K_USE_VCO_MOD_GM ; // removing this skips gain modulation code
|
||||
%define GO4K_USE_VCO_MOD_SM ; // removing this skips shaping modulation code
|
||||
%define GO4K_USE_VCO_STEREO ; // removing this skips stereo code
|
||||
%define GO4K_USE_VCF_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCF_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCF_MOD_RM ; // removing this skips resonance modulation code
|
||||
%define GO4K_USE_VCF_HIGH ; // removing this skips code for high output
|
||||
%define GO4K_USE_VCF_BAND ; // removing this skips code for band output
|
||||
%define GO4K_USE_VCF_PEAK ; // removing this skips code for peak output
|
||||
%define GO4K_USE_VCF_STEREO ; // removing this skips code for stereo filter output
|
||||
%define GO4K_USE_DST_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_DST_SH ; // removing this skips sample and hold code
|
||||
%define GO4K_USE_DST_MOD_DM ; // removing this skips distortion modulation code
|
||||
%define GO4K_USE_DST_MOD_SH ; // removing this skips sample and hold modulation code
|
||||
%define GO4K_USE_DST_STEREO ; // removing this skips stereo processing
|
||||
%define GO4K_USE_DLL_NOTE_SYNC ; // removing this will skip delay length adjusting code (karplus strong)
|
||||
%define GO4K_USE_DLL_CHORUS ; // removing this will skip delay chorus/flanger code
|
||||
%define GO4K_USE_DLL_CHORUS_CLAMP ; // removing this will skip chorus lfo phase clamping
|
||||
%define GO4K_USE_DLL_DAMP ; // removing this will skip dll damping code
|
||||
%define GO4K_USE_DLL_DC_FILTER ; // removing this will skip dll dc offset removal code
|
||||
%define GO4K_USE_FSTG_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_PAN_MOD ; // removing this will skip panning modulation code
|
||||
%define GO4K_USE_OUT_MOD_AM ; // removing this skips output aux send modulation code
|
||||
%define GO4K_USE_OUT_MOD_GM ; // removing this skips output gain modulation code
|
||||
%define GO4K_USE_WAVESHAPER_CLIP ; // removing this will skip clipping code
|
||||
%define GO4K_USE_FLD_MOD_VM ; // removing this will skip float load modulation code
|
||||
%define GO4K_USE_DLL_MOD ; // define this to enable modulations for delay line
|
||||
%define GO4K_USE_DLL_MOD_PM ; // define this to enable pregain modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_FM ; // define this to enable feebback modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_IM ; // define this to enable dry modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_DM ; // define this to enable damping modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_SM ; // define this to enable lfo freq modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_AM ; // define this to enable lfo depth modulation for delay line
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // synth defines
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%define MAX_DELAY 65536
|
||||
%define MAX_UNITS 64
|
||||
%define MAX_UNIT_SLOTS 16
|
||||
%define GO4K_BEGIN_CMDDEF(def_name)
|
||||
%define GO4K_END_CMDDEF db 0
|
||||
%define GO4K_BEGIN_PARAMDEF(def_name)
|
||||
%define GO4K_END_PARAMDEF
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ENV structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ENV_ID equ 1
|
||||
%macro GO4K_ENV 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ATTAC(val) val
|
||||
%define DECAY(val) val
|
||||
%define SUSTAIN(val) val
|
||||
%define RELEASE(val) val
|
||||
%define GAIN(val) val
|
||||
struc go4kENV_val
|
||||
;// unit paramters
|
||||
.attac resd 1
|
||||
.decay resd 1
|
||||
.sustain resd 1
|
||||
.release resd 1
|
||||
.gain resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kENV_wrk
|
||||
;// work variables
|
||||
.state resd 1
|
||||
.level resd 1
|
||||
;// modulation targets
|
||||
.gm resd 1
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.rm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%define ENV_STATE_ATTAC 0
|
||||
%define ENV_STATE_DECAY 1
|
||||
%define ENV_STATE_SUSTAIN 2
|
||||
%define ENV_STATE_RELEASE 3
|
||||
%define ENV_STATE_OFF 4
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCO structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCO_ID equ 2
|
||||
|
||||
%macro GO4K_VCO 8
|
||||
db %1
|
||||
db %2
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
db %3
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
db %4
|
||||
%endif
|
||||
db %5
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
db %6
|
||||
%else
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define TRANSPOSE(val) val
|
||||
%define DETUNE(val) val
|
||||
%define PHASE(val) val
|
||||
%define GATES(val) val
|
||||
%define COLOR(val) val
|
||||
%define SHAPE(val) val
|
||||
%define FLAGS(val) val
|
||||
%define SINE 0x01
|
||||
%define TRISAW 0x02
|
||||
%define PULSE 0x04
|
||||
%define NOISE 0x08
|
||||
%define LFO 0x10
|
||||
%define GATE 0x20
|
||||
%define VCO_STEREO 0x40
|
||||
struc go4kVCO_val
|
||||
;// unit paramters
|
||||
.transpose resd 1
|
||||
.detune resd 1
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
.phaseofs resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
.gate resd 1
|
||||
%endif
|
||||
.color resd 1
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
.shape resd 1
|
||||
%endif
|
||||
.gain resd 1
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCO_wrk
|
||||
;// work variables
|
||||
.phase resd 1
|
||||
;// modulation targets
|
||||
.tm resd 1
|
||||
.dm resd 1
|
||||
.fm resd 1
|
||||
.pm resd 1
|
||||
.cm resd 1
|
||||
.sm resd 1
|
||||
.gm resd 1
|
||||
;// stero variables
|
||||
.phase2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCF structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCF_ID equ 3
|
||||
%macro GO4K_VCF 3
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%endmacro
|
||||
%define LOWPASS 0x1
|
||||
%define HIGHPASS 0x2
|
||||
%define BANDPASS 0x4
|
||||
%define BANDSTOP 0x3
|
||||
%define ALLPASS 0x7
|
||||
%define PEAK 0x8
|
||||
%define STEREO 0x10
|
||||
%define FREQUENCY(val) val
|
||||
%define RESONANCE(val) val
|
||||
%define VCFTYPE(val) val
|
||||
struc go4kVCF_val
|
||||
;// unit paramters
|
||||
.freq resd 1
|
||||
.res resd 1
|
||||
.type resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCF_wrk
|
||||
;// work variables
|
||||
.low resd 1
|
||||
.high resd 1
|
||||
.band resd 1
|
||||
.freq resd 1 ;// unused but kept so modulation target offsets stay same
|
||||
;// modulation targets
|
||||
.fm resd 1
|
||||
.rm resd 1
|
||||
;// stereo variables
|
||||
.low2 resd 1
|
||||
.high2 resd 1
|
||||
.band2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DST_ID equ 4
|
||||
%macro GO4K_DST 3
|
||||
db %1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
db %2
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%else
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%endif
|
||||
%endmacro
|
||||
%define DRIVE(val) val
|
||||
%define SNHFREQ(val) val
|
||||
%define FLAGS(val) val
|
||||
struc go4kDST_val
|
||||
;// unit paramters
|
||||
.drive resd 1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
.snhfreq resd 1
|
||||
%endif
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDST_wrk
|
||||
;// work variables
|
||||
.out resd 1
|
||||
.snhphase resd 1
|
||||
;// modulation targets
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
;// stereo variables
|
||||
.out2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DLL structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DLL_ID equ 5
|
||||
%macro GO4K_DLL 8
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
db %4
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
db %5
|
||||
db %6
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define PREGAIN(val) val
|
||||
%define DRY(val) val
|
||||
%define FEEDBACK(val) val
|
||||
%define DEPTH(val) val
|
||||
%define DAMP(val) val
|
||||
%define DELAY(val) val
|
||||
%define COUNT(val) val
|
||||
struc go4kDLL_val
|
||||
;// unit paramters
|
||||
.pregain resd 1
|
||||
.dry resd 1
|
||||
.feedback resd 1
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
.damp resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
.freq resd 1
|
||||
.depth
|
||||
%endif
|
||||
.delay resd 1
|
||||
.count resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.dcin resd 1
|
||||
.dcout resd 1
|
||||
.phase resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk2
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.fm resd 1
|
||||
.im resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.am resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FOP structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FOP_ID equ 6
|
||||
%macro GO4K_FOP 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OP(val) val
|
||||
%define FOP_POP 0x1
|
||||
%define FOP_ADDP 0x2
|
||||
%define FOP_MULP 0x3
|
||||
%define FOP_PUSH 0x4
|
||||
%define FOP_XCH 0x5
|
||||
%define FOP_ADD 0x6
|
||||
%define FOP_MUL 0x7
|
||||
%define FOP_ADDP2 0x8
|
||||
%define FOP_LOADNOTE 0x9
|
||||
%define FOP_MULP2 0xa
|
||||
struc go4kFOP_val
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFOP_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FST_ID equ 7
|
||||
%macro GO4K_FST 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
%define AMOUNT(val) val
|
||||
%define DEST(val) val
|
||||
%define FST_SET 0x0000
|
||||
%define FST_ADD 0x4000
|
||||
%define FST_POP 0x8000
|
||||
struc go4kFST_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFST_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // PAN structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_PAN_ID equ 8
|
||||
%macro GO4K_PAN 1
|
||||
%ifdef GO4K_USE_PAN
|
||||
db %1
|
||||
%endif
|
||||
%endmacro
|
||||
%define PANNING(val) val
|
||||
struc go4kPAN_val
|
||||
%ifdef GO4K_USE_PAN
|
||||
.panning resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kPAN_wrk
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // OUT structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_OUT_ID equ 9
|
||||
%macro GO4K_OUT 2
|
||||
db %1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
db %2
|
||||
%endif
|
||||
%endmacro
|
||||
%define AUXSEND(val) val
|
||||
struc go4kOUT_val
|
||||
.gain resd 1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
.auxsend resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kOUT_wrk
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.gm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ACC structs (this is for the synth def only)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ACC_ID equ 10
|
||||
%macro GO4K_ACC 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OUTPUT 0
|
||||
%define AUX 8
|
||||
%define ACCTYPE(val) val
|
||||
struc go4kACC_val
|
||||
.acctype resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kACC_wrk
|
||||
.size
|
||||
endstruc
|
||||
%ifdef GO4K_USE_FLD
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FLD structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FLD_ID equ 11
|
||||
%macro GO4K_FLD 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define VALUE(val) val
|
||||
struc go4kFLD_val
|
||||
.value resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFLD_wrk
|
||||
;// modulation targets
|
||||
.vm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_GLITCH
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // GLITCH structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_GLITCH_ID equ 12
|
||||
%macro GO4K_GLITCH 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ACTIVE(val) val
|
||||
%define SLICEFACTOR(val)val
|
||||
%define PITCHFACTOR(val)val
|
||||
%define SLICESIZE(val) val
|
||||
struc go4kGLITCH_val
|
||||
;// unit paramters
|
||||
.active resd 1
|
||||
.dry resd 1
|
||||
.dsize resd 1
|
||||
.dpitch resd 1
|
||||
.slicesize resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.slizesize resd 1
|
||||
.slicepitch resd 1
|
||||
.unused resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk2
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_FSTG
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FSTG structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FSTG_ID equ 13
|
||||
%macro GO4K_FSTG 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
struc go4kFSTG_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFSTG_wrk
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Voice struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_instrument
|
||||
.release resd 1
|
||||
.note resd 1
|
||||
.workspace resd MAX_UNITS*MAX_UNIT_SLOTS
|
||||
.dlloutl resd 1
|
||||
.dlloutr resd 1
|
||||
.outl resd 1
|
||||
.outr resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Synth struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_synth
|
||||
.instruments resb go4k_instrument.size * MAX_INSTRUMENTS * MAX_VOICES
|
||||
.global resb go4k_instrument.size * MAX_VOICES
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Data, reduced by 967 patterns
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc1 data align=1
|
||||
%else
|
||||
section .data align=1
|
||||
%endif
|
||||
go4k_patterns
|
||||
db 64, 0, 68, 0, 32, 0, 0, 0, 75, 0, 78, 0, 0, 0, 0, 0,
|
||||
go4k_patterns_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Index List
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc2 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_pattern_lists
|
||||
Instrument0List db 0,
|
||||
go4k_pattern_lists_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Instrument Commands
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc3 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_instructions
|
||||
GO4K_BEGIN_CMDDEF(Instrument0)
|
||||
db GO4K_ENV_ID
|
||||
db GO4K_VCO_ID
|
||||
db GO4K_FOP_ID
|
||||
db GO4K_DLL_ID
|
||||
db GO4K_PAN_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
;// global commands
|
||||
GO4K_BEGIN_CMDDEF(Global)
|
||||
db GO4K_ACC_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
go4k_synth_instructions_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Intrument Data
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc4 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_parameter_values
|
||||
GO4K_BEGIN_PARAMDEF(Instrument0)
|
||||
GO4K_ENV ATTAC(80),DECAY(80),SUSTAIN(64),RELEASE(80),GAIN(128)
|
||||
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE)
|
||||
GO4K_FOP OP(FOP_MULP)
|
||||
GO4K_DLL PREGAIN(40),DRY(128),FEEDBACK(125),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(1),COUNT(1)
|
||||
GO4K_PAN PANNING(64)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
;// global parameters
|
||||
GO4K_BEGIN_PARAMDEF(Global)
|
||||
GO4K_ACC ACCTYPE(OUTPUT)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
go4k_synth_parameter_values_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Delay/Reverb Times
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc5 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL
|
||||
global _go4k_delay_times
|
||||
_go4k_delay_times
|
||||
dw 0
|
||||
dw 11025
|
||||
%endif
|
||||
|
||||
section .data
|
||||
|
||||
global _test_max_samples
|
||||
_test_max_samples dd MAX_SAMPLES
|
||||
|
||||
%include "../src/4klang.inc"
|
655
tests/test_dll_chorus.asm
Normal file
655
tests/test_dll_chorus.asm
Normal file
@ -0,0 +1,655 @@
|
||||
bits 32
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // useful macros
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // export function (make it accessable from main.cpp)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%macro export_func 1
|
||||
global _%1
|
||||
_%1:
|
||||
%endmacro
|
||||
%define USE_SECTIONS
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // basic defines for the song/synth
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define AUTHORING ; Use to export the current tick being rendered
|
||||
;%define SINGLE_TICK_RENDERING ; Use to render single tick on _4klang_render invocation ( requires AUTHORING enabled )
|
||||
%define SAMPLE_RATE 44100
|
||||
%define MAX_INSTRUMENTS 1
|
||||
%define MAX_VOICES 1
|
||||
%define HLD 1 ; // can be adjusted to give crinkler some other possibilities
|
||||
%define BPM 100
|
||||
%define MAX_PATTERNS 1
|
||||
%define PATTERN_SIZE_SHIFT 4
|
||||
%define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
|
||||
%define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
|
||||
%define SAMPLES_PER_TICK (SAMPLE_RATE*4*60/(BPM*16))
|
||||
%define DEF_LFO_NORMALIZE 0.000038
|
||||
%define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // some defines for unit usage, which reduce synth code size
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define GO4K_USE_16BIT_OUTPUT ; // removing this will output to 32bit floating point buffer
|
||||
;%define GO4K_USE_GROOVE_PATTERN ; // removing this skips groove pattern code
|
||||
;%define GO4K_USE_ENVELOPE_RECORDINGS ; // removing this skips envelope recording code
|
||||
;%define GO4K_USE_NOTE_RECORDINGS ; // removing this skips note recording code
|
||||
%define GO4K_USE_UNDENORMALIZE ; // removing this skips denormalization code in the units
|
||||
%define GO4K_CLIP_OUTPUT ; // removing this skips clipping code for the final output
|
||||
%define GO4K_USE_DST ; // removing this will skip DST unit
|
||||
%define GO4K_USE_DLL ; // removing this will skip DLL unit
|
||||
%define GO4K_USE_PAN ; // removing this will skip PAN unit
|
||||
%define GO4K_USE_GLOBAL_DLL ; // removing this will skip global dll processing
|
||||
%define GO4K_USE_FSTG ; // removing this will skip global store unit
|
||||
%define GO4K_USE_FLD ; // removing this will skip float load unit
|
||||
%define GO4K_USE_GLITCH ; // removing this will skip GLITCH unit
|
||||
%define GO4K_USE_ENV_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_ENV_MOD_GM ; // removing this will skip env gain modulation code
|
||||
%define GO4K_USE_ENV_MOD_ADR ; // removing this will skip env attack/decay/release modulation code
|
||||
%define GO4K_USE_VCO_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCO_PHASE_OFFSET ; // removing this will skip initial phase offset code
|
||||
%define GO4K_USE_VCO_SHAPE ; // removing this skips waveshaping code
|
||||
%define GO4K_USE_VCO_GATE ; // removing this skips gate code
|
||||
%define GO4K_USE_VCO_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCO_MOD_PM ; // removing this skips phase modulation code
|
||||
%define GO4K_USE_VCO_MOD_TM ; // removing this skips transpose modulation code
|
||||
%define GO4K_USE_VCO_MOD_DM ; // removing this skips detune modulation code
|
||||
%define GO4K_USE_VCO_MOD_CM ; // removing this skips color modulation code
|
||||
%define GO4K_USE_VCO_MOD_GM ; // removing this skips gain modulation code
|
||||
%define GO4K_USE_VCO_MOD_SM ; // removing this skips shaping modulation code
|
||||
%define GO4K_USE_VCO_STEREO ; // removing this skips stereo code
|
||||
%define GO4K_USE_VCF_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCF_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCF_MOD_RM ; // removing this skips resonance modulation code
|
||||
%define GO4K_USE_VCF_HIGH ; // removing this skips code for high output
|
||||
%define GO4K_USE_VCF_BAND ; // removing this skips code for band output
|
||||
%define GO4K_USE_VCF_PEAK ; // removing this skips code for peak output
|
||||
%define GO4K_USE_VCF_STEREO ; // removing this skips code for stereo filter output
|
||||
%define GO4K_USE_DST_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_DST_SH ; // removing this skips sample and hold code
|
||||
%define GO4K_USE_DST_MOD_DM ; // removing this skips distortion modulation code
|
||||
%define GO4K_USE_DST_MOD_SH ; // removing this skips sample and hold modulation code
|
||||
%define GO4K_USE_DST_STEREO ; // removing this skips stereo processing
|
||||
%define GO4K_USE_DLL_NOTE_SYNC ; // removing this will skip delay length adjusting code (karplus strong)
|
||||
%define GO4K_USE_DLL_CHORUS ; // removing this will skip delay chorus/flanger code
|
||||
%define GO4K_USE_DLL_CHORUS_CLAMP ; // removing this will skip chorus lfo phase clamping
|
||||
%define GO4K_USE_DLL_DAMP ; // removing this will skip dll damping code
|
||||
%define GO4K_USE_DLL_DC_FILTER ; // removing this will skip dll dc offset removal code
|
||||
%define GO4K_USE_FSTG_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_PAN_MOD ; // removing this will skip panning modulation code
|
||||
%define GO4K_USE_OUT_MOD_AM ; // removing this skips output aux send modulation code
|
||||
%define GO4K_USE_OUT_MOD_GM ; // removing this skips output gain modulation code
|
||||
%define GO4K_USE_WAVESHAPER_CLIP ; // removing this will skip clipping code
|
||||
%define GO4K_USE_FLD_MOD_VM ; // removing this will skip float load modulation code
|
||||
%define GO4K_USE_DLL_MOD ; // define this to enable modulations for delay line
|
||||
%define GO4K_USE_DLL_MOD_PM ; // define this to enable pregain modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_FM ; // define this to enable feebback modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_IM ; // define this to enable dry modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_DM ; // define this to enable damping modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_SM ; // define this to enable lfo freq modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_AM ; // define this to enable lfo depth modulation for delay line
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // synth defines
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%define MAX_DELAY 65536
|
||||
%define MAX_UNITS 64
|
||||
%define MAX_UNIT_SLOTS 16
|
||||
%define GO4K_BEGIN_CMDDEF(def_name)
|
||||
%define GO4K_END_CMDDEF db 0
|
||||
%define GO4K_BEGIN_PARAMDEF(def_name)
|
||||
%define GO4K_END_PARAMDEF
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ENV structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ENV_ID equ 1
|
||||
%macro GO4K_ENV 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ATTAC(val) val
|
||||
%define DECAY(val) val
|
||||
%define SUSTAIN(val) val
|
||||
%define RELEASE(val) val
|
||||
%define GAIN(val) val
|
||||
struc go4kENV_val
|
||||
;// unit paramters
|
||||
.attac resd 1
|
||||
.decay resd 1
|
||||
.sustain resd 1
|
||||
.release resd 1
|
||||
.gain resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kENV_wrk
|
||||
;// work variables
|
||||
.state resd 1
|
||||
.level resd 1
|
||||
;// modulation targets
|
||||
.gm resd 1
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.rm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%define ENV_STATE_ATTAC 0
|
||||
%define ENV_STATE_DECAY 1
|
||||
%define ENV_STATE_SUSTAIN 2
|
||||
%define ENV_STATE_RELEASE 3
|
||||
%define ENV_STATE_OFF 4
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCO structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCO_ID equ 2
|
||||
|
||||
%macro GO4K_VCO 8
|
||||
db %1
|
||||
db %2
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
db %3
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
db %4
|
||||
%endif
|
||||
db %5
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
db %6
|
||||
%else
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define TRANSPOSE(val) val
|
||||
%define DETUNE(val) val
|
||||
%define PHASE(val) val
|
||||
%define GATES(val) val
|
||||
%define COLOR(val) val
|
||||
%define SHAPE(val) val
|
||||
%define FLAGS(val) val
|
||||
%define SINE 0x01
|
||||
%define TRISAW 0x02
|
||||
%define PULSE 0x04
|
||||
%define NOISE 0x08
|
||||
%define LFO 0x10
|
||||
%define GATE 0x20
|
||||
%define VCO_STEREO 0x40
|
||||
struc go4kVCO_val
|
||||
;// unit paramters
|
||||
.transpose resd 1
|
||||
.detune resd 1
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
.phaseofs resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
.gate resd 1
|
||||
%endif
|
||||
.color resd 1
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
.shape resd 1
|
||||
%endif
|
||||
.gain resd 1
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCO_wrk
|
||||
;// work variables
|
||||
.phase resd 1
|
||||
;// modulation targets
|
||||
.tm resd 1
|
||||
.dm resd 1
|
||||
.fm resd 1
|
||||
.pm resd 1
|
||||
.cm resd 1
|
||||
.sm resd 1
|
||||
.gm resd 1
|
||||
;// stero variables
|
||||
.phase2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCF structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCF_ID equ 3
|
||||
%macro GO4K_VCF 3
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%endmacro
|
||||
%define LOWPASS 0x1
|
||||
%define HIGHPASS 0x2
|
||||
%define BANDPASS 0x4
|
||||
%define BANDSTOP 0x3
|
||||
%define ALLPASS 0x7
|
||||
%define PEAK 0x8
|
||||
%define STEREO 0x10
|
||||
%define FREQUENCY(val) val
|
||||
%define RESONANCE(val) val
|
||||
%define VCFTYPE(val) val
|
||||
struc go4kVCF_val
|
||||
;// unit paramters
|
||||
.freq resd 1
|
||||
.res resd 1
|
||||
.type resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCF_wrk
|
||||
;// work variables
|
||||
.low resd 1
|
||||
.high resd 1
|
||||
.band resd 1
|
||||
.freq resd 1 ;// unused but kept so modulation target offsets stay same
|
||||
;// modulation targets
|
||||
.fm resd 1
|
||||
.rm resd 1
|
||||
;// stereo variables
|
||||
.low2 resd 1
|
||||
.high2 resd 1
|
||||
.band2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DST_ID equ 4
|
||||
%macro GO4K_DST 3
|
||||
db %1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
db %2
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%else
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%endif
|
||||
%endmacro
|
||||
%define DRIVE(val) val
|
||||
%define SNHFREQ(val) val
|
||||
%define FLAGS(val) val
|
||||
struc go4kDST_val
|
||||
;// unit paramters
|
||||
.drive resd 1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
.snhfreq resd 1
|
||||
%endif
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDST_wrk
|
||||
;// work variables
|
||||
.out resd 1
|
||||
.snhphase resd 1
|
||||
;// modulation targets
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
;// stereo variables
|
||||
.out2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DLL structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DLL_ID equ 5
|
||||
%macro GO4K_DLL 8
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
db %4
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
db %5
|
||||
db %6
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define PREGAIN(val) val
|
||||
%define DRY(val) val
|
||||
%define FEEDBACK(val) val
|
||||
%define DEPTH(val) val
|
||||
%define DAMP(val) val
|
||||
%define DELAY(val) val
|
||||
%define COUNT(val) val
|
||||
struc go4kDLL_val
|
||||
;// unit paramters
|
||||
.pregain resd 1
|
||||
.dry resd 1
|
||||
.feedback resd 1
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
.damp resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
.freq resd 1
|
||||
.depth
|
||||
%endif
|
||||
.delay resd 1
|
||||
.count resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.dcin resd 1
|
||||
.dcout resd 1
|
||||
.phase resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk2
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.fm resd 1
|
||||
.im resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.am resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FOP structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FOP_ID equ 6
|
||||
%macro GO4K_FOP 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OP(val) val
|
||||
%define FOP_POP 0x1
|
||||
%define FOP_ADDP 0x2
|
||||
%define FOP_MULP 0x3
|
||||
%define FOP_PUSH 0x4
|
||||
%define FOP_XCH 0x5
|
||||
%define FOP_ADD 0x6
|
||||
%define FOP_MUL 0x7
|
||||
%define FOP_ADDP2 0x8
|
||||
%define FOP_LOADNOTE 0x9
|
||||
%define FOP_MULP2 0xa
|
||||
struc go4kFOP_val
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFOP_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FST_ID equ 7
|
||||
%macro GO4K_FST 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
%define AMOUNT(val) val
|
||||
%define DEST(val) val
|
||||
%define FST_SET 0x0000
|
||||
%define FST_ADD 0x4000
|
||||
%define FST_POP 0x8000
|
||||
struc go4kFST_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFST_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // PAN structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_PAN_ID equ 8
|
||||
%macro GO4K_PAN 1
|
||||
%ifdef GO4K_USE_PAN
|
||||
db %1
|
||||
%endif
|
||||
%endmacro
|
||||
%define PANNING(val) val
|
||||
struc go4kPAN_val
|
||||
%ifdef GO4K_USE_PAN
|
||||
.panning resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kPAN_wrk
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // OUT structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_OUT_ID equ 9
|
||||
%macro GO4K_OUT 2
|
||||
db %1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
db %2
|
||||
%endif
|
||||
%endmacro
|
||||
%define AUXSEND(val) val
|
||||
struc go4kOUT_val
|
||||
.gain resd 1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
.auxsend resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kOUT_wrk
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.gm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ACC structs (this is for the synth def only)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ACC_ID equ 10
|
||||
%macro GO4K_ACC 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OUTPUT 0
|
||||
%define AUX 8
|
||||
%define ACCTYPE(val) val
|
||||
struc go4kACC_val
|
||||
.acctype resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kACC_wrk
|
||||
.size
|
||||
endstruc
|
||||
%ifdef GO4K_USE_FLD
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FLD structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FLD_ID equ 11
|
||||
%macro GO4K_FLD 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define VALUE(val) val
|
||||
struc go4kFLD_val
|
||||
.value resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFLD_wrk
|
||||
;// modulation targets
|
||||
.vm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_GLITCH
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // GLITCH structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_GLITCH_ID equ 12
|
||||
%macro GO4K_GLITCH 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ACTIVE(val) val
|
||||
%define SLICEFACTOR(val)val
|
||||
%define PITCHFACTOR(val)val
|
||||
%define SLICESIZE(val) val
|
||||
struc go4kGLITCH_val
|
||||
;// unit paramters
|
||||
.active resd 1
|
||||
.dry resd 1
|
||||
.dsize resd 1
|
||||
.dpitch resd 1
|
||||
.slicesize resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.slizesize resd 1
|
||||
.slicepitch resd 1
|
||||
.unused resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk2
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_FSTG
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FSTG structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FSTG_ID equ 13
|
||||
%macro GO4K_FSTG 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
struc go4kFSTG_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFSTG_wrk
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Voice struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_instrument
|
||||
.release resd 1
|
||||
.note resd 1
|
||||
.workspace resd MAX_UNITS*MAX_UNIT_SLOTS
|
||||
.dlloutl resd 1
|
||||
.dlloutr resd 1
|
||||
.outl resd 1
|
||||
.outr resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Synth struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_synth
|
||||
.instruments resb go4k_instrument.size * MAX_INSTRUMENTS * MAX_VOICES
|
||||
.global resb go4k_instrument.size * MAX_VOICES
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Data, reduced by 967 patterns
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc1 data align=1
|
||||
%else
|
||||
section .data align=1
|
||||
%endif
|
||||
go4k_patterns
|
||||
db 64, 0, 68, 0, 32, 0, 0, 0, 75, 0, 78, 0, 0, 0, 0, 0,
|
||||
go4k_patterns_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Index List
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc2 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_pattern_lists
|
||||
Instrument0List db 0,
|
||||
go4k_pattern_lists_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Instrument Commands
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc3 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_instructions
|
||||
GO4K_BEGIN_CMDDEF(Instrument0)
|
||||
db GO4K_ENV_ID
|
||||
db GO4K_VCO_ID
|
||||
db GO4K_FOP_ID
|
||||
db GO4K_DLL_ID
|
||||
db GO4K_PAN_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
;// global commands
|
||||
GO4K_BEGIN_CMDDEF(Global)
|
||||
db GO4K_ACC_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
go4k_synth_instructions_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Intrument Data
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc4 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_parameter_values
|
||||
GO4K_BEGIN_PARAMDEF(Instrument0)
|
||||
GO4K_ENV ATTAC(80),DECAY(80),SUSTAIN(64),RELEASE(80),GAIN(128)
|
||||
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE)
|
||||
GO4K_FOP OP(FOP_MULP)
|
||||
GO4K_DLL PREGAIN(40),DRY(128),FEEDBACK(125),DAMP(64),FREQUENCY(32),DEPTH(32),DELAY(1),COUNT(1)
|
||||
GO4K_PAN PANNING(64)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
;// global parameters
|
||||
GO4K_BEGIN_PARAMDEF(Global)
|
||||
GO4K_ACC ACCTYPE(OUTPUT)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
go4k_synth_parameter_values_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Delay/Reverb Times
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc5 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL
|
||||
global _go4k_delay_times
|
||||
_go4k_delay_times
|
||||
dw 0
|
||||
dw 11025
|
||||
%endif
|
||||
|
||||
section .data
|
||||
|
||||
global _test_max_samples
|
||||
_test_max_samples dd MAX_SAMPLES
|
||||
|
||||
%include "../src/4klang.inc"
|
662
tests/test_dll_notetracking.asm
Normal file
662
tests/test_dll_notetracking.asm
Normal file
@ -0,0 +1,662 @@
|
||||
bits 32
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // useful macros
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // export function (make it accessable from main.cpp)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%macro export_func 1
|
||||
global _%1
|
||||
_%1:
|
||||
%endmacro
|
||||
%define USE_SECTIONS
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // basic defines for the song/synth
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define AUTHORING ; Use to export the current tick being rendered
|
||||
;%define SINGLE_TICK_RENDERING ; Use to render single tick on _4klang_render invocation ( requires AUTHORING enabled )
|
||||
%define SAMPLE_RATE 44100
|
||||
%define MAX_INSTRUMENTS 1
|
||||
%define MAX_VOICES 1
|
||||
%define HLD 1 ; // can be adjusted to give crinkler some other possibilities
|
||||
%define BPM 100
|
||||
%define MAX_PATTERNS 1
|
||||
%define PATTERN_SIZE_SHIFT 4
|
||||
%define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
|
||||
%define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
|
||||
%define SAMPLES_PER_TICK (SAMPLE_RATE*4*60/(BPM*16))
|
||||
%define DEF_LFO_NORMALIZE 0.000038
|
||||
%define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // some defines for unit usage, which reduce synth code size
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define GO4K_USE_16BIT_OUTPUT ; // removing this will output to 32bit floating point buffer
|
||||
;%define GO4K_USE_GROOVE_PATTERN ; // removing this skips groove pattern code
|
||||
;%define GO4K_USE_ENVELOPE_RECORDINGS ; // removing this skips envelope recording code
|
||||
;%define GO4K_USE_NOTE_RECORDINGS ; // removing this skips note recording code
|
||||
%define GO4K_USE_UNDENORMALIZE ; // removing this skips denormalization code in the units
|
||||
%define GO4K_CLIP_OUTPUT ; // removing this skips clipping code for the final output
|
||||
%define GO4K_USE_DST ; // removing this will skip DST unit
|
||||
%define GO4K_USE_DLL ; // removing this will skip DLL unit
|
||||
%define GO4K_USE_PAN ; // removing this will skip PAN unit
|
||||
%define GO4K_USE_GLOBAL_DLL ; // removing this will skip global dll processing
|
||||
%define GO4K_USE_FSTG ; // removing this will skip global store unit
|
||||
%define GO4K_USE_FLD ; // removing this will skip float load unit
|
||||
%define GO4K_USE_GLITCH ; // removing this will skip GLITCH unit
|
||||
%define GO4K_USE_ENV_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_ENV_MOD_GM ; // removing this will skip env gain modulation code
|
||||
%define GO4K_USE_ENV_MOD_ADR ; // removing this will skip env attack/decay/release modulation code
|
||||
%define GO4K_USE_VCO_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCO_PHASE_OFFSET ; // removing this will skip initial phase offset code
|
||||
%define GO4K_USE_VCO_SHAPE ; // removing this skips waveshaping code
|
||||
%define GO4K_USE_VCO_GATE ; // removing this skips gate code
|
||||
%define GO4K_USE_VCO_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCO_MOD_PM ; // removing this skips phase modulation code
|
||||
%define GO4K_USE_VCO_MOD_TM ; // removing this skips transpose modulation code
|
||||
%define GO4K_USE_VCO_MOD_DM ; // removing this skips detune modulation code
|
||||
%define GO4K_USE_VCO_MOD_CM ; // removing this skips color modulation code
|
||||
%define GO4K_USE_VCO_MOD_GM ; // removing this skips gain modulation code
|
||||
%define GO4K_USE_VCO_MOD_SM ; // removing this skips shaping modulation code
|
||||
%define GO4K_USE_VCO_STEREO ; // removing this skips stereo code
|
||||
%define GO4K_USE_VCF_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCF_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCF_MOD_RM ; // removing this skips resonance modulation code
|
||||
%define GO4K_USE_VCF_HIGH ; // removing this skips code for high output
|
||||
%define GO4K_USE_VCF_BAND ; // removing this skips code for band output
|
||||
%define GO4K_USE_VCF_PEAK ; // removing this skips code for peak output
|
||||
%define GO4K_USE_VCF_STEREO ; // removing this skips code for stereo filter output
|
||||
%define GO4K_USE_DST_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_DST_SH ; // removing this skips sample and hold code
|
||||
%define GO4K_USE_DST_MOD_DM ; // removing this skips distortion modulation code
|
||||
%define GO4K_USE_DST_MOD_SH ; // removing this skips sample and hold modulation code
|
||||
%define GO4K_USE_DST_STEREO ; // removing this skips stereo processing
|
||||
%define GO4K_USE_DLL_NOTE_SYNC ; // removing this will skip delay length adjusting code (karplus strong)
|
||||
%define GO4K_USE_DLL_CHORUS ; // removing this will skip delay chorus/flanger code
|
||||
%define GO4K_USE_DLL_CHORUS_CLAMP ; // removing this will skip chorus lfo phase clamping
|
||||
%define GO4K_USE_DLL_DAMP ; // removing this will skip dll damping code
|
||||
%define GO4K_USE_DLL_DC_FILTER ; // removing this will skip dll dc offset removal code
|
||||
%define GO4K_USE_FSTG_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_PAN_MOD ; // removing this will skip panning modulation code
|
||||
%define GO4K_USE_OUT_MOD_AM ; // removing this skips output aux send modulation code
|
||||
%define GO4K_USE_OUT_MOD_GM ; // removing this skips output gain modulation code
|
||||
%define GO4K_USE_WAVESHAPER_CLIP ; // removing this will skip clipping code
|
||||
%define GO4K_USE_FLD_MOD_VM ; // removing this will skip float load modulation code
|
||||
%define GO4K_USE_DLL_MOD ; // define this to enable modulations for delay line
|
||||
%define GO4K_USE_DLL_MOD_PM ; // define this to enable pregain modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_FM ; // define this to enable feebback modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_IM ; // define this to enable dry modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_DM ; // define this to enable damping modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_SM ; // define this to enable lfo freq modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_AM ; // define this to enable lfo depth modulation for delay line
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // synth defines
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%define MAX_DELAY 65536
|
||||
%define MAX_UNITS 64
|
||||
%define MAX_UNIT_SLOTS 16
|
||||
%define GO4K_BEGIN_CMDDEF(def_name)
|
||||
%define GO4K_END_CMDDEF db 0
|
||||
%define GO4K_BEGIN_PARAMDEF(def_name)
|
||||
%define GO4K_END_PARAMDEF
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ENV structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ENV_ID equ 1
|
||||
%macro GO4K_ENV 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ATTAC(val) val
|
||||
%define DECAY(val) val
|
||||
%define SUSTAIN(val) val
|
||||
%define RELEASE(val) val
|
||||
%define GAIN(val) val
|
||||
struc go4kENV_val
|
||||
;// unit paramters
|
||||
.attac resd 1
|
||||
.decay resd 1
|
||||
.sustain resd 1
|
||||
.release resd 1
|
||||
.gain resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kENV_wrk
|
||||
;// work variables
|
||||
.state resd 1
|
||||
.level resd 1
|
||||
;// modulation targets
|
||||
.gm resd 1
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.rm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%define ENV_STATE_ATTAC 0
|
||||
%define ENV_STATE_DECAY 1
|
||||
%define ENV_STATE_SUSTAIN 2
|
||||
%define ENV_STATE_RELEASE 3
|
||||
%define ENV_STATE_OFF 4
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCO structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCO_ID equ 2
|
||||
|
||||
%macro GO4K_VCO 8
|
||||
db %1
|
||||
db %2
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
db %3
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
db %4
|
||||
%endif
|
||||
db %5
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
db %6
|
||||
%else
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define TRANSPOSE(val) val
|
||||
%define DETUNE(val) val
|
||||
%define PHASE(val) val
|
||||
%define GATES(val) val
|
||||
%define COLOR(val) val
|
||||
%define SHAPE(val) val
|
||||
%define FLAGS(val) val
|
||||
%define SINE 0x01
|
||||
%define TRISAW 0x02
|
||||
%define PULSE 0x04
|
||||
%define NOISE 0x08
|
||||
%define LFO 0x10
|
||||
%define GATE 0x20
|
||||
%define VCO_STEREO 0x40
|
||||
struc go4kVCO_val
|
||||
;// unit paramters
|
||||
.transpose resd 1
|
||||
.detune resd 1
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
.phaseofs resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
.gate resd 1
|
||||
%endif
|
||||
.color resd 1
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
.shape resd 1
|
||||
%endif
|
||||
.gain resd 1
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCO_wrk
|
||||
;// work variables
|
||||
.phase resd 1
|
||||
;// modulation targets
|
||||
.tm resd 1
|
||||
.dm resd 1
|
||||
.fm resd 1
|
||||
.pm resd 1
|
||||
.cm resd 1
|
||||
.sm resd 1
|
||||
.gm resd 1
|
||||
;// stero variables
|
||||
.phase2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCF structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCF_ID equ 3
|
||||
%macro GO4K_VCF 3
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%endmacro
|
||||
%define LOWPASS 0x1
|
||||
%define HIGHPASS 0x2
|
||||
%define BANDPASS 0x4
|
||||
%define BANDSTOP 0x3
|
||||
%define ALLPASS 0x7
|
||||
%define PEAK 0x8
|
||||
%define STEREO 0x10
|
||||
%define FREQUENCY(val) val
|
||||
%define RESONANCE(val) val
|
||||
%define VCFTYPE(val) val
|
||||
struc go4kVCF_val
|
||||
;// unit paramters
|
||||
.freq resd 1
|
||||
.res resd 1
|
||||
.type resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCF_wrk
|
||||
;// work variables
|
||||
.low resd 1
|
||||
.high resd 1
|
||||
.band resd 1
|
||||
.freq resd 1 ;// unused but kept so modulation target offsets stay same
|
||||
;// modulation targets
|
||||
.fm resd 1
|
||||
.rm resd 1
|
||||
;// stereo variables
|
||||
.low2 resd 1
|
||||
.high2 resd 1
|
||||
.band2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DST_ID equ 4
|
||||
%macro GO4K_DST 3
|
||||
db %1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
db %2
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%else
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%endif
|
||||
%endmacro
|
||||
%define DRIVE(val) val
|
||||
%define SNHFREQ(val) val
|
||||
%define FLAGS(val) val
|
||||
struc go4kDST_val
|
||||
;// unit paramters
|
||||
.drive resd 1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
.snhfreq resd 1
|
||||
%endif
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDST_wrk
|
||||
;// work variables
|
||||
.out resd 1
|
||||
.snhphase resd 1
|
||||
;// modulation targets
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
;// stereo variables
|
||||
.out2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DLL structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DLL_ID equ 5
|
||||
%macro GO4K_DLL 8
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
db %4
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
db %5
|
||||
db %6
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define PREGAIN(val) val
|
||||
%define DRY(val) val
|
||||
%define FEEDBACK(val) val
|
||||
%define DEPTH(val) val
|
||||
%define DAMP(val) val
|
||||
%define DELAY(val) val
|
||||
%define COUNT(val) val
|
||||
struc go4kDLL_val
|
||||
;// unit paramters
|
||||
.pregain resd 1
|
||||
.dry resd 1
|
||||
.feedback resd 1
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
.damp resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
.freq resd 1
|
||||
.depth
|
||||
%endif
|
||||
.delay resd 1
|
||||
.count resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.dcin resd 1
|
||||
.dcout resd 1
|
||||
.phase resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk2
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.fm resd 1
|
||||
.im resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.am resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FOP structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FOP_ID equ 6
|
||||
%macro GO4K_FOP 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OP(val) val
|
||||
%define FOP_POP 0x1
|
||||
%define FOP_ADDP 0x2
|
||||
%define FOP_MULP 0x3
|
||||
%define FOP_PUSH 0x4
|
||||
%define FOP_XCH 0x5
|
||||
%define FOP_ADD 0x6
|
||||
%define FOP_MUL 0x7
|
||||
%define FOP_ADDP2 0x8
|
||||
%define FOP_LOADNOTE 0x9
|
||||
%define FOP_MULP2 0xa
|
||||
struc go4kFOP_val
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFOP_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FST_ID equ 7
|
||||
%macro GO4K_FST 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
%define AMOUNT(val) val
|
||||
%define DEST(val) val
|
||||
%define FST_SET 0x0000
|
||||
%define FST_ADD 0x4000
|
||||
%define FST_POP 0x8000
|
||||
struc go4kFST_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFST_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // PAN structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_PAN_ID equ 8
|
||||
%macro GO4K_PAN 1
|
||||
%ifdef GO4K_USE_PAN
|
||||
db %1
|
||||
%endif
|
||||
%endmacro
|
||||
%define PANNING(val) val
|
||||
struc go4kPAN_val
|
||||
%ifdef GO4K_USE_PAN
|
||||
.panning resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kPAN_wrk
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // OUT structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_OUT_ID equ 9
|
||||
%macro GO4K_OUT 2
|
||||
db %1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
db %2
|
||||
%endif
|
||||
%endmacro
|
||||
%define AUXSEND(val) val
|
||||
struc go4kOUT_val
|
||||
.gain resd 1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
.auxsend resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kOUT_wrk
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.gm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ACC structs (this is for the synth def only)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ACC_ID equ 10
|
||||
%macro GO4K_ACC 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OUTPUT 0
|
||||
%define AUX 8
|
||||
%define ACCTYPE(val) val
|
||||
struc go4kACC_val
|
||||
.acctype resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kACC_wrk
|
||||
.size
|
||||
endstruc
|
||||
%ifdef GO4K_USE_FLD
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FLD structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FLD_ID equ 11
|
||||
%macro GO4K_FLD 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define VALUE(val) val
|
||||
struc go4kFLD_val
|
||||
.value resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFLD_wrk
|
||||
;// modulation targets
|
||||
.vm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_GLITCH
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // GLITCH structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_GLITCH_ID equ 12
|
||||
%macro GO4K_GLITCH 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ACTIVE(val) val
|
||||
%define SLICEFACTOR(val)val
|
||||
%define PITCHFACTOR(val)val
|
||||
%define SLICESIZE(val) val
|
||||
struc go4kGLITCH_val
|
||||
;// unit paramters
|
||||
.active resd 1
|
||||
.dry resd 1
|
||||
.dsize resd 1
|
||||
.dpitch resd 1
|
||||
.slicesize resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.slizesize resd 1
|
||||
.slicepitch resd 1
|
||||
.unused resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk2
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_FSTG
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FSTG structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FSTG_ID equ 13
|
||||
%macro GO4K_FSTG 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
struc go4kFSTG_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFSTG_wrk
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Voice struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_instrument
|
||||
.release resd 1
|
||||
.note resd 1
|
||||
.workspace resd MAX_UNITS*MAX_UNIT_SLOTS
|
||||
.dlloutl resd 1
|
||||
.dlloutr resd 1
|
||||
.outl resd 1
|
||||
.outr resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Synth struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_synth
|
||||
.instruments resb go4k_instrument.size * MAX_INSTRUMENTS * MAX_VOICES
|
||||
.global resb go4k_instrument.size * MAX_VOICES
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Data, reduced by 967 patterns
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc1 data align=1
|
||||
%else
|
||||
section .data align=1
|
||||
%endif
|
||||
go4k_patterns
|
||||
db 64, 0, 68, 0, 32, 0, 0, 0, 75, 0, 78, 0, 0, 0, 0, 0,
|
||||
go4k_patterns_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Index List
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc2 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_pattern_lists
|
||||
Instrument0List db 0,
|
||||
go4k_pattern_lists_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Instrument Commands
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc3 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_instructions
|
||||
GO4K_BEGIN_CMDDEF(Instrument0)
|
||||
db GO4K_ENV_ID
|
||||
db GO4K_ENV_ID
|
||||
db GO4K_VCO_ID
|
||||
db GO4K_FOP_ID
|
||||
db GO4K_VCF_ID
|
||||
db GO4K_DLL_ID
|
||||
db GO4K_VCF_ID
|
||||
db GO4K_FOP_ID
|
||||
db GO4K_PAN_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
;// global commands
|
||||
GO4K_BEGIN_CMDDEF(Global)
|
||||
db GO4K_ACC_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
go4k_synth_instructions_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Intrument Data
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc4 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_parameter_values
|
||||
GO4K_BEGIN_PARAMDEF(Instrument0)
|
||||
GO4K_ENV ATTAC(0),DECAY(0),SUSTAIN(96),RELEASE(96),GAIN(128)
|
||||
GO4K_ENV ATTAC(0),DECAY(48),SUSTAIN(0),RELEASE(0),GAIN(128)
|
||||
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(127),GAIN(64),FLAGS(SINE)
|
||||
GO4K_FOP OP(FOP_MULP)
|
||||
GO4K_VCF FREQUENCY(32),RESONANCE(128),VCFTYPE(ALLPASS)
|
||||
GO4K_DLL PREGAIN(128),DRY(128),FEEDBACK(128),DAMP(16),FREQUENCY(0),DEPTH(0),DELAY(0),COUNT(1)
|
||||
GO4K_VCF FREQUENCY(24),RESONANCE(128),VCFTYPE(ALLPASS)
|
||||
GO4K_FOP OP(FOP_MULP)
|
||||
GO4K_PAN PANNING(64)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
;// global parameters
|
||||
GO4K_BEGIN_PARAMDEF(Global)
|
||||
GO4K_ACC ACCTYPE(OUTPUT)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
go4k_synth_parameter_values_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Delay/Reverb Times
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc5 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL
|
||||
global _go4k_delay_times
|
||||
_go4k_delay_times
|
||||
dw 0
|
||||
%endif
|
||||
|
||||
section .data
|
||||
|
||||
global _test_max_samples
|
||||
_test_max_samples dd MAX_SAMPLES
|
||||
|
||||
%include "../src/4klang.inc"
|
662
tests/test_dll_reverb.asm
Normal file
662
tests/test_dll_reverb.asm
Normal file
@ -0,0 +1,662 @@
|
||||
bits 32
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // useful macros
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // export function (make it accessable from main.cpp)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%macro export_func 1
|
||||
global _%1
|
||||
_%1:
|
||||
%endmacro
|
||||
%define USE_SECTIONS
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // basic defines for the song/synth
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define AUTHORING ; Use to export the current tick being rendered
|
||||
;%define SINGLE_TICK_RENDERING ; Use to render single tick on _4klang_render invocation ( requires AUTHORING enabled )
|
||||
%define SAMPLE_RATE 44100
|
||||
%define MAX_INSTRUMENTS 1
|
||||
%define MAX_VOICES 1
|
||||
%define HLD 1 ; // can be adjusted to give crinkler some other possibilities
|
||||
%define BPM 100
|
||||
%define MAX_PATTERNS 1
|
||||
%define PATTERN_SIZE_SHIFT 4
|
||||
%define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
|
||||
%define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
|
||||
%define SAMPLES_PER_TICK (SAMPLE_RATE*4*60/(BPM*16))
|
||||
%define DEF_LFO_NORMALIZE 0.000038
|
||||
%define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // some defines for unit usage, which reduce synth code size
|
||||
; //----------------------------------------------------------------------------------------
|
||||
;%define GO4K_USE_16BIT_OUTPUT ; // removing this will output to 32bit floating point buffer
|
||||
;%define GO4K_USE_GROOVE_PATTERN ; // removing this skips groove pattern code
|
||||
;%define GO4K_USE_ENVELOPE_RECORDINGS ; // removing this skips envelope recording code
|
||||
;%define GO4K_USE_NOTE_RECORDINGS ; // removing this skips note recording code
|
||||
%define GO4K_USE_UNDENORMALIZE ; // removing this skips denormalization code in the units
|
||||
%define GO4K_CLIP_OUTPUT ; // removing this skips clipping code for the final output
|
||||
%define GO4K_USE_DST ; // removing this will skip DST unit
|
||||
%define GO4K_USE_DLL ; // removing this will skip DLL unit
|
||||
%define GO4K_USE_PAN ; // removing this will skip PAN unit
|
||||
%define GO4K_USE_GLOBAL_DLL ; // removing this will skip global dll processing
|
||||
%define GO4K_USE_FSTG ; // removing this will skip global store unit
|
||||
%define GO4K_USE_FLD ; // removing this will skip float load unit
|
||||
%define GO4K_USE_GLITCH ; // removing this will skip GLITCH unit
|
||||
%define GO4K_USE_ENV_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_ENV_MOD_GM ; // removing this will skip env gain modulation code
|
||||
%define GO4K_USE_ENV_MOD_ADR ; // removing this will skip env attack/decay/release modulation code
|
||||
%define GO4K_USE_VCO_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCO_PHASE_OFFSET ; // removing this will skip initial phase offset code
|
||||
%define GO4K_USE_VCO_SHAPE ; // removing this skips waveshaping code
|
||||
%define GO4K_USE_VCO_GATE ; // removing this skips gate code
|
||||
%define GO4K_USE_VCO_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCO_MOD_PM ; // removing this skips phase modulation code
|
||||
%define GO4K_USE_VCO_MOD_TM ; // removing this skips transpose modulation code
|
||||
%define GO4K_USE_VCO_MOD_DM ; // removing this skips detune modulation code
|
||||
%define GO4K_USE_VCO_MOD_CM ; // removing this skips color modulation code
|
||||
%define GO4K_USE_VCO_MOD_GM ; // removing this skips gain modulation code
|
||||
%define GO4K_USE_VCO_MOD_SM ; // removing this skips shaping modulation code
|
||||
%define GO4K_USE_VCO_STEREO ; // removing this skips stereo code
|
||||
%define GO4K_USE_VCF_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_VCF_MOD_FM ; // removing this skips frequency modulation code
|
||||
%define GO4K_USE_VCF_MOD_RM ; // removing this skips resonance modulation code
|
||||
%define GO4K_USE_VCF_HIGH ; // removing this skips code for high output
|
||||
%define GO4K_USE_VCF_BAND ; // removing this skips code for band output
|
||||
%define GO4K_USE_VCF_PEAK ; // removing this skips code for peak output
|
||||
%define GO4K_USE_VCF_STEREO ; // removing this skips code for stereo filter output
|
||||
%define GO4K_USE_DST_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_DST_SH ; // removing this skips sample and hold code
|
||||
%define GO4K_USE_DST_MOD_DM ; // removing this skips distortion modulation code
|
||||
%define GO4K_USE_DST_MOD_SH ; // removing this skips sample and hold modulation code
|
||||
%define GO4K_USE_DST_STEREO ; // removing this skips stereo processing
|
||||
%define GO4K_USE_DLL_NOTE_SYNC ; // removing this will skip delay length adjusting code (karplus strong)
|
||||
%define GO4K_USE_DLL_CHORUS ; // removing this will skip delay chorus/flanger code
|
||||
%define GO4K_USE_DLL_CHORUS_CLAMP ; // removing this will skip chorus lfo phase clamping
|
||||
%define GO4K_USE_DLL_DAMP ; // removing this will skip dll damping code
|
||||
%define GO4K_USE_DLL_DC_FILTER ; // removing this will skip dll dc offset removal code
|
||||
%define GO4K_USE_FSTG_CHECK ; // removing this skips checks if processing is needed
|
||||
%define GO4K_USE_PAN_MOD ; // removing this will skip panning modulation code
|
||||
%define GO4K_USE_OUT_MOD_AM ; // removing this skips output aux send modulation code
|
||||
%define GO4K_USE_OUT_MOD_GM ; // removing this skips output gain modulation code
|
||||
%define GO4K_USE_WAVESHAPER_CLIP ; // removing this will skip clipping code
|
||||
%define GO4K_USE_FLD_MOD_VM ; // removing this will skip float load modulation code
|
||||
%define GO4K_USE_DLL_MOD ; // define this to enable modulations for delay line
|
||||
%define GO4K_USE_DLL_MOD_PM ; // define this to enable pregain modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_FM ; // define this to enable feebback modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_IM ; // define this to enable dry modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_DM ; // define this to enable damping modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_SM ; // define this to enable lfo freq modulation for delay line
|
||||
%define GO4K_USE_DLL_MOD_AM ; // define this to enable lfo depth modulation for delay line
|
||||
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // synth defines
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%define MAX_DELAY 65536
|
||||
%define MAX_UNITS 64
|
||||
%define MAX_UNIT_SLOTS 16
|
||||
%define GO4K_BEGIN_CMDDEF(def_name)
|
||||
%define GO4K_END_CMDDEF db 0
|
||||
%define GO4K_BEGIN_PARAMDEF(def_name)
|
||||
%define GO4K_END_PARAMDEF
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ENV structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ENV_ID equ 1
|
||||
%macro GO4K_ENV 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ATTAC(val) val
|
||||
%define DECAY(val) val
|
||||
%define SUSTAIN(val) val
|
||||
%define RELEASE(val) val
|
||||
%define GAIN(val) val
|
||||
struc go4kENV_val
|
||||
;// unit paramters
|
||||
.attac resd 1
|
||||
.decay resd 1
|
||||
.sustain resd 1
|
||||
.release resd 1
|
||||
.gain resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kENV_wrk
|
||||
;// work variables
|
||||
.state resd 1
|
||||
.level resd 1
|
||||
;// modulation targets
|
||||
.gm resd 1
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.rm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%define ENV_STATE_ATTAC 0
|
||||
%define ENV_STATE_DECAY 1
|
||||
%define ENV_STATE_SUSTAIN 2
|
||||
%define ENV_STATE_RELEASE 3
|
||||
%define ENV_STATE_OFF 4
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCO structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCO_ID equ 2
|
||||
|
||||
%macro GO4K_VCO 8
|
||||
db %1
|
||||
db %2
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
db %3
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
db %4
|
||||
%endif
|
||||
db %5
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
db %6
|
||||
%else
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define TRANSPOSE(val) val
|
||||
%define DETUNE(val) val
|
||||
%define PHASE(val) val
|
||||
%define GATES(val) val
|
||||
%define COLOR(val) val
|
||||
%define SHAPE(val) val
|
||||
%define FLAGS(val) val
|
||||
%define SINE 0x01
|
||||
%define TRISAW 0x02
|
||||
%define PULSE 0x04
|
||||
%define NOISE 0x08
|
||||
%define LFO 0x10
|
||||
%define GATE 0x20
|
||||
%define VCO_STEREO 0x40
|
||||
struc go4kVCO_val
|
||||
;// unit paramters
|
||||
.transpose resd 1
|
||||
.detune resd 1
|
||||
%ifdef GO4K_USE_VCO_PHASE_OFFSET
|
||||
.phaseofs resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_VCO_GATE
|
||||
.gate resd 1
|
||||
%endif
|
||||
.color resd 1
|
||||
%ifdef GO4K_USE_VCO_SHAPE
|
||||
.shape resd 1
|
||||
%endif
|
||||
.gain resd 1
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCO_wrk
|
||||
;// work variables
|
||||
.phase resd 1
|
||||
;// modulation targets
|
||||
.tm resd 1
|
||||
.dm resd 1
|
||||
.fm resd 1
|
||||
.pm resd 1
|
||||
.cm resd 1
|
||||
.sm resd 1
|
||||
.gm resd 1
|
||||
;// stero variables
|
||||
.phase2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // VCF structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_VCF_ID equ 3
|
||||
%macro GO4K_VCF 3
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%endmacro
|
||||
%define LOWPASS 0x1
|
||||
%define HIGHPASS 0x2
|
||||
%define BANDPASS 0x4
|
||||
%define BANDSTOP 0x3
|
||||
%define ALLPASS 0x7
|
||||
%define PEAK 0x8
|
||||
%define STEREO 0x10
|
||||
%define FREQUENCY(val) val
|
||||
%define RESONANCE(val) val
|
||||
%define VCFTYPE(val) val
|
||||
struc go4kVCF_val
|
||||
;// unit paramters
|
||||
.freq resd 1
|
||||
.res resd 1
|
||||
.type resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kVCF_wrk
|
||||
;// work variables
|
||||
.low resd 1
|
||||
.high resd 1
|
||||
.band resd 1
|
||||
.freq resd 1 ;// unused but kept so modulation target offsets stay same
|
||||
;// modulation targets
|
||||
.fm resd 1
|
||||
.rm resd 1
|
||||
;// stereo variables
|
||||
.low2 resd 1
|
||||
.high2 resd 1
|
||||
.band2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DST_ID equ 4
|
||||
%macro GO4K_DST 3
|
||||
db %1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
db %2
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%else
|
||||
%ifdef GO4K_USE_DST_STEREO
|
||||
db %3
|
||||
%endif
|
||||
%endif
|
||||
%endmacro
|
||||
%define DRIVE(val) val
|
||||
%define SNHFREQ(val) val
|
||||
%define FLAGS(val) val
|
||||
struc go4kDST_val
|
||||
;// unit paramters
|
||||
.drive resd 1
|
||||
%ifdef GO4K_USE_DST_SH
|
||||
.snhfreq resd 1
|
||||
%endif
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDST_wrk
|
||||
;// work variables
|
||||
.out resd 1
|
||||
.snhphase resd 1
|
||||
;// modulation targets
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
;// stereo variables
|
||||
.out2 resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // DLL structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_DLL_ID equ 5
|
||||
%macro GO4K_DLL 8
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
db %4
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
db %5
|
||||
db %6
|
||||
%endif
|
||||
db %7
|
||||
db %8
|
||||
%endmacro
|
||||
%define PREGAIN(val) val
|
||||
%define DRY(val) val
|
||||
%define FEEDBACK(val) val
|
||||
%define DEPTH(val) val
|
||||
%define DAMP(val) val
|
||||
%define DELAY(val) val
|
||||
%define COUNT(val) val
|
||||
struc go4kDLL_val
|
||||
;// unit paramters
|
||||
.pregain resd 1
|
||||
.dry resd 1
|
||||
.feedback resd 1
|
||||
%ifdef GO4K_USE_DLL_DAMP
|
||||
.damp resd 1
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL_CHORUS
|
||||
.freq resd 1
|
||||
.depth
|
||||
%endif
|
||||
.delay resd 1
|
||||
.count resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.dcin resd 1
|
||||
.dcout resd 1
|
||||
.phase resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kDLL_wrk2
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.fm resd 1
|
||||
.im resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.am resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FOP structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FOP_ID equ 6
|
||||
%macro GO4K_FOP 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OP(val) val
|
||||
%define FOP_POP 0x1
|
||||
%define FOP_ADDP 0x2
|
||||
%define FOP_MULP 0x3
|
||||
%define FOP_PUSH 0x4
|
||||
%define FOP_XCH 0x5
|
||||
%define FOP_ADD 0x6
|
||||
%define FOP_MUL 0x7
|
||||
%define FOP_ADDP2 0x8
|
||||
%define FOP_LOADNOTE 0x9
|
||||
%define FOP_MULP2 0xa
|
||||
struc go4kFOP_val
|
||||
.flags resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFOP_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FST structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FST_ID equ 7
|
||||
%macro GO4K_FST 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
%define AMOUNT(val) val
|
||||
%define DEST(val) val
|
||||
%define FST_SET 0x0000
|
||||
%define FST_ADD 0x4000
|
||||
%define FST_POP 0x8000
|
||||
struc go4kFST_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFST_wrk
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // PAN structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_PAN_ID equ 8
|
||||
%macro GO4K_PAN 1
|
||||
%ifdef GO4K_USE_PAN
|
||||
db %1
|
||||
%endif
|
||||
%endmacro
|
||||
%define PANNING(val) val
|
||||
struc go4kPAN_val
|
||||
%ifdef GO4K_USE_PAN
|
||||
.panning resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kPAN_wrk
|
||||
;// modulation targets
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // OUT structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_OUT_ID equ 9
|
||||
%macro GO4K_OUT 2
|
||||
db %1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
db %2
|
||||
%endif
|
||||
%endmacro
|
||||
%define AUXSEND(val) val
|
||||
struc go4kOUT_val
|
||||
.gain resd 1
|
||||
%ifdef GO4K_USE_GLOBAL_DLL
|
||||
.auxsend resd 1
|
||||
%endif
|
||||
.size
|
||||
endstruc
|
||||
struc go4kOUT_wrk
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.gm resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // ACC structs (this is for the synth def only)
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_ACC_ID equ 10
|
||||
%macro GO4K_ACC 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define OUTPUT 0
|
||||
%define AUX 8
|
||||
%define ACCTYPE(val) val
|
||||
struc go4kACC_val
|
||||
.acctype resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kACC_wrk
|
||||
.size
|
||||
endstruc
|
||||
%ifdef GO4K_USE_FLD
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FLD structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FLD_ID equ 11
|
||||
%macro GO4K_FLD 1
|
||||
db %1
|
||||
%endmacro
|
||||
%define VALUE(val) val
|
||||
struc go4kFLD_val
|
||||
.value resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFLD_wrk
|
||||
;// modulation targets
|
||||
.vm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_GLITCH
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // GLITCH structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_GLITCH_ID equ 12
|
||||
%macro GO4K_GLITCH 5
|
||||
db %1
|
||||
db %2
|
||||
db %3
|
||||
db %4
|
||||
db %5
|
||||
%endmacro
|
||||
%define ACTIVE(val) val
|
||||
%define SLICEFACTOR(val)val
|
||||
%define PITCHFACTOR(val)val
|
||||
%define SLICESIZE(val) val
|
||||
struc go4kGLITCH_val
|
||||
;// unit paramters
|
||||
.active resd 1
|
||||
.dry resd 1
|
||||
.dsize resd 1
|
||||
.dpitch resd 1
|
||||
.slicesize resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk
|
||||
;// work variables
|
||||
.index resd 1
|
||||
.store resd 1
|
||||
.slizesize resd 1
|
||||
.slicepitch resd 1
|
||||
.unused resd 1
|
||||
;// the delay buffer
|
||||
.buffer resd MAX_DELAY
|
||||
.size
|
||||
endstruc
|
||||
struc go4kGLITCH_wrk2
|
||||
;// modulation targets
|
||||
.am resd 1
|
||||
.dm resd 1
|
||||
.sm resd 1
|
||||
.pm resd 1
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
%ifdef GO4K_USE_FSTG
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // FSTG structs
|
||||
; //----------------------------------------------------------------------------------------
|
||||
GO4K_FSTG_ID equ 13
|
||||
%macro GO4K_FSTG 2
|
||||
db %1
|
||||
dw %2
|
||||
%endmacro
|
||||
struc go4kFSTG_val
|
||||
.amount resd 1
|
||||
.op1 resd 1
|
||||
.size
|
||||
endstruc
|
||||
struc go4kFSTG_wrk
|
||||
.size
|
||||
endstruc
|
||||
%endif
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Voice struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_instrument
|
||||
.release resd 1
|
||||
.note resd 1
|
||||
.workspace resd MAX_UNITS*MAX_UNIT_SLOTS
|
||||
.dlloutl resd 1
|
||||
.dlloutr resd 1
|
||||
.outl resd 1
|
||||
.outr resd 1
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Synth struct
|
||||
; //----------------------------------------------------------------------------------------
|
||||
struc go4k_synth
|
||||
.instruments resb go4k_instrument.size * MAX_INSTRUMENTS * MAX_VOICES
|
||||
.global resb go4k_instrument.size * MAX_VOICES
|
||||
.size
|
||||
endstruc
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Data, reduced by 967 patterns
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc1 data align=1
|
||||
%else
|
||||
section .data align=1
|
||||
%endif
|
||||
go4k_patterns
|
||||
db 64, 0, 68, 0, 32, 0, 0, 0, 75, 0, 78, 0, 0, 0, 0, 0,
|
||||
go4k_patterns_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Pattern Index List
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc2 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_pattern_lists
|
||||
Instrument0List db 0,
|
||||
go4k_pattern_lists_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Instrument Commands
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc3 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_instructions
|
||||
GO4K_BEGIN_CMDDEF(Instrument0)
|
||||
db GO4K_ENV_ID
|
||||
db GO4K_VCO_ID
|
||||
db GO4K_FOP_ID
|
||||
db GO4K_DLL_ID
|
||||
db GO4K_PAN_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
;// global commands
|
||||
GO4K_BEGIN_CMDDEF(Global)
|
||||
db GO4K_ACC_ID
|
||||
db GO4K_OUT_ID
|
||||
GO4K_END_CMDDEF
|
||||
go4k_synth_instructions_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Intrument Data
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc4 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
go4k_synth_parameter_values
|
||||
GO4K_BEGIN_PARAMDEF(Instrument0)
|
||||
GO4K_ENV ATTAC(80),DECAY(80),SUSTAIN(64),RELEASE(80),GAIN(128)
|
||||
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE)
|
||||
GO4K_FOP OP(FOP_MULP)
|
||||
GO4K_DLL PREGAIN(40),DRY(128),FEEDBACK(125),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(1),COUNT(8)
|
||||
GO4K_PAN PANNING(64)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
;// global parameters
|
||||
GO4K_BEGIN_PARAMDEF(Global)
|
||||
GO4K_ACC ACCTYPE(OUTPUT)
|
||||
GO4K_OUT GAIN(128), AUXSEND(0)
|
||||
GO4K_END_PARAMDEF
|
||||
go4k_synth_parameter_values_end
|
||||
; //----------------------------------------------------------------------------------------
|
||||
; // Delay/Reverb Times
|
||||
; //----------------------------------------------------------------------------------------
|
||||
%ifdef USE_SECTIONS
|
||||
section .g4kmuc5 data align=1
|
||||
%else
|
||||
section .data
|
||||
%endif
|
||||
%ifdef GO4K_USE_DLL
|
||||
global _go4k_delay_times
|
||||
_go4k_delay_times
|
||||
dw 0
|
||||
dw 1116
|
||||
dw 1188
|
||||
dw 1276
|
||||
dw 1356
|
||||
dw 1422
|
||||
dw 1492
|
||||
dw 1556
|
||||
dw 1618
|
||||
%endif
|
||||
|
||||
section .data
|
||||
|
||||
global _test_max_samples
|
||||
_test_max_samples dd MAX_SAMPLES
|
||||
|
||||
%include "../src/4klang.inc"
|
Loading…
Reference in New Issue
Block a user