From 53b46c3f83fb3971fb544720c43632332cbe55d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petri=20J=C3=A4rvisalo?= Date: Fri, 2 Aug 2024 14:19:07 +0300 Subject: [PATCH] musamusa --- 4klang.asm | 63 ++++++++++++++--------------- 4klang.h | 4 +- 4klang.inc | 4 +- 4klang.yml | 94 ++++++++++++++++++++------------------------ minified.config | 2 +- music/4k_sg_v5.xrns | Bin 28032 -> 28103 bytes 6 files changed, 77 insertions(+), 90 deletions(-) diff --git a/4klang.asm b/4klang.asm index 4ff20d2..85d603e 100644 --- a/4klang.asm +++ b/4klang.asm @@ -1,6 +1,6 @@ -%define SU_LENGTH_IN_SAMPLES 4521776 +%define SU_LENGTH_IN_SAMPLES 4214960 %define SU_SAMPLE_RATE 44100 -%define SU_BPM 110. +%define SU_BPM 118. ;------------------------------------------------------------------------------- ; unit struct @@ -114,7 +114,7 @@ su_render_sampleloop: ; loop through every sample in the row pop eax ; eax = Sample, Stack: Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr inc dword [esp + 4] ; increment global time, used by delays inc eax - cmp eax, 6013 + cmp eax, 5605 jl su_render_sampleloop pop eax ; eax = Row, Stack: GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr ; Stack: pushad ptr inc eax @@ -301,6 +301,7 @@ su_op_xch: section .su_op_filter code align=1 su_op_filter: lodsb ; load the flags to al + call su_effects_stereohelper fld dword [edx + 4] ; r x fld dword [edx]; f r x fmul st0, st0 ; f2 x (square the input so we never get negative and also have a smoother behaviour in the lower frequencies) @@ -322,10 +323,10 @@ su_op_filter: jz short su_op_filter_skiplowpass fadd dword [ebp] su_op_filter_skiplowpass: - test al, byte 0x04 - jz short su_op_filter_skipneghighpass - fsub dword [ebp+4] -su_op_filter_skipneghighpass: + test al, byte 0x08 + jz short su_op_filter_skipnegbandpass + fsub dword [ebp+8] +su_op_filter_skipnegbandpass: ret ;------------------------------------------------------------------------------- ; PAN opcode: pan the signal @@ -548,24 +549,6 @@ su_op_envelope_leave2: fmul dword [edx + 16] ; [gain]*x' ret -;------------------------------------------------------------------------------- -; NOISE opcode: creates noise -;------------------------------------------------------------------------------- -; Mono: push a random value [-1,1] value on stack -; Stereo: push two (differeent) random values on stack -;------------------------------------------------------------------------------- -section .su_op_noise code align=1 -su_op_noise: - lea ecx,[esp + 60] - imul eax, [ecx],16007 - mov [ecx],eax - fild dword [ecx] - fidiv dword [ICONST_2147483648] ; 65536*32768 - fld dword [edx] - call su_waveshaper - fmul dword [edx + 4] - ret - ;------------------------------------------------------------------------------- ; OSCILLAT opcode: oscillator, the heart of the synth ;------------------------------------------------------------------------------- @@ -797,6 +780,23 @@ su_waveshaper: fmulp st1 ; x*a/(1-a+(2*a-1)*abs(x)) ret +;------------------------------------------------------------------------------- +; su_effects_stereohelper: moves the workspace to next, does the filtering for +; right channel (pulling the calling address from stack), rewinds the +; workspace and returns +;------------------------------------------------------------------------------- +section .su_effects_stereohelper code align=1 +su_effects_stereohelper: + jnc su_effects_stereohelper_mono ; carry is still the stereo bit + add ebp, 16 + fxch ; r l + call [esp] ; call whoever called me... + fxch ; l r + sub ebp, 16 ; move WRK back to where it was +su_effects_stereohelper_mono: + ret ; return to process l/mono sound + + section .su_clip code align=1 su_clip: fld1 ; 1 x a @@ -824,9 +824,8 @@ su_vm_jumptable: dd su_op_outaux dd su_op_pan dd su_op_delay - dd su_op_send - dd su_op_noise dd su_op_filter + dd su_op_send dd su_op_in dd su_op_out @@ -843,9 +842,8 @@ su_vm_transformcounts: db 2 db 1 db 4 + db 2 db 1 - db 2 - db 2 db 0 db 1 @@ -954,7 +952,7 @@ su_sample_offsets: ;------------------------------------------------------------------------------- section .su_delay_times data align=1 su_delay_times: - dw 5230,4533,24054,48109,1116,1188,1276,1356,1422,1492,1556,1618,1140,1212,1300,1380,1446,1516,1580,1642 + dw 5230,4533,22423,44847,1116,1188,1276,1356,1422,1492,1556,1618,1140,1212,1300,1380,1446,1516,1580,1642 ;------------------------------------------------------------------------------- @@ -962,14 +960,14 @@ su_delay_times: ;------------------------------------------------------------------------------- section .su_patch_opcodes data align=1 su_patch_opcodes: - db 2,4,4,6,8,2,4,4,10,6,8,13,0,2,4,4,6,8,14,17,13,0,3,5,9,17,13,2,4,8,18,0,2,4,8,2,20,8,22,22,6,14,13,0,2,4,8,14,13,0,25,17,27,0 + db 2,4,4,6,8,2,4,4,10,6,8,13,0,2,4,4,6,8,14,17,13,0,3,5,9,17,19,13,2,4,8,20,0,2,4,8,14,13,0,2,4,8,14,13,0,23,17,25,0 ;------------------------------------------------------------------------------- ; The parameters / inputs to each opcode ;------------------------------------------------------------------------------- section .su_patch_operands data align=1 su_patch_operands: - db 57,82,62,63,107,91,65,0,0,67,41,129,79,63,0,1,65,62,129,57,87,50,64,100,91,54,0,0,64,64,129,79,62,0,1,64,78,129,18,19,31,70,0,66,76,77,31,0,2,64,128,130,89,48,0,2,64,97,130,75,28,128,59,86,0,1,20,32,25,64,88,64,112,62,64,0,3,64,47,129,84,128,37,18,2,1,56,53,91,0,92,89,82,82,64,0,128,64,128,72,80,41,0,0,68,0,0,54,76,52,0,4,81,53,128,0,68,0,0,53,2,39,128,67,68,110,116,64,59,77,56,0,43,89,50,103,79,42,0,5,72,128,128,64,72,0,2,33,128,123,14,4,15,90 + db 64,82,64,64,128,91,65,0,0,67,41,130,79,63,0,1,65,62,129,64,87,64,64,98,91,54,0,0,64,85,129,79,62,0,1,64,128,129,0,41,31,70,0,66,66,77,31,0,2,64,128,130,89,48,0,2,64,97,130,41,28,128,59,86,0,1,36,43,25,64,80,64,108,62,64,0,3,64,101,128,84,128,37,18,2,1,64,128,72,72,51,91,0,92,89,92,82,64,0,128,64,128,72,87,41,0,13,82,0,0,79,72,52,0,4,81,81,129,64,30,25,0,43,89,50,103,79,42,0,5,72,128,128,64,50,29,2,30,128,120,14,4,15,70 ;------------------------------------------------------------------------------- ; Constants @@ -982,7 +980,6 @@ FCONST_0_99609375 dd 0x3f7f0000 FCONST_3_80000em05 dd 0x381f6230 FCONST_9_269614em05 dd 0x38c265dc FCONST_84_28075 dd 0x42a88fbe -ICONST_2147483648 dd 0x80000000 ICONST_1034594986 dd 0x3daaaaaa ICONST_24 dd 0x18 diff --git a/4klang.h b/4klang.h index 6c9bfb3..0912170 100644 --- a/4klang.h +++ b/4klang.h @@ -3,11 +3,11 @@ #define SU_RENDER_H #define SU_CHANNEL_COUNT 2 -#define SU_LENGTH_IN_SAMPLES 4521776 +#define SU_LENGTH_IN_SAMPLES 4214960 #define SU_BUFFER_LENGTH (SU_LENGTH_IN_SAMPLES*SU_CHANNEL_COUNT) #define SU_SAMPLE_RATE 44100 -#define SU_BPM 110 +#define SU_BPM 118 #define SU_ROWS_PER_BEAT 4 #define SU_ROWS_PER_PATTERN 16 #define SU_LENGTH_IN_PATTERNS 47 diff --git a/4klang.inc b/4klang.inc index 5a35918..1bc510a 100644 --- a/4klang.inc +++ b/4klang.inc @@ -3,11 +3,11 @@ %define PLAYER_INC %define SU_CHANNEL_COUNT 2 -%define SU_LENGTH_IN_SAMPLES 4521776 +%define SU_LENGTH_IN_SAMPLES 4214960 %define SU_BUFFER_LENGTH (SU_LENGTH_IN_SAMPLES*SU_CHANNEL_COUNT) %define SU_SAMPLE_RATE 44100 -%define SU_BPM 110 +%define SU_BPM 118 %define SU_ROWS_PER_BEAT 4 %define SU_ROWS_PER_PATTERN 16 %define SU_LENGTH_IN_PATTERNS 47 diff --git a/4klang.yml b/4klang.yml index fe13d32..bb33874 100644 --- a/4klang.yml +++ b/4klang.yml @@ -1,34 +1,34 @@ -bpm: 110 +bpm: 118 rowsperbeat: 4 score: tracks: - numvoices: 1 - order: [0, -1, -1, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, -1, -1] - patterns: [[33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [33, 0, 1, 1, 33, 33, 33, 33, 0, 1, 33, 0, 1, 33, 0, 1], [28, 0, 1, 1, 28, 28, 28, 28, 0, 1, 28, 0, 1, 28, 0, 1], [26, 0, 1, 1, 26, 26, 26, 26, 0, 1, 26, 0, 1, 26, 0, 1], [23, 0, 1, 1, 23, 23, 23, 23, 0, 1, 23, 0, 1, 23, 0, 1], [28, 0, 1, 1, 28, 28, 28, 30, 0, 1, 30, 0, 1, 30, 0, 1], [32, 0, 1, 1, 32, 32, 32, 32, 0, 1, 32, 0, 1, 32, 0, 1]] + order: [0, -1, -1, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, 7] + patterns: [[33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [33, 0, 1, 1, 33, 33, 33, 33, 0, 1, 33, 0, 1, 33, 0, 1], [28, 0, 1, 1, 28, 28, 28, 28, 0, 1, 28, 0, 1, 28, 0, 1], [26, 0, 1, 1, 26, 26, 26, 26, 0, 1, 26, 0, 1, 26, 0, 1], [23, 0, 1, 1, 23, 23, 23, 23, 0, 1, 23, 0, 1, 23, 0, 1], [28, 0, 1, 1, 28, 28, 28, 30, 0, 1, 30, 0, 1, 30, 0, 1], [32, 0, 1, 1, 32, 32, 32, 32, 0, 1, 32, 0, 1, 32, 0, 1], [33, 0, 1, 1, 33, 33, 33, 33, 0, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, 0, -1, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, -1, -1] - patterns: [[40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 40, 0, 1, 40, 0, 1], [38, 0, 1, 1, 38, 38, 38, 38, 0, 1, 38, 0, 1, 38, 0, 1], [35, 0, 1, 1, 35, 35, 35, 35, 0, 1, 35, 0, 1, 35, 0, 1], [40, 0, 1, 1, 40, 40, 40, 42, 0, 1, 42, 0, 1, 42, 0, 1], [47, 0, 1, 1, 47, 47, 47, 47, 0, 1, 47, 0, 1, 47, 0, 1]] + order: [-1, 0, -1, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 5, 6, 1, 1, 2, 2, 1, 1, 7] + patterns: [[40, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 40, 0, 1, 40, 0, 1], [38, 0, 1, 1, 38, 38, 38, 38, 0, 1, 38, 0, 1, 38, 0, 1], [35, 0, 1, 1, 35, 35, 35, 35, 0, 1, 35, 0, 1, 35, 0, 1], [40, 0, 1, 1, 40, 40, 40, 42, 0, 1, 42, 0, 1, 42, 0, 1], [47, 0, 1, 1, 47, 47, 47, 47, 0, 1, 47, 0, 1, 47, 0, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, 0, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 2, 1, 1, -1, -1] - patterns: [[49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 40, 0, 1, 40, 0, 1], [47, 0, 1, 1, 47, 47, 47, 47, 0, 1, 47, 0, 1, 47, 0, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [44, 0, 1, 1, 44, 44, 44, 44, 0, 1, 44, 0, 1, 44, 0, 1]] + order: [-1, -1, 0, -1, -1, -1, 0, -1, -1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 2, 1, 1, 1, 1, 1, 1, 2, 2, 3, 3, 2, 4, 1, 1, 2, 2, 1, 1, 5] + patterns: [[49, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 40, 0, 1, 40, 0, 1], [47, 0, 1, 1, 47, 47, 47, 47, 0, 1, 47, 0, 1, 47, 0, 1], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [44, 0, 1, 1, 44, 44, 44, 44, 0, 1, 44, 0, 1, 44, 0, 1], [40, 0, 1, 1, 40, 40, 40, 40, 0, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, 0, 1, 2, 3, 4, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, 8, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, 8, 5, 5, 6, 6, 5, 5, -1, -1] - patterns: [[64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 62, 1, 64, 1, 65, 1, 1, 1, 67, 1, 1, 1], [69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 62], [64, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1], [49, 0, 1, 1, 49, 49, 49, 49, 0, 1, 49, 0, 1, 49, 0, 1], [44, 0, 1, 1, 44, 44, 44, 44, 0, 1, 44, 0, 1, 44, 0, 1], [42, 0, 1, 1, 42, 42, 42, 42, 0, 1, 42, 0, 1, 42, 0, 1], [59, 0, 1, 1, 59, 59, 59, 59, 0, 1, 59, 0, 1, 59, 0, 1]] + order: [-1, -1, -1, 0, 1, 2, 3, 4, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, 8, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, 8, 5, 5, 6, 6, 5, 5, 9] + patterns: [[64, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 62, 1, 64, 1, 65, 1, 1, 1, 67, 1, 1, 1], [69, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [65, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 64, 62], [64, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1, 1, 1, 1, 1], [49, 0, 1, 1, 49, 49, 49, 49, 0, 1, 49, 0, 1, 49, 0, 1], [44, 0, 1, 1, 44, 44, 44, 44, 0, 1, 44, 0, 1, 44, 0, 1], [42, 0, 1, 1, 42, 42, 42, 42, 0, 1, 42, 0, 1, 42, 0, 1], [59, 0, 1, 1, 59, 59, 59, 59, 0, 1, 59, 0, 1, 59, 0, 1], [49, 0, 1, 1, 49, 49, 49, 49, 0, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, 0, 1, 2, 3, 4, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, -1, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, -1, 5, 5, 6, 6, 5, 5, -1, -1] - patterns: [[52, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 50, 1, 52, 1, 53, 1, 1, 1, 55, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 50], [52, 1, 1, 1, 1, 1, 1, 1, 57, 1, 1, 1, 1, 1, 1, 1], [52, 0, 1, 1, 52, 52, 52, 52, 0, 1, 52, 0, 1, 52, 0, 1], [59, 0, 1, 1, 59, 59, 59, 59, 0, 1, 59, 0, 1, 59, 0, 1], [57, 0, 1, 1, 57, 57, 57, 57, 0, 1, 57, 0, 1, 57, 0, 1]] + order: [-1, -1, -1, 0, 1, 2, 3, 4, -1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, -1, 5, 5, 6, 6, 5, 5, 5, 5, 5, 5, 6, 6, 7, 7, 6, -1, 5, 5, 6, 6, 5, 5, 8] + patterns: [[52, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 50, 1, 52, 1, 53, 1, 1, 1, 55, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [53, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 52, 50], [52, 1, 1, 1, 1, 1, 1, 1, 57, 1, 1, 1, 1, 1, 1, 1], [52, 0, 1, 1, 52, 52, 52, 52, 0, 1, 52, 0, 1, 52, 0, 1], [59, 0, 1, 1, 59, 59, 59, 59, 0, 1, 59, 0, 1, 59, 0, 1], [57, 0, 1, 1, 57, 57, 57, 57, 0, 1, 57, 0, 1, 57, 0, 1], [52, 0, 1, 1, 52, 52, 52, 52, 0, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 4 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 0, 0, -1, -1] - patterns: [[45, 1, 1, 1, 45, 45, 45, 45, 1, 1, 45, 1, 1, 45, 1, 1], [44, 1, 1, 1, 44, 44, 44, 44, 1, 1, 44, 1, 1, 44, 1, 1], [42, 1, 1, 1, 42, 42, 42, 42, 1, 1, 42, 1, 1, 42, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 0, 0, 3] + patterns: [[45, 1, 1, 1, 45, 45, 45, 45, 1, 1, 45, 1, 1, 45, 1, 1], [44, 1, 1, 1, 44, 44, 44, 44, 1, 1, 44, 1, 1, 44, 1, 1], [42, 1, 1, 1, 42, 42, 42, 42, 1, 1, 42, 1, 1, 42, 1, 1], [45, 1, 1, 1, 45, 45, 45, 45, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 3 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 0, 14, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, -1, -1] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 5, 0, 14, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 15, 16, 17, 16] patterns: [[73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 1, 1, 71], [1, 1, 1, 1, 0, 1, 1, 1, 73, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1], [85, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1, 1, 1, 1, 81], [80, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 78, 1, 1, 1, 1, 1, 1, 80], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 78, 1, 1, 80], [81, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 83, 1, 1, 81], [80, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1], [83, 1, 1, 1, 1, 1, 0, 1, 81, 1, 1, 1, 1, 1, 83, 1], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 85, 1, 1, 83], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 81, 1, 1, 85], [83, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 1, 1], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 73, 1, 0, 71], [80, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 80, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1] - patterns: [[62, 1, 1, 1, 62, 62, 62, 62, 1, 1, 62, 1, 1, 62, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] + patterns: [[62, 1, 1, 1, 62, 62, 62, 62, 1, 1, 62, 1, 1, 62, 1, 1], [62, 1, 1, 1, 62, 62, 62, 62, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, -1, -1] - patterns: [[60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1]] + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1] + patterns: [[60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1], [60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1]] rowsperpattern: 16 length: 47 patch: @@ -37,10 +37,10 @@ patch: units: - type: envelope id: 33 - parameters: {attack: 57, channel: 2, decay: 82, gain: 107, release: 63, stereo: 0, sustain: 62} + parameters: {attack: 64, channel: 2, decay: 82, gain: 128, release: 64, stereo: 0, sustain: 64} - type: oscillator id: 19 - parameters: {color: 65, damp: 64, detune: 65, dry: 128, feedback: 125, gain: 41, looplength: 9710, loopstart: 251, notetracking: 0, phase: 0, pregain: 40, samplestart: 1448797, shape: 67, stereo: 0, transpose: 91, type: 4, unison: 1} + parameters: {color: 65, damp: 64, detune: 65, dry: 128, feedback: 125, gain: 41, looplength: 9710, loopstart: 251, notetracking: 0, phase: 0, pregain: 40, samplestart: 1448797, shape: 67, stereo: 0, transpose: 91, type: 4, unison: 2} - type: oscillator id: 24 parameters: {color: 69, detune: 63, gain: 62, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 65, stereo: 0, transpose: 79, type: 4, unison: 1} @@ -51,13 +51,13 @@ patch: parameters: {auxgain: 64, outgain: 64, panning: 64, stereo: 0} - type: envelope id: 46 - parameters: {attack: 57, auxgain: 64, decay: 87, gain: 100, outgain: 64, panning: 64, release: 64, stereo: 0, sustain: 50} + parameters: {attack: 64, auxgain: 64, decay: 87, gain: 98, outgain: 64, panning: 64, release: 64, stereo: 0, sustain: 64} - type: oscillator id: 37 - parameters: {auxgain: 35, color: 64, detune: 54, gain: 64, looplength: 9710, loopstart: 251, outgain: 40, phase: 0, samplestart: 1448797, shape: 64, stereo: 0, transpose: 91, type: 4, unison: 1} + parameters: {auxgain: 35, color: 64, detune: 54, gain: 85, looplength: 9710, loopstart: 251, outgain: 40, phase: 0, samplestart: 1448797, shape: 64, stereo: 0, transpose: 91, type: 4, unison: 1} - type: oscillator id: 38 - parameters: {color: 128, detune: 62, gain: 78, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 64, stereo: 0, transpose: 79, type: 4, unison: 1} + parameters: {color: 128, detune: 62, gain: 128, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 64, stereo: 0, transpose: 79, type: 4, unison: 1} - type: xch id: 41 parameters: {stereo: 0} @@ -69,13 +69,13 @@ patch: parameters: {stereo: 0} - type: outaux id: 23 - parameters: {auxgain: 19, outgain: 18, stereo: 1} + parameters: {auxgain: 41, outgain: 0, stereo: 1} - name: Pizzicato numvoices: 4 units: - type: envelope id: 1 - parameters: {attack: 31, channel: 2, decay: 70, gain: 76, release: 66, stereo: 0, sustain: 0} + parameters: {attack: 31, channel: 2, decay: 70, gain: 66, release: 66, stereo: 0, sustain: 0} - type: oscillator id: 2 parameters: {color: 64, damp: 64, detune: 31, dry: 128, feedback: 125, gain: 128, looplength: 398, loopstart: 2073, notetracking: 0, phase: 0, pregain: 40, samplestart: 1034961, shape: 64, stereo: 0, transpose: 77, type: 4, unison: 2} @@ -89,35 +89,38 @@ patch: parameters: {bandpass: 0, frequency: 82, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} - type: pan id: 5 - parameters: {auxgain: 39, outgain: 58, panning: 75, stereo: 0} + parameters: {auxgain: 39, outgain: 58, panning: 41, stereo: 0} - type: delay id: 49 parameters: {damp: 86, dry: 128, feedback: 59, notetracking: 0, pregain: 28, stereo: 1} varargs: [5230, 4533] - type: outaux id: 6 - parameters: {auxgain: 32, outgain: 20, stereo: 1} + parameters: {auxgain: 43, outgain: 36, stereo: 1} - name: Trumpet numvoices: 3 units: - type: envelope id: 51 - parameters: {attack: 25, decay: 64, gain: 112, release: 64, stereo: 1, sustain: 88} + parameters: {attack: 25, decay: 64, gain: 108, release: 64, stereo: 1, sustain: 80} - type: oscillator id: 1037 - parameters: {color: 64, detune: 64, gain: 47, looplength: 76, loopstart: 1916, phase: 0, samplestart: 1622065, shape: 64, stereo: 1, transpose: 62, type: 4, unison: 1} + parameters: {color: 64, detune: 64, gain: 101, looplength: 76, loopstart: 1916, phase: 0, samplestart: 1622065, shape: 64, stereo: 1, transpose: 62, type: 4, unison: 0} - type: mulp id: 53 parameters: {stereo: 1} - type: delay parameters: {damp: 18, dry: 128, feedback: 37, notetracking: 2, pregain: 84, stereo: 1} varargs: [48, 96] + - type: filter + id: 1045 + parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 128, stereo: 1} - type: outaux id: 56 - parameters: {auxgain: 53, outgain: 56, stereo: 1} + parameters: {auxgain: 51, outgain: 72, stereo: 1} - type: envelope id: 61 - parameters: {attack: 91, decay: 0, gain: 82, release: 89, stereo: 0, sustain: 92} + parameters: {attack: 91, decay: 0, gain: 92, release: 89, stereo: 0, sustain: 92} - type: oscillator id: 59 parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 82, type: 0, unison: 0} @@ -126,35 +129,22 @@ patch: parameters: {stereo: 0} - type: send id: 1038 - parameters: {amount: 80, port: 1, sendpop: 1, stereo: 0, target: 1037, unit: 0, voice: 0} + parameters: {amount: 87, port: 1, sendpop: 1, stereo: 0, target: 1037, unit: 0, voice: 0} - name: snare edm 2 (sample-st) comment: 'Suggested range: E-2 to C-3' numvoices: 1 units: - type: envelope - parameters: {attack: 0, decay: 68, gain: 54, release: 0, stereo: 0, sustain: 0} + parameters: {attack: 13, decay: 82, gain: 79, release: 0, stereo: 0, sustain: 0} - type: oscillator id: 200 - parameters: {color: 48, detune: 52, gain: 53, lfo: 0, looplength: 1, loopstart: 4276, phase: 0, samplestart: 560606, shape: 81, stereo: 0, transpose: 76, type: 4} + parameters: {color: 48, detune: 52, gain: 81, lfo: 0, looplength: 1, loopstart: 4276, phase: 0, samplestart: 560606, shape: 81, stereo: 0, transpose: 72, type: 4, unison: 1} - type: mulp parameters: {panning: 64, stereo: 0} - - type: envelope - parameters: {attack: 0, auxgain: 64, decay: 68, gain: 53, outgain: 64, release: 0, stereo: 0, sustain: 0} - - type: noise - parameters: {gain: 39, shape: 2, stereo: 0} - - type: mulp - parameters: {stereo: 0} - - type: filter - id: 201 - parameters: {bandpass: 0, frequency: 128, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 67, stereo: 0} - - type: filter - parameters: {bandpass: 0, frequency: 110, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 116, stereo: 0} - - type: addp - parameters: {stereo: 0} - type: pan - parameters: {panning: 59, stereo: 0} + parameters: {panning: 64, stereo: 0} - type: outaux - parameters: {auxgain: 56, outgain: 77, stereo: 1} + parameters: {auxgain: 25, outgain: 30, stereo: 1} - name: kick numvoices: 1 units: @@ -172,7 +162,7 @@ patch: parameters: {panning: 64, stereo: 0} - type: outaux id: 1044 - parameters: {auxgain: 0, outgain: 72, stereo: 1} + parameters: {auxgain: 29, outgain: 50, stereo: 1} - name: Global numvoices: 1 units: @@ -181,8 +171,8 @@ patch: parameters: {channel: 2, stereo: 1} - type: delay id: 8 - parameters: {damp: 14, dry: 128, feedback: 123, notetracking: 0, pregain: 33, stereo: 1} + parameters: {damp: 14, dry: 128, feedback: 120, notetracking: 0, pregain: 30, stereo: 1} varargs: [1116, 1188, 1276, 1356, 1422, 1492, 1556, 1618, 1140, 1212, 1300, 1380, 1446, 1516, 1580, 1642] - type: out id: 9 - parameters: {gain: 90, stereo: 1} + parameters: {gain: 70, stereo: 1} diff --git a/minified.config b/minified.config index ca5449b..1ab93ce 100644 --- a/minified.config +++ b/minified.config @@ -21,4 +21,4 @@ SECOND_PASS_NEGATIVE_TIME=0 USE_TEXTS=0 USE_TEXTS_UNIFORM=0 CRINKLER_ORDERTRIES=30000 -USE_RESOLUTION_UNIFORM=1 +USE_RESOLUTION_UNIFORM=1 \ No newline at end of file diff --git a/music/4k_sg_v5.xrns b/music/4k_sg_v5.xrns index 5c62c3c534cf61f3bf844b0928821f3d2151c5c2..76b7ece8c8ff1e1843b38e909e3d892b9d7de546 100644 GIT binary patch delta 17648 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