Initial workin version, see readme for build info.

This commit is contained in:
2024-05-24 02:01:34 +03:00
parent 482635845b
commit a160937863
14 changed files with 840 additions and 370 deletions

3
.gitignore vendored
View File

@ -1,4 +1,5 @@
*.obj
*.exe
*.html
__temp*.*
__temp*.*
*.dll

View File

@ -6,7 +6,7 @@ PROJECT_INFO_FILE=prod.nfo
PROJECT_SCREENSHOT=
# Currently active config file name
ACTIVE_CONFIG=base.config
ACTIVE_CONFIG=minified.config
# ------- GUI options/preferences --------
# Automatically rebuild DLLs when things have changed?

View File

@ -1,12 +1,12 @@
// some useful song defines for 4klang
#define SAMPLE_RATE 44100
#define BPM 120.000000
#define MAX_INSTRUMENTS 3
#define MAX_PATTERNS 50
#define BPM 133.000000
#define MAX_INSTRUMENTS 5
#define MAX_PATTERNS 52
#define PATTERN_SIZE_SHIFT 4
#define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
#define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
#define SAMPLES_PER_TICK 5512
#define SAMPLES_PER_TICK 4973
#define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
#define POLYPHONY 1
#define INTEGER_16BIT

View File

@ -4,34 +4,41 @@
%endmacro
%define USE_SECTIONS
%define SAMPLE_RATE 44100
%define MAX_INSTRUMENTS 3
%define MAX_INSTRUMENTS 5
%define MAX_VOICES 1
%define HLD 1
%define BPM 120.000000
%define MAX_PATTERNS 50
%define BPM 133.000000
%define MAX_PATTERNS 52
%define PATTERN_SIZE_SHIFT 4
%define PATTERN_SIZE (1 << PATTERN_SIZE_SHIFT)
%define MAX_TICKS (MAX_PATTERNS*PATTERN_SIZE)
%define SAMPLES_PER_TICK 5512
%define DEF_LFO_NORMALIZE 0.0000453515
%define SAMPLES_PER_TICK 4973
%define DEF_LFO_NORMALIZE 0.0000502645
%define MAX_SAMPLES (SAMPLES_PER_TICK*MAX_TICKS)
%define GO4K_USE_16BIT_OUTPUT
;%define GO4K_USE_GROOVE_PATTERN
;%define GO4K_USE_ENVELOPE_RECORDINGS
;%define GO4K_USE_NOTE_RECORDINGS
%define GO4K_USE_NOTE_RECORDINGS
%define GO4K_CLIP_OUTPUT
%define GO4K_USE_DST
%define GO4K_USE_DLL
%define GO4K_USE_PAN
%define GO4K_USE_GLOBAL_DLL
%define GO4K_USE_ENV_CHECK
%define GO4K_USE_ENV_MOD_GM
%define GO4K_USE_VCO_CHECK
%define GO4K_USE_VCO_PHASE_OFFSET
%define GO4K_USE_VCO_SHAPE
%define GO4K_USE_VCO_MOD_TM
%define GO4K_USE_VCO_MOD_DM
%define GO4K_USE_VCO_MOD_CM
%define GO4K_USE_VCF_CHECK
%define GO4K_USE_VCF_MOD_FM
%define GO4K_USE_VCF_HIGH
%define GO4K_USE_VCF_BAND
%define GO4K_USE_VCF_PEAK
%define GO4K_USE_VCF_STEREO
%define GO4K_USE_DST_CHECK
%define GO4K_USE_DLL_CHORUS
%define GO4K_USE_DST_SH
%define GO4K_USE_DLL_CHORUS_CLAMP
%define GO4K_USE_DLL_DAMP
%define GO4K_USE_DLL_DC_FILTER
@ -445,25 +452,51 @@ section .data align=1
%endif
go4k_patterns
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
db 48, HLD, HLD, 48, HLD, HLD, 43, HLD, 41, HLD, HLD, 41, 0, 0, 0, 0,
db 41, HLD, HLD, 41, HLD, HLD, 43, HLD, 48, HLD, HLD, 48, 0, 0, 0, 0,
db 43, HLD, HLD, 43, HLD, HLD, 46, HLD, 48, HLD, HLD, 48, 0, 0, 0, 0,
db 41, HLD, HLD, 41, HLD, HLD, 53, HLD, 41, HLD, HLD, 41, 0, 0, 0, 0,
db 48, HLD, HLD, 48, HLD, HLD, 60, HLD, 48, HLD, HLD, 48, 0, 0, 0, 0,
db 0, 0, 84, HLD, HLD, HLD, 79, 0, 82, 79, 0, 77, 0, 75, HLD, 0,
db 72, 0, 72, 0, 75, 0, 82, 79, HLD, HLD, 79, 0, 0, 0, 0, 0,
db 72, 0, 72, 0, 75, 0, 75, 72, HLD, HLD, 72, 0, 0, 0, 0, 0,
db 87, HLD, HLD, HLD, 0, 0, 84, 0, 0, 0, 84, 0, 84, 0, 0, 0,
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 79, 82, 0, 84, 82, 79,
db 0, 0, 0, 0, 0, 0, 0, 0, 0, 91, HLD, 0, 89, 0, 87, 0,
db 89, HLD, HLD, HLD, 0, 0, 84, 0, 0, 0, 84, 0, 84, 0, 0, 0,
db 75, HLD, HLD, 75, HLD, HLD, 70, HLD, 68, HLD, HLD, 68, 0, 0, 0, 0,
db 68, HLD, HLD, 68, HLD, HLD, 70, HLD, 75, HLD, HLD, 75, 0, 0, 0, 0,
db 70, HLD, HLD, 70, HLD, HLD, 70, HLD, 75, HLD, HLD, 75, 0, 0, 0, 0,
db 68, HLD, HLD, 68, HLD, HLD, 70, HLD, HLD, 70, HLD, HLD, 70, HLD, 0, 0,
db 68, HLD, HLD, 68, HLD, HLD, 68, HLD, 70, HLD, HLD, 70, 0, 0, 70, HLD,
db 70, HLD, HLD, 70, HLD, HLD, 75, HLD, HLD, 75, HLD, HLD, 75, HLD, 0, 0,
db 70, HLD, HLD, 70, HLD, HLD, 70, HLD, 75, HLD, HLD, 75, 0, 0, 75, HLD,
db 38, HLD, 0, 0, 38, HLD, HLD, HLD, 0, 0, 38, 0, 48, 50, HLD, HLD,
db 0, 0, 50, 0, 38, HLD, HLD, HLD, 50, 0, 50, 0, 38, HLD, HLD, HLD,
db 0, 0, 38, 0, 38, HLD, 38, 38, 48, HLD, 50, HLD, 53, HLD, 52, HLD,
db 38, 0, 38, 0, 38, HLD, HLD, HLD, HLD, HLD, 0, 0, 38, HLD, 50, HLD,
db 0, 0, 50, 0, 38, 0, 38, 38, 46, HLD, 48, HLD, 57, HLD, 48, HLD,
db 46, HLD, 0, 0, 46, HLD, HLD, HLD, 0, 0, 46, 0, 47, HLD, 48, HLD,
db 0, 0, 48, 0, 36, HLD, HLD, HLD, 36, 0, 48, 0, 48, HLD, HLD, HLD,
db 38, HLD, 0, 0, 38, HLD, HLD, HLD, 0, 0, 38, 0, 48, HLD, 50, HLD,
db HLD, 0, 50, 0, 38, HLD, HLD, HLD, 38, HLD, 50, HLD, 48, HLD, 36, HLD,
db 43, HLD, 0, 0, 43, HLD, HLD, HLD, 55, HLD, 43, HLD, HLD, HLD, 55, HLD,
db 41, 0, 41, 0, 41, HLD, HLD, HLD, 53, HLD, 41, HLD, 41, HLD, HLD, HLD,
db 40, HLD, 0, 0, 40, HLD, HLD, HLD, 52, HLD, 40, HLD, HLD, HLD, 52, HLD,
db 45, 0, 45, 0, 45, HLD, HLD, HLD, 57, HLD, 45, HLD, 45, HLD, HLD, HLD,
db 50, HLD, 0, 0, 50, HLD, HLD, HLD, 62, HLD, 50, HLD, HLD, HLD, 62, HLD,
db 43, 0, 43, 0, 43, HLD, HLD, HLD, 55, HLD, 43, HLD, 43, HLD, HLD, HLD,
db 48, HLD, 0, 0, 48, HLD, HLD, HLD, 60, HLD, 48, HLD, HLD, HLD, 60, HLD,
db 48, 0, 48, 0, 48, HLD, HLD, HLD, 60, HLD, 48, HLD, 48, HLD, HLD, HLD,
db 48, HLD, HLD, 48, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD,
db HLD, HLD, 48, HLD, HLD, HLD, 48, 48, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD,
db 48, HLD, HLD, 48, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD,
db HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD,
db 48, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 48, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 48, HLD,
db 48, HLD, HLD, HLD, HLD, HLD, 48, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD,
db 0, 0, 0, 0, 0, 0, 0, 0, 60, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD, HLD, HLD, 60, HLD, HLD, HLD,
db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 60, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 48, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 74, HLD, HLD, HLD, HLD, HLD, 69, HLD, HLD, HLD, HLD, HLD, 72, HLD, HLD, HLD,
db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 74, HLD, HLD, HLD, 76, HLD, HLD, HLD,
db 77, HLD, HLD, HLD, 76, HLD, 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0, 0, 0, 0, 0,
db 74, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 0, 0, 0, 0,
db 70, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 72, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 77, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 79, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 81, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, 76, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 67, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 69, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 73, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
db 71, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD, HLD,
go4k_patterns_end
%ifdef USE_SECTIONS
section .g4kmuc2 data align=1
@ -471,9 +504,11 @@ section .g4kmuc2 data align=1
section .data
%endif
go4k_pattern_lists
Instrument0List db 0, 0, 0, 0, 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 3, 4, 4, 5, 5, 4, 4, 5, 5, 4, 4, 5, 5, 4, 4, 5, 5, 0, 0, 0, 0, 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 3, 0, 0,
Instrument1List db 0, 0, 0, 0, 0, 0, 0, 0, 6, 7, 6, 8, 6, 7, 6, 8, 0, 0, 0, 0, 0, 0, 0, 0, 9, 10, 9, 11, 12, 11, 12, 0, 6, 7, 6, 8, 6, 7, 6, 8, 9, 11, 9, 0, 6, 7, 6, 8, 0, 0,
Instrument2List db 13, 14, 13, 15, 13, 14, 13, 15, 13, 14, 13, 15, 13, 14, 13, 15, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 16, 17, 18, 19, 13, 14, 13, 15, 13, 14, 13, 15, 13, 14, 13, 0, 13, 14, 13, 15, 0, 0,
Instrument0List db 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 4, 5, 1, 3, 1, 2, 6, 7, 8, 9, 6, 7, 1, 2, 10, 11, 12, 13, 14, 15, 16, 17, 10, 11, 12, 13, 14, 15, 16, 17, 1, 2, 1, 3, 1, 2, 1, 3, 1, 2, 1, 3,
Instrument2List db 18, 19, 18, 19, 18, 19, 18, 19, 20, 21, 20, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 18, 21, 22, 21, 23, 19, 24, 21, 18, 19, 24, 21, 18, 19,
Instrument3List db 25, 26, 27, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26, 28, 26,
Instrument4List db 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 32, 29, 30, 33, 32, 29, 30, 31, 32, 29, 30, 33, 34, 35, 36, 33, 37, 38, 39, 38, 37, 35, 36, 33, 37, 38, 39, 40, 39, 38, 41, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0,
Instrument5List db 0, 0, 0, 0, 0, 0, 0, 0, 29, 30, 31, 32, 29, 30, 33, 32, 29, 30, 31, 32, 29, 30, 33, 34, 42, 43, 35, 44, 36, 33, 36, 36, 42, 43, 35, 44, 36, 45, 43, 42, 38, 41, 33, 34, 0, 0, 0, 0, 0, 0, 0, 0,
go4k_pattern_lists_end
%ifdef USE_SECTIONS
section .g4kmuc3 data align=1
@ -483,45 +518,101 @@ section .data
go4k_synth_instructions
GO4K_BEGIN_CMDDEF(Instrument0)
db GO4K_ENV_ID
db GO4K_ENV_ID
db GO4K_VCO_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_FST_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_FOP_ID
db GO4K_PAN_ID
db GO4K_OUT_ID
GO4K_END_CMDDEF
GO4K_BEGIN_CMDDEF(Instrument2)
db GO4K_ENV_ID
db GO4K_FST_ID
db GO4K_ENV_ID
db GO4K_DST_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_FOP_ID
db GO4K_PAN_ID
db GO4K_OUT_ID
GO4K_END_CMDDEF
GO4K_BEGIN_CMDDEF(Instrument3)
db GO4K_ENV_ID
db GO4K_FST_ID
db GO4K_ENV_ID
db GO4K_FST_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_VCF_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_PAN_ID
db GO4K_OUT_ID
GO4K_END_CMDDEF
GO4K_BEGIN_CMDDEF(Instrument1)
GO4K_BEGIN_CMDDEF(Instrument4)
db GO4K_ENV_ID
db GO4K_FST_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_FST_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_VCF_ID
db GO4K_DST_ID
db GO4K_PAN_ID
db GO4K_DLL_ID
db GO4K_FOP_ID
db GO4K_DLL_ID
db GO4K_FOP_ID
db GO4K_OUT_ID
GO4K_END_CMDDEF
GO4K_BEGIN_CMDDEF(Instrument5)
db GO4K_ENV_ID
db GO4K_VCO_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_FST_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_FST_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_DLL_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_PAN_ID
db GO4K_DLL_ID
db GO4K_OUT_ID
GO4K_END_CMDDEF
GO4K_BEGIN_CMDDEF(Instrument2)
db GO4K_ENV_ID
db GO4K_VCO_ID
db GO4K_VCO_ID
db GO4K_FOP_ID
db GO4K_VCO_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_FOP_ID
db GO4K_VCF_ID
db GO4K_OUT_ID
GO4K_END_CMDDEF
GO4K_BEGIN_CMDDEF(Global)
db GO4K_ACC_ID
db GO4K_DLL_ID
@ -540,55 +631,111 @@ section .data
%endif
go4k_synth_parameter_values
GO4K_BEGIN_PARAMDEF(Instrument0)
GO4K_ENV ATTAC(5),DECAY(85),SUSTAIN(107),RELEASE(0),GAIN(128)
GO4K_ENV ATTAC(59),DECAY(95),SUSTAIN(0),RELEASE(64),GAIN(91)
GO4K_FST AMOUNT(80),DEST(6*MAX_UNIT_SLOTS+4+FST_SET)
GO4K_ENV ATTAC(9),DECAY(85),SUSTAIN(113),RELEASE(38),GAIN(119)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW|LFO)
GO4K_FST AMOUNT(52),DEST(11*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(64),GAIN(128),FLAGS(TRISAW)
GO4K_FOP OP(FOP_MULP)
GO4K_VCF FREQUENCY(20),RESONANCE(23),VCFTYPE(LOWPASS)
GO4K_PAN PANNING(64)
GO4K_OUT GAIN(64), AUXSEND(0)
GO4K_END_PARAMDEF
GO4K_BEGIN_PARAMDEF(Instrument1)
GO4K_ENV ATTAC(23),DECAY(66),SUSTAIN(20),RELEASE(64),GAIN(128)
GO4K_ENV ATTAC(75),DECAY(77),SUSTAIN(20),RELEASE(64),GAIN(128)
GO4K_FST AMOUNT(92),DEST(6*MAX_UNIT_SLOTS+4+FST_SET)
GO4K_VCO TRANSPOSE(41),DETUNE(42),PHASE(55),GATES(85),COLOR(54),SHAPE(63),GAIN(128),FLAGS(SINE|LFO)
GO4K_FST AMOUNT(75),DEST(12*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FST AMOUNT(59),DEST(12*MAX_UNIT_SLOTS+5+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(64),GAIN(128),FLAGS(PULSE)
GO4K_VCO TRANSPOSE(74),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO)
GO4K_FST AMOUNT(69),DEST(13*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_VCO TRANSPOSE(64),DETUNE(76),PHASE(22),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW)
GO4K_VCO TRANSPOSE(64),DETUNE(60),PHASE(87),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(106),GAIN(128),FLAGS(SINE)
GO4K_FOP OP(FOP_ADDP)
GO4K_FOP OP(FOP_ADDP)
GO4K_VCF FREQUENCY(128),RESONANCE(89),VCFTYPE(LOWPASS|STEREO)
GO4K_FOP OP(FOP_MULP)
GO4K_VCF FREQUENCY(38),RESONANCE(45),VCFTYPE(BANDPASS)
GO4K_FOP OP(FOP_PUSH)
GO4K_VCF FREQUENCY(56),RESONANCE(80),VCFTYPE(BANDSTOP)
GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(64),DAMP(64),FREQUENCY(35),DEPTH(57),DELAY(17),COUNT(1)
GO4K_FOP OP(FOP_XCH)
GO4K_VCF FREQUENCY(45),RESONANCE(94),VCFTYPE(BANDSTOP)
GO4K_DLL PREGAIN(64),DRY(128),FEEDBACK(64),DAMP(64),FREQUENCY(8),DEPTH(61),DELAY(18),COUNT(1)
GO4K_OUT GAIN(64), AUXSEND(0)
GO4K_PAN PANNING(63)
GO4K_OUT GAIN(128), AUXSEND(55)
GO4K_END_PARAMDEF
GO4K_BEGIN_PARAMDEF(Instrument2)
GO4K_ENV ATTAC(36),DECAY(75),SUSTAIN(0),RELEASE(64),GAIN(128)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(89),GAIN(128),FLAGS(TRISAW)
GO4K_VCO TRANSPOSE(68),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(89),GAIN(128),FLAGS(TRISAW)
GO4K_ENV ATTAC(0),DECAY(83),SUSTAIN(0),RELEASE(0),GAIN(100)
GO4K_FST AMOUNT(128),DEST(0*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_ENV ATTAC(0),DECAY(73),SUSTAIN(0),RELEASE(0),GAIN(128)
GO4K_DST DRIVE(27), SNHFREQ(128), FLAGS(0)
GO4K_FST AMOUNT(86),DEST(6*MAX_UNIT_SLOTS+1+FST_SET)
GO4K_FOP OP(FOP_MULP)
GO4K_VCO TRANSPOSE(38),DETUNE(128),PHASE(20),GATES(85),COLOR(64),SHAPE(88),GAIN(90),FLAGS(TRISAW)
GO4K_FOP OP(FOP_MULP)
GO4K_PAN PANNING(64)
GO4K_OUT GAIN(128), AUXSEND(0)
GO4K_END_PARAMDEF
GO4K_BEGIN_PARAMDEF(Instrument3)
GO4K_ENV ATTAC(0),DECAY(74),SUSTAIN(0),RELEASE(0),GAIN(93)
GO4K_FST AMOUNT(128),DEST(0*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_ENV ATTAC(0),DECAY(57),SUSTAIN(64),RELEASE(0),GAIN(128)
GO4K_FST AMOUNT(66),DEST(6*MAX_UNIT_SLOTS+1+FST_SET)
GO4K_FST AMOUNT(58),DEST(7*MAX_UNIT_SLOTS+1+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_VCO TRANSPOSE(63),DETUNE(64),PHASE(0),GATES(85),COLOR(64),SHAPE(127),GAIN(83),FLAGS(NOISE)
GO4K_VCO TRANSPOSE(62),DETUNE(59),PHASE(14),GATES(85),COLOR(64),SHAPE(89),GAIN(67),FLAGS(SINE)
GO4K_VCO TRANSPOSE(68),DETUNE(64),PHASE(0),GATES(85),COLOR(42),SHAPE(65),GAIN(14),FLAGS(TRISAW)
GO4K_VCF FREQUENCY(98),RESONANCE(128),VCFTYPE(LOWPASS)
GO4K_FOP OP(FOP_ADDP)
GO4K_VCO TRANSPOSE(71),DETUNE(64),PHASE(0),GATES(0),COLOR(64),SHAPE(85),GAIN(128),FLAGS(TRISAW)
GO4K_FOP OP(FOP_ADDP)
GO4K_FOP OP(FOP_MULP)
GO4K_FOP OP(FOP_PUSH)
GO4K_VCF FREQUENCY(36),RESONANCE(49),VCFTYPE(BANDPASS)
GO4K_VCF FREQUENCY(22),RESONANCE(11),VCFTYPE(HIGHPASS)
GO4K_PAN PANNING(64)
GO4K_OUT GAIN(45), AUXSEND(28)
GO4K_END_PARAMDEF
GO4K_BEGIN_PARAMDEF(Instrument4)
GO4K_ENV ATTAC(79),DECAY(96),SUSTAIN(95),RELEASE(82),GAIN(128)
GO4K_FST AMOUNT(68),DEST(0*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_VCO TRANSPOSE(64),DETUNE(59),PHASE(0),GATES(85),COLOR(52),SHAPE(64),GAIN(128),FLAGS(PULSE)
GO4K_VCO TRANSPOSE(76),DETUNE(64),PHASE(64),GATES(85),COLOR(101),SHAPE(127),GAIN(111),FLAGS(TRISAW)
GO4K_VCO TRANSPOSE(32),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(TRISAW|LFO)
GO4K_FST AMOUNT(61),DEST(2*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FST AMOUNT(63),DEST(3*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_FOP OP(FOP_ADDP)
GO4K_FOP OP(FOP_MULP)
GO4K_VCF FREQUENCY(26),RESONANCE(36),VCFTYPE(PEAK)
GO4K_VCF FREQUENCY(80),RESONANCE(44),VCFTYPE(LOWPASS)
GO4K_DST DRIVE(109), SNHFREQ(85), FLAGS(0)
GO4K_PAN PANNING(64)
GO4K_DLL PREGAIN(72),DRY(123),FEEDBACK(90),DAMP(49),FREQUENCY(0),DEPTH(0),DELAY(17),COUNT(1)
GO4K_FOP OP(FOP_XCH)
GO4K_VCF FREQUENCY(49),RESONANCE(28),VCFTYPE(BANDPASS)
GO4K_OUT GAIN(46), AUXSEND(0)
GO4K_DLL PREGAIN(98),DRY(112),FEEDBACK(62),DAMP(45),FREQUENCY(0),DEPTH(0),DELAY(18),COUNT(1)
GO4K_FOP OP(FOP_XCH)
GO4K_OUT GAIN(59), AUXSEND(59)
GO4K_END_PARAMDEF
GO4K_BEGIN_PARAMDEF(Instrument5)
GO4K_ENV ATTAC(64),DECAY(70),SUSTAIN(70),RELEASE(88),GAIN(128)
GO4K_VCO TRANSPOSE(69),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO)
GO4K_FST AMOUNT(72),DEST(11*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_VCO TRANSPOSE(73),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO)
GO4K_FST AMOUNT(56),DEST(12*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FST AMOUNT(56),DEST(12*MAX_UNIT_SLOTS+5+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_VCO TRANSPOSE(77),DETUNE(64),PHASE(0),GATES(85),COLOR(128),SHAPE(64),GAIN(128),FLAGS(SINE|LFO)
GO4K_FST AMOUNT(72),DEST(13*MAX_UNIT_SLOTS+2+FST_SET)
GO4K_FOP OP(FOP_POP)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW)
GO4K_VCO TRANSPOSE(64),DETUNE(64),PHASE(0),GATES(85),COLOR(0),SHAPE(64),GAIN(128),FLAGS(TRISAW)
GO4K_FOP OP(FOP_ADDP)
GO4K_FOP OP(FOP_ADDP)
GO4K_VCF FREQUENCY(104),RESONANCE(96),VCFTYPE(LOWPASS)
GO4K_FOP OP(FOP_MULP)
GO4K_DLL PREGAIN(64),DRY(64),FEEDBACK(64),DAMP(0),FREQUENCY(0),DEPTH(0),DELAY(19),COUNT(1)
GO4K_PAN PANNING(64)
GO4K_DLL PREGAIN(128),DRY(0),FEEDBACK(0),DAMP(0),FREQUENCY(0),DEPTH(0),DELAY(20),COUNT(1)
GO4K_OUT GAIN(128), AUXSEND(47)
GO4K_END_PARAMDEF
GO4K_BEGIN_PARAMDEF(Global)
GO4K_ACC ACCTYPE(AUX)
GO4K_DLL PREGAIN(40),DRY(128),FEEDBACK(113),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(1),COUNT(8)
GO4K_DLL PREGAIN(39),DRY(90),FEEDBACK(93),DAMP(62),FREQUENCY(0),DEPTH(0),DELAY(1),COUNT(8)
GO4K_FOP OP(FOP_XCH)
GO4K_DLL PREGAIN(40),DRY(128),FEEDBACK(103),DAMP(64),FREQUENCY(0),DEPTH(0),DELAY(9),COUNT(8)
GO4K_DLL PREGAIN(41),DRY(128),FEEDBACK(93),DAMP(74),FREQUENCY(0),DEPTH(0),DELAY(9),COUNT(8)
GO4K_FOP OP(FOP_XCH)
GO4K_ACC ACCTYPE(OUTPUT)
GO4K_FOP OP(FOP_ADDP2)
GO4K_OUT GAIN(64), AUXSEND(16)
GO4K_OUT GAIN(67), AUXSEND(0)
GO4K_END_PARAMDEF
go4k_synth_parameter_values_end
%ifdef USE_SECTIONS
@ -616,6 +763,8 @@ _go4k_delay_times
dw 1516
dw 1580
dw 1642
dw 22050
dw 16537
dw 19894
dw 13263
dw 29842
dw 512
%endif

272
_shader.glsl Normal file
View File

@ -0,0 +1,272 @@
// Compofiller Studio by Yzi 2018
//
// Default template shader
// This shader program is executed in the GPU (or a CPU-based emulation) for
// every pixel (i.e. "fragment" in OpenGL jargon) of every frame.
// The "uniforms" are the same (i.e. uniform) for all pixels/fragments of the frame,
// and they come from the main program.
uniform float time;
uniform vec2 resolution;
// If you choose to save some bytes and not use either of these uniforms, you have to
// do some additional tricks.
// * time : if you uncheck "[ ] Use time uniform" checkbox, time is in gl_Color.y (green component)
// * resolution : if you uncheck "[ ] Use resolution uniform" checkbox, you'll have to hard-code the resolution manually
// The uniform-less version could look like this, 88200.0 being the time divider
//float time = gl_Color.y * 256.0 * (65536.0 / 88200.0);
//vec2 resolution = vec2(1280.0, 720.0);
// Uncomment this to use the texture-based features
uniform sampler2D texture_sampler;
// Uncomment this to use the texture-based features
uniform sampler2D texts;
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
// Created by S. Guillitte 2015
float zoom=1.;
vec2 cmul( vec2 a, vec2 b ) { return vec2( a.x*b.x - a.y*b.y, a.x*b.y + a.y*b.x ); }
vec2 csqr( vec2 a ) { return vec2( a.x*a.x - a.y*a.y, 2.*a.x*a.y ); }
mat2 rot(float a) {
return mat2(cos(a),sin(a),-sin(a),cos(a));
}
vec2 iSphere( in vec3 ro, in vec3 rd, in vec4 sph )//from iq
{
vec3 oc = ro - sph.xyz;
float b = dot( oc, rd );
float c = dot( oc, oc ) - sph.w*sph.w;
float h = b*b - c;
if( h<0.0 ) return vec2(-1.0);
h = sqrt(h);
return vec2(-b-h, -b+h );
}
float map(in vec3 p) {
float res = 0.;
vec3 c = p;
for (int i = 0; i < 10; ++i) {
p =.7*abs(p)/dot(p,p) -.7;
p.yz= csqr(p.yz);
p=p.zxy;
res += exp(-19. * abs(dot(p,c)));
}
return res/2.;
}
vec3 raymarch( in vec3 ro, vec3 rd, vec2 tminmax )
{
float t = tminmax.x;
float dt = .02;
//float dt = .2 - .195*cos(iTime*.05);//animated
vec3 col= vec3(0.);
float c = 0.;
for( int i=0; i<64; i++ )
{
t+=dt*exp(-2.*c);
if(t>tminmax.y)break;
c = map(ro+t*rd);
col = .99*col+ .08*vec3(c*c, c, c*c*c);//green
//col = .99*col+ .08*vec3(c*c*c, c*c, c);//blue
}
return col;
}
void CoolSphere( out vec4 fragColor, in vec2 fragCoord )
{
float time = time;
vec2 q = fragCoord.xy / resolution.xy;
vec2 p = -1.0 + 2.0 * q;
p.x *= resolution.x/resolution.y;
vec2 m = vec2(0.);
m-=.5;
// camera
vec3 ro = zoom*vec3(4.);
ro.yz*=rot(m.y);
ro.xz*=rot(m.x+ 0.1*time);
vec3 ta = vec3( 0.0 , 0.0, 0.0 );
vec3 ww = normalize( ta - ro );
vec3 uu = normalize( cross(ww,vec3(0.0,1.0,0.0) ) );
vec3 vv = normalize( cross(uu,ww));
vec3 rd = normalize( p.x*uu + p.y*vv + 4.0*ww );
vec2 tmm = iSphere( ro, rd, vec4(0.,0.,0.,2.) );
// raymarch
vec3 col = raymarch(ro,rd,tmm);
if (tmm.x<0.)col = texture2D(texture_sampler, rd).rgb;
else {
vec3 nor=(ro+tmm.x*rd)/2.;
nor = reflect(rd, nor);
float fre = pow(.5+ clamp(dot(nor,rd),0.0,1.0), 3. )*1.3;
col += texture2D(texture_sampler, nor).rgb * fre;
}
// shade
col = .5 *(log(1.+col));
col = clamp(col,0.,1.);
fragColor = vec4( col, 1.0 );
}
float bar = time; // this is just a coding nicety to highlight that in some calculations we want musical time ... you wouldn't want to have this in a real prod's final version
// --- noise from procedural pseudo-Perlin (better but not so nice derivatives) ---------
// ( adapted from IQ )
float gTime = 0.;
float sdBox( vec3 p, vec3 b )
{
vec3 q = abs(p) - b;
return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);
}
float box(vec3 pos, float scale) {
pos *= scale;
float base = sdBox(pos, vec3(.4,.4,.1)) /1.5;
pos.xy *= 5.;
pos.y -= 3.5;
pos.xy *= rot(.75);
float result = -base;
return result;
}
float box_set(vec3 pos, float time) {
vec3 pos_origin = pos;
pos = pos_origin;
pos .y += sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box1 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos .y -=sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box2 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos .x +=sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box3 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos .x -=sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box4 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos.xy *= rot(.8);
float box5 = box(pos,.5) * 6.;
pos = pos_origin;
float box6 = box(pos,.5) * 6.;
float result = max(max(max(max(max(box1,box2),box3),box4),box5),box6);
return result;
}
float map(vec3 pos, float time) {
vec3 pos_origin = pos;
float box_set1 = box_set(pos, time);
return box_set1;
}
void mainImage2( out vec4 fragColor, in vec2 fragCoord ) {
vec2 p = (fragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y);
vec3 ro = vec3(0., -0.2 ,time * 4.);
vec3 ray = normalize(vec3(p, 1.5));
ray.xy = ray.xy * rot(sin(time * .03) * 5.);
ray.yz = ray.yz * rot(sin(time * .05) * .2);
float t = 0.1;
vec3 col = vec3(0.);
float ac = 0.0;
for (int i = 0; i < 99; i++){
vec3 pos = ro + ray * t;
pos = mod(pos-2., 4.) -2.;
gTime = time -float(i) * 0.01;
float d = map(pos, time);
d = max(abs(d), 0.01);
ac += exp(-d*23.);
t += d* 0.55;
}
col = vec3(ac * 0.02);
col +=vec3(0.,0.2 * abs(sin(time)),0.5 + sin(time) * 0.2);
fragColor = vec4(col ,1.0 - t * (0.02 + 0.02 * sin (time)));
}
float noise3( vec3 x ) {
vec3 p = floor(x),f = fract(x);
f = f*f*(3.-2.*f); // or smoothstep // to make derivative continuous at borders
#define hash3(p) fract(sin(1e3*dot(p,vec3(1,57,-13.7)))*4375.5453) // rand
return mix( mix(mix( hash3(p+vec3(0,0,0)), hash3(p+vec3(1,0,0)),f.x), // triilinear interp
mix( hash3(p+vec3(0,1,0)), hash3(p+vec3(1,1,0)),f.x),f.y),
mix(mix( hash3(p+vec3(0,0,1)), hash3(p+vec3(1,0,1)),f.x),
mix( hash3(p+vec3(0,1,1)), hash3(p+vec3(1,1,1)),f.x),f.y), f.z);
}
#define noise(x) (noise3(x)+noise3(x+11.5)) / 2. // pseudoperlin improvement from foxes idea
void mainImage3( out vec4 O, vec2 U ) // ------------ draw isovalues
{
vec2 R = resolution.xy;
float n = noise(vec3(U*8./R.y, .1*time)),
v = sin(6.28*10.*n),
t = time;
v = smoothstep(1.,0., .5*abs(v)/fwidth(v));
O = mix( exp(-33./R.y )* texture2D( texture_sampler, (U+vec2(1,sin(t)))/R), // .97
.5+.5*sin(12.*n+vec4(0,2.1,-2.1,0)),
v );
}
void main(void)
{
vec3 l;
float abstime = abs(time);
if (abstime < 10.0)
CoolSphere(gl_FragColor, gl_FragCoord.xy);
else if (abstime < 15.0)
{
mainImage2(gl_FragColor, gl_FragCoord.xy);
}
else
{
mainImage3(gl_FragColor, gl_FragCoord.xy);
}
vec2 texttop = vec2(0., -.35), pt = (gl_FragCoord.xy / resolution) - texttop;
if (pt.y > 0.) l = gl_FragColor + texture2D(texts, pt);
gl_FragColor = vec4(l * (1.0), 1.0);
}

View File

@ -3,13 +3,13 @@
# Base configuration file
########### Music #############
MUSIC_4KLANG_INC_FILE=
MUSIC_4KLANG_INC_FILE=4klang.inc
MUSIC_BEATS_PER_BAR=4.0
########### Visuals ############
SHADER_FILE=shader.glsl
RESOLUTION_X=1920
RESOLUTION_Y=1080
RESOLUTION_X=1280
RESOLUTION_Y=720
USE_TIME_UNIFORM=1
TIME_UNIFORM_NAME='time'
@ -29,7 +29,7 @@ USE_TEXTS_UNIFORM=1
TEXTS_UNIFORM_NAME='texts'
TEXT_BITMAP_RESOLUTION_X=1024
TEXT_BITMAP_RESOLUTION_Y=1024
TEXT_FONT_NAME='Arial'
TEXT_FONT_NAME='Segoe UI Black'
TEXT_FONT_SIZE=120
TEXT_FONT_STRIKEOUT=0
TEXT_FONT_UNDERLINE=0
@ -39,33 +39,31 @@ TEXT_FONT_ORIENTATION=0
TEXT_FONT_ESCAPEMENT=0
TEXT_FONT_WIDTH=0
TEXT_CHARACTER_EXTRA_SPACING=0
USE_WIDECHAR_TEXTS=0
USE_WIDECHAR_TEXTS=1
########### Time base ###########
USE_TIME_DIVIDER_IN_X86_CODE=1
TIME_DIVIDER=88200.000
TIME_DIVIDER=79578.945
TIME_BASE=bars
AUDIO_DELAY=2048
PROD_END_TIME=4411648
PROD_END_TIME=4139584
########### Final product ###########
# The name of the final EXE
OUTPUT_EXE_NAME=testing.exe
OUTPUT_EXE_NAME=4k_test.exe
# this is just the name/text of the GUI option, not the name of the linker executable
EXE_LINKER_PROGRAM=Crinkler
QUOTE=\"
CRINKLER_ORDERTRIES=4000
CRINKLER_ORDERTRIES=100
AUDIO_BUFFER_ALLOCATED_LENGTH=4411648
AUDIO_BUFFER_ALLOCATED_LENGTH=4139584
AUDIO_SAMPLING_RATE=44100
LOOP_END=5.0
LOOP_START=3.0
LOOP_ENABLED=0
TIME_DIVIDER_INT=88200
TIME_DIVIDER_INT=79578

View File

@ -89,7 +89,7 @@ ifeq ($(EXE_LINKER_PROGRAM),Crinkler)
# Crinkler settings
# Linker for building standalone EXE files for running
FINAL_LINKER_EXE="$(PROGRAM_DIR)\Tools\Crinkler\crinkler.exe"
FINAL_LINKER_OPTS=/SUBSYSTEM:WINDOWS /ENTRY:t /COMPMODE:SLOW /HASHSIZE:200 /HASHTRIES:50 /ORDERTRIES:$(CRINKLER_ORDERTRIES) \
FINAL_LINKER_OPTS=/SUBSYSTEM:WINDOWS /ENTRY:t /COMPMODE:VERYSLOW /HASHSIZE:500 /HASHTRIES:100 /ORDERTRIES:$(CRINKLER_ORDERTRIES) \
/UNSAFEIMPORT /LIBPATH:$(LIB_PATH) /REPORT:crinkler_report.html /PROGRESSGUI
FINAL_LINKER_OUT_OPT=/OUT:
FINAL_LINKER_GENERAL_LIBS_PARAMS=kernel32.lib user32.lib

Binary file not shown.

Binary file not shown.

View File

@ -11,3 +11,11 @@ RESOLUTION_Y=720
CRINKLER_ORDERTRIES=4000
OUTPUT_EXE_NAME=release.exe
SHADER_FILE=shader_minified.h
TIME_UNIFORM_NAME='v'
RESOLUTION_UNIFORM_NAME='s'
TEXTS_UNIFORM_NAME='m'
EXE_LINKER_PROGRAM=Crinkler
TIME_BASE=bars
TIME_DIVIDER=79578.945
TIME_DIVIDER_INT=79578

View File

@ -8,4 +8,9 @@ include $(PARENT_CONFIG)
# Visuals
EXE_LINKER_PROGRAM=Crinkler
CRINKLER_ORDERTRIES=100
CRINKLER_ORDERTRIES=4000
SHADER_FILE=shader_minified.h
TIME_UNIFORM_NAME='v'
RESOLUTION_UNIFORM_NAME='s'
TEXTS_UNIFORM_NAME='c'
USE_WIDECHAR_TEXTS=1

View File

@ -1,314 +1,205 @@
// Compofiller Studio by Yzi 2018
//
// Default template shader
// This shader program is executed in the GPU (or a CPU-based emulation) for
// every pixel (i.e. "fragment" in OpenGL jargon) of every frame.
// The "uniforms" are the same (i.e. uniform) for all pixels/fragments of the frame,
// and they come from the main program.
uniform float time;
uniform vec2 resolution;
// If you choose to save some bytes and not use either of these uniforms, you have to
// do some additional tricks.
// * time : if you uncheck "[ ] Use time uniform" checkbox, time is in gl_Color.y (green component)
// * resolution : if you uncheck "[ ] Use resolution uniform" checkbox, you'll have to hard-code the resolution manually
// The uniform-less version could look like this, 88200.0 being the time divider
//float time = gl_Color.y * 256.0 * (65536.0 / 88200.0);
//vec2 resolution = vec2(1280.0, 720.0);
// Uncomment this to use the texture-based features
uniform sampler2D texture_sampler;
// Uncomment this to use the texture-based features
uniform sampler2D texts;
// License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
// Created by S. Guillitte 2015
float zoom = 1.;
float gTime = 0.;
float zoom=1.;
vec2 cmul( vec2 a, vec2 b ) { return vec2( a.x*b.x - a.y*b.y, a.x*b.y + a.y*b.x ); }
vec2 csqr( vec2 a ) { return vec2( a.x*a.x - a.y*a.y, 2.*a.x*a.y ); }
mat2 rot(float a) {
return mat2(cos(a),sin(a),-sin(a),cos(a));
int getBeat(void) {
return floor(abs(time*4) / (60./133) );
}
int getBar(void) {
return floor(abs(time) / (60./133));
}
vec2 iSphere( in vec3 ro, in vec3 rd, in vec4 sph )//from iq
vec2 csqr(vec2 a) {
return vec2(a.x * a.x - a.y * a.y, 2. * a.x * a.y);
}
mat2 rot(float a) {
return mat2(cos(a), sin(a), -sin(a), cos(a));
}
vec2 iSphere(in vec3 ro, in vec3 rd, in vec4 sph)//from iq
{
vec3 oc = ro - sph.xyz;
float b = dot( oc, rd );
float c = dot( oc, oc ) - sph.w*sph.w;
float h = b*b - c;
if( h<0.0 ) return vec2(-1.0);
h = sqrt(h);
return vec2(-b-h, -b+h );
vec3 oc = ro - sph.xyz;
float b = dot(oc, rd);
float c = dot(oc, oc) - sph.w * sph.w;
float h = b * b - c;
if(h < 0.0)
return vec2(-1.0);
h = sqrt(h);
return vec2(-b - h, -b + h);
}
float map(in vec3 p) {
float res = 0.;
float res = 0.;
vec3 c = p;
for (int i = 0; i < 10; ++i) {
p =.7*abs(p)/dot(p,p) -.7;
p.yz= csqr(p.yz);
p=p.zxy;
res += exp(-19. * abs(dot(p,c)));
}
return res/2.;
for(int i = 0; i < 10; ++i) {
p = .7 * abs(p) / dot(p, p) - .7;
p.yz = csqr(p.yz);
p = p.zxy;
res += exp(-19. * abs(dot(p, c)));
}
return res / 2.;
}
vec3 raymarch( in vec3 ro, vec3 rd, vec2 tminmax )
{
vec3 raymarch(in vec3 ro, vec3 rd, vec2 tminmax) {
float t = tminmax.x;
float dt = .02;
//float dt = .2 - .195*cos(iTime*.05);//animated
vec3 col= vec3(0.);
vec3 col = vec3(0.);
float c = 0.;
for( int i=0; i<64; i++ )
{
t+=dt*exp(-2.*c);
if(t>tminmax.y)break;
c = map(ro+t*rd);
col = .99*col+ .08*vec3(c*c, c, c*c*c);//green
for(int i = 0; i < 64; i++) {
t += dt * exp(-2. * c);
if(t > tminmax.y)
break;
c = map(ro + t * rd);
col = .99 * col + .08 * vec3(c * c, c, c * c * c);//green
//col = .99*col+ .08*vec3(c*c*c, c*c, c);//blue
}
}
return col;
}
void CoolSphere( out vec4 fragColor, in vec2 fragCoord )
{
float time = time;
void CoolSphere(out vec4 fragColor, in vec2 fragCoord) {
float time = time;
vec2 q = fragCoord.xy / resolution.xy;
vec2 p = -1.0 + 2.0 * q;
p.x *= resolution.x/resolution.y;
p.x *= resolution.x / resolution.y;
vec2 m = vec2(0.);
m-=.5;
m -= .5;
// camera
vec3 ro = zoom*vec3(4.);
ro.yz*=rot(m.y);
ro.xz*=rot(m.x+ 0.1*time);
vec3 ta = vec3( 0.0 , 0.0, 0.0 );
vec3 ww = normalize( ta - ro );
vec3 uu = normalize( cross(ww,vec3(0.0,1.0,0.0) ) );
vec3 vv = normalize( cross(uu,ww));
vec3 rd = normalize( p.x*uu + p.y*vv + 4.0*ww );
vec3 ro = zoom * vec3(4.);
ro.yz *= rot(m.y);
ro.xz *= rot(m.x + 0.1 * time);
vec3 ta = vec3(0.0, 0.0, 0.0);
vec3 ww = normalize(ta - ro);
vec3 uu = normalize(cross(ww, vec3(0.0, 1.0, 0.0)));
vec3 vv = normalize(cross(uu, ww));
vec3 rd = normalize(p.x * uu + p.y * vv + 4.0 * ww);
vec2 tmm = iSphere( ro, rd, vec4(0.,0.,0.,2.) );
vec2 tmm = iSphere(ro, rd, vec4(0., 0., 0., 2.));
// raymarch
vec3 col = raymarch(ro,rd,tmm);
if (tmm.x<0.)col = texture2D(texture_sampler, rd).rgb;
vec3 col = raymarch(ro, rd, tmm);
if(tmm.x < 0.)
col = texture2D(texture_sampler, rd).rgb;
else {
vec3 nor=(ro+tmm.x*rd)/2.;
nor = reflect(rd, nor);
float fre = pow(.5+ clamp(dot(nor,rd),0.0,1.0), 3. )*1.3;
vec3 nor = (ro + tmm.x * rd) / 2.;
nor = reflect(rd, nor);
float fre = pow(.5 + clamp(dot(nor, rd), 0.0, 1.0), 3.) * 1.3;
col += texture2D(texture_sampler, nor).rgb * fre;
}
// shade
col = .5 *(log(1.+col));
col = clamp(col,0.,1.);
fragColor = vec4( col, 1.0 );
col = .5 * (log(1. + col));
col = clamp(col, 0., 1.);
fragColor = vec4(col, 1.0);
}
float bar = time; // this is just a coding nicety to highlight that in some calculations we want musical time ... you wouldn't want to have this in a real prod's final version
// --- noise from procedural pseudo-Perlin (better but not so nice derivatives) ---------
// ( adapted from IQ )
float gTime = 0.;
float sdBox( vec3 p, vec3 b )
{
vec3 q = abs(p) - b;
return length(max(q,0.0)) + min(max(q.x,max(q.y,q.z)),0.0);
float sdBox(vec3 p, vec3 b) {
vec3 q = abs(p) - b;
return length(max(q, 0.0)) + min(max(q.x, max(q.y, q.z)), 0.0);
}
float box(vec3 pos, float scale) {
pos *= scale;
float base = sdBox(pos, vec3(.4,.4,.1)) /1.5;
pos.xy *= 5.;
pos.y -= 3.5;
pos.xy *= rot(.75);
float result = -base;
return result;
pos *= scale;
float base = sdBox(pos, vec3(.4, .4, .1)) / 1.5;
pos.xy *= 5.;
pos.y -= 3.5;
pos.xy *= rot(.75);
float result = -base;
return result;
}
float box_set(vec3 pos, float time) {
vec3 pos_origin = pos;
pos = pos_origin;
pos .y += sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box1 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos .y -=sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box2 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos .x +=sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box3 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos .x -=sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box4 = box(pos,2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos.xy *= rot(.8);
float box5 = box(pos,.5) * 6.;
pos = pos_origin;
float box6 = box(pos,.5) * 6.;
float result = max(max(max(max(max(box1,box2),box3),box4),box5),box6);
return result;
vec3 pos_origin = pos;
pos = pos_origin;
pos.y += sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box1 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos.y -= sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box2 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos.x += sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box3 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos.x -= sin(gTime * 0.4) * 2.5;
pos.xy *= rot(.8);
float box4 = box(pos, 2. - abs(sin(gTime * 0.4)) * 1.5);
pos = pos_origin;
pos.xy *= rot(.8);
float box5 = box(pos, .5) * 6.;
pos = pos_origin;
float box6 = box(pos, .5) * 6.;
float result = max(max(max(max(max(box1, box2), box3), box4), box5), box6);
return result;
}
float map(vec3 pos, float time) {
vec3 pos_origin = pos;
float box_set1 = box_set(pos, time);
vec3 pos_origin = pos;
float box_set1 = box_set(pos, time);
return box_set1;
return box_set1;
}
void mainImage2(out vec4 fragColor, in vec2 fragCoord) {
vec2 p = (fragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y);
vec3 ro = vec3(0., -0.2, time * 4.);
vec3 ray = normalize(vec3(p, 1.5));
ray.xy = ray.xy * rot(sin(time * .03) * 5.);
ray.yz = ray.yz * rot(sin(time * .05) * .2);
float t = 0.1;
vec3 col = vec3(0.);
float ac = 0.0;
void mainImage2( out vec4 fragColor, in vec2 fragCoord ) {
vec2 p = (fragCoord.xy * 2. - resolution.xy) / min(resolution.x, resolution.y);
vec3 ro = vec3(0., -0.2 ,time * 4.);
vec3 ray = normalize(vec3(p, 1.5));
ray.xy = ray.xy * rot(sin(time * .03) * 5.);
ray.yz = ray.yz * rot(sin(time * .05) * .2);
float t = 0.1;
vec3 col = vec3(0.);
float ac = 0.0;
for(int i = 0; i < 99; i++) {
vec3 pos = ro + ray * t;
pos = mod(pos - 2., 4.) - 2.;
gTime = time - float(i) * 0.01;
float d = map(pos, time);
for (int i = 0; i < 99; i++){
vec3 pos = ro + ray * t;
pos = mod(pos-2., 4.) -2.;
gTime = time -float(i) * 0.01;
float d = map(pos, time);
d = max(abs(d), 0.01);
ac += exp(-d * 23.);
d = max(abs(d), 0.01);
ac += exp(-d*23.);
t += d * 0.55;
}
t += d* 0.55;
}
col = vec3(ac * 0.02);
col = vec3(ac * 0.02);
col += vec3(0., 0.2 * abs(sin(time)), 0.5 + sin(time) * 0.2);
col +=vec3(0.,0.2 * abs(sin(time)),0.5 + sin(time) * 0.2);
fragColor = vec4(col ,1.0 - t * (0.02 + 0.02 * sin (time)));
fragColor = vec4(col, 1.0 - t * (0.02 + 0.02 * sin(time)));
}
float noise3( vec3 x ) {
vec3 p = floor(x),f = fract(x);
f = f*f*(3.-2.*f); // or smoothstep // to make derivative continuous at borders
#define hash3(p) fract(sin(1e3*dot(p,vec3(1,57,-13.7)))*4375.5453) // rand
void main(void) {
if (getBar() <= 8)
CoolSphere(gl_FragColor, gl_FragCoord.xy);
else
mainImage2(gl_FragColor, gl_FragCoord.xy);
return mix( mix(mix( hash3(p+vec3(0,0,0)), hash3(p+vec3(1,0,0)),f.x), // triilinear interp
mix( hash3(p+vec3(0,1,0)), hash3(p+vec3(1,1,0)),f.x),f.y),
mix(mix( hash3(p+vec3(0,0,1)), hash3(p+vec3(1,0,1)),f.x),
mix( hash3(p+vec3(0,1,1)), hash3(p+vec3(1,1,1)),f.x),f.y), f.z);
}
#define noise(x) (noise3(x)+noise3(x+11.5)) / 2. // pseudoperlin improvement from foxes idea
vec3 l;
vec2 texttop = vec2(0., -.35), pt = (gl_FragCoord.xy / resolution) - texttop;
if(pt.y > 0.) {
l = gl_FragColor + texture2D(texts, pt);
}
void mainImage3( out vec4 O, vec2 U ) // ------------ draw isovalues
{
vec2 R = resolution.xy;
float n = noise(vec3(U*8./R.y, .1*time)),
v = sin(6.28*10.*n),
t = time;
v = smoothstep(1.,0., .5*abs(v)/fwidth(v));
O = mix( exp(-33./R.y )* texture2D( texture_sampler, (U+vec2(1,sin(t)))/R), // .97
.5+.5*sin(12.*n+vec4(0,2.1,-2.1,0)),
v );
}
/* "Vortex" by @kishimisu (2024) - https://www.shadertoy.com/view/MX33Dr
It eventually leads somewhere...
[388 → 378 chars by @Xor]
*/
#define R mat2(cos(vec4(0,11,33,0)
void mainImage(out vec4 O, vec2 F) {
vec2 V = resolution;
vec3 o;
float r = time;
float t= .1;
float e,x;
for (O *= e; e++ < 40.;
o.y += t*t*.09,
o.z = mod(o.z + r, .2) - .1,
x = t*.06 - r*.2,
o.x = fract(
o.xy *= R+floor(((atan(o.y, o.x) - x) / .314) +0.5) * .314 + x))
).x - .8,
t += x = length(o)*.5 - .014,
O += (1. + cos(t*.5 + r + vec4(0,1,2,0)))
* (.3 + sin(3.*t + r*5.)/4.)
/ (8. + x*4e2)
)
o = t * normalize(vec3((F+F-V.xy)*R+r*.15)),V.y));
}
void main(void)
{
float abstime = abs(time);
vec3 l;
if (abstime < 10.0)
CoolSphere(gl_FragColor, gl_FragCoord.xy);
else if (abstime < 15.0)
{
mainImage2(gl_FragColor, gl_FragCoord.xy);
}
else if (abstime < 20.0)
{
mainImage(gl_FragColor, gl_FragCoord.xy);
}
else
{
mainImage3(gl_FragColor, gl_FragCoord.xy);
}
vec2 texttop = vec2(0., -.35), pt = (gl_FragCoord.xy / resolution) - texttop;
if (pt.y > 0.)
l = gl_FragColor + texture2D(texts, pt);
gl_FragColor = vec4(l * (1.0), 1.0);
gl_FragColor = vec4(l * (1.0), 1.0);
}

156
shader_minified.h Normal file
View File

@ -0,0 +1,156 @@
// Generated with Shader Minifier 1.3.6 (https://github.com/laurentlb/Shader_Minifier/)
#ifndef SHADER_MINIFIED_H_
# define SHADER_MINIFIED_H_
# define VAR_resolution "s"
# define VAR_texts "c"
# define VAR_texture_sampler "m"
# define VAR_time "v"
const char *__temp_cleaned_shader_glsl =
"uniform float v;"
"uniform vec2 s;"
"uniform sampler2D m,c;"
"float f=0.;"
"vec2 n(vec2 v)"
"{"
"return vec2(v.x*v.x-v.y*v.y,2.*v.x*v.y);"
"}"
"mat2 t(float v)"
"{"
"return mat2(cos(v),sin(v),-sin(v),cos(v));"
"}"
"vec2 n(vec3 v,vec3 y)"
"{"
"vec4 s=vec4(0,0,0,2);"
"vec3 f=v-s.xyz;"
"float t=dot(f,y),m=t*t-dot(f,f)+s.w*s.w;"
"if(m<0.)"
"return vec2(-1);"
"m=sqrt(m);"
"return vec2(-t-m,-t+m);"
"}"
"float x(vec3 v)"
"{"
"float f=0.;"
"vec3 y=v;"
"for(int m=0;m<10;++m)"
"v=.7*abs(v)/dot(v,v)-.7,v.yz=n(v.yz),v=v.zxy,f+=exp(-19.*abs(dot(v,y)));"
"return f/2.;"
"}"
"vec3 n(vec3 v,vec3 y,vec2 s)"
"{"
"float f=s.x;"
"vec3 m=vec3(0);"
"float r=0.;"
"for(int i=0;i<64;i++)"
"{"
"f+=.02*exp(-2.*r);"
"if(f>s.y)"
"break;"
"r=x(v+f*y);"
"m=.99*m+.08*vec3(r*r,r,r*r*r);"
"}"
"return m;"
"}"
"void t(out vec4 f,vec2 y)"
"{"
"float r=v;"
"vec2 i=-1.+2.*(y.xy/s.xy);"
"i.x*=s.x/s.y;"
"vec2 d=vec2(0);"
"d-=.5;"
"vec3 a=vec3(4);"
"a.yz*=t(d.y);"
"a.xz*=t(d.x+.1*r);"
"vec3 c=normalize(vec3(0)-a),g=normalize(cross(c,vec3(0,1,0))),z=normalize(i.x*g+i.y*normalize(cross(g,c))+4.*c);"
"vec2 o=n(a,z);"
"vec3 x=n(a,z,o);"
"if(o.x<0.)"
"x=texture2D(m,z).xyz;"
"else"
"{"
"vec3 e=(a+o.x*z)/2.;"
"e=reflect(z,e);"
"float l=pow(.5+clamp(dot(e,z),0.,1.),3.)*1.3;"
"x+=texture2D(m,e).xyz*l;"
"}"
"x=.5*log(1.+x);"
"x=clamp(x,0.,1.);"
"f=vec4(x,1);"
"}"
"float e(vec3 v)"
"{"
"vec3 f=abs(v)-vec3(.4,.4,.1);"
"return length(max(f,0.))+min(max(f.x,max(f.y,f.z)),0.);"
"}"
"float e(vec3 v,float y)"
"{"
"v*=y;"
"float f=e(v)/1.5;"
"v.xy*=5.;"
"v.y-=3.5;"
"v.xy*=t(.75);"
"return-f;"
"}"
"float x(vec3 v,float y)"
"{"
"vec3 m=v;"
"v=m;"
"v.y+=sin(f*.4)*2.5;"
"v.xy*=t(.8);"
"float s=e(v,2.-abs(sin(f*.4))*1.5);"
"v=m;"
"v.y-=sin(f*.4)*2.5;"
"v.xy*=t(.8);"
"float z=e(v,2.-abs(sin(f*.4))*1.5);"
"v=m;"
"v.x+=sin(f*.4)*2.5;"
"v.xy*=t(.8);"
"float r=e(v,2.-abs(sin(f*.4))*1.5);"
"v=m;"
"v.x-=sin(f*.4)*2.5;"
"v.xy*=t(.8);"
"float c=e(v,2.-abs(sin(f*.4))*1.5);"
"v=m;"
"v.xy*=t(.8);"
"float x=e(v,.5)*6.;"
"v=m;"
"float g=e(v,.5)*6.;"
"return max(max(max(max(max(s,z),r),c),x),g);"
"}"
"void p(out vec4 m,vec2 y)"
"{"
"vec3 r=vec3(0,-.2,v*4.),z=normalize(vec3((y.xy*2.-s.xy)/min(s.x,s.y),1.5));"
"z.xy=z.xy*t(sin(v*.03)*5.);"
"z.yz=z.yz*t(sin(v*.05)*.2);"
"float a=.1;"
"vec3 i=vec3(0);"
"float c=0.;"
"for(int e=0;e<99;e++)"
"{"
"vec3 d=r+z*a;"
"d=mod(d-2.,4.)-2.;"
"f=v-float(e)*.01;"
"float g=x(d,v);"
"g=max(abs(g),.01);"
"c+=exp(-g*23.);"
"a+=g*.55;"
"}"
"i=vec3(c*.02);"
"i+=vec3(0,.2*abs(sin(v)),.5+sin(v)*.2);"
"m=vec4(i,1.-a*(.02+.02*sin(v)));"
"}"
"void main()"
"{"
"if(floor(abs(v)/(60./133))<=8)"
"t(gl_FragColor,gl_FragCoord.xy);"
"else"
" p(gl_FragColor,gl_FragCoord.xy);"
"vec3 f;"
"vec2 m=gl_FragCoord.xy/s-vec2(0,-.35);"
"if(m.y>0.)"
"f=gl_FragColor+texture2D(c,m);"
"gl_FragColor=vec4(f,1);"
"}";
#endif // SHADER_MINIFIED_H_

View File

@ -45,27 +45,17 @@ TIMINGS_REC_STRING_PTR_FIELD_OFS equ (REC_TIMINGS_TIME_FIELD_SIZE + REC_TIMINGS_
section .textstr1 data
;______STRINGS_START______
_string0: DEFINE_STRING 'Hello World' END_STRING
_string1: DEFINE_STRING 'This is Scene1' END_STRING
_string2: DEFINE_STRING 70, 105, 114, 115, 116, 32, 100, 101, 109, 111, 13, 119, 101, 32, 101, 118, 101, 114, 32, 109, 97, 100, 101 END_STRING
_string3: DEFINE_STRING 'This is Scene2' END_STRING
_string4: DEFINE_STRING 83, 97, 121, 32, 104, 105, 32, 116, 111, 13, 77, 111, 109, 32, 102, 111, 114, 32, 109, 101 END_STRING
_string5: DEFINE_STRING 'Shout out to' END_STRING
_string6: DEFINE_STRING 'Puavohard' END_STRING
_string7: DEFINE_STRING 'Goodbye!' END_STRING
_string0: DEFINE_STRING 32 END_STRING
_string1: DEFINE_STRING 65, 115, 115, 101, 109, 98, 108, 121, 13, 50, 48, 50, 52 END_STRING
_string2: DEFINE_STRING 71, 111, 111, 100, 98, 121, 101, 33 END_STRING
;______STRINGS_END______
section .textstr2 data
text_string_timings:
;______TIMINGS_START______
DEFINE_TIMING TIMING_TIME(0,0.00000,0) TIMING_ALIAS('START_TIME') TIMING_CUSTOM(0) TIMING_STRING(0,_string0) ; this is a comment
DEFINE_TIMING TIMING_TIME(1,0.00000,88200) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string1) ; this is a comment
DEFINE_TIMING TIMING_TIME(2,0.50000,220500) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string2) ; another comment
DEFINE_TIMING TIMING_TIME(10,0.00000,882000) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string3) ; this is a komment
DEFINE_TIMING TIMING_TIME(12,0.00000,1058400) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string4) ;
DEFINE_TIMING TIMING_TIME(15,0.00000,1323000) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string5) ; abcd
DEFINE_TIMING TIMING_TIME(18,0.00000,1587600) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string6) ; efgh
DEFINE_TIMING TIMING_TIME(20,0.00000,1764000) TIMING_ALIAS('END_TIME') TIMING_CUSTOM(0) TIMING_STRING(0,_string7) ; efgh
DEFINE_TIMING TIMING_TIME(0,0.00000,0) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string0) ;
DEFINE_TIMING TIMING_TIME(4,0.00000,318315) TIMING_ALIAS('') TIMING_CUSTOM(0) TIMING_STRING(0,_string1) ;
DEFINE_TIMING TIMING_TIME(20,0.00000,1591578) TIMING_ALIAS('END_TIME') TIMING_CUSTOM(0) TIMING_STRING(0,_string2) ;
;______TIMINGS_END______
dd 0xFFFFFFFF ; end-of-time