From 0b41ee5ca82c27c08e8155a7df97d38006db3ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Petri=20J=C3=A4rvisalo?= Date: Fri, 2 Aug 2024 10:57:55 +0300 Subject: [PATCH] =?UTF-8?q?pidemm=C3=A4t=20musat?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 4klang.asm | 67 +++++++--------- 4klang.h | 6 +- 4klang.inc | 6 +- 4klang.yml | 45 +++++------ 4klang_old.yml | 191 ++++++++++++++++++++++++++++++++++++++++++++ base.config | 8 +- minified.config | 5 +- music/4k_sg_v5.xrns | Bin 0 -> 28032 bytes 8 files changed, 255 insertions(+), 73 deletions(-) create mode 100644 4klang_old.yml create mode 100644 music/4k_sg_v5.xrns diff --git a/4klang.asm b/4klang.asm index f88bc99..4ff20d2 100644 --- a/4klang.asm +++ b/4klang.asm @@ -1,6 +1,6 @@ -%define SU_LENGTH_IN_SAMPLES 2828192 +%define SU_LENGTH_IN_SAMPLES 4521776 %define SU_SAMPLE_RATE 44100 -%define SU_BPM 116. +%define SU_BPM 110. ;------------------------------------------------------------------------------- ; unit struct @@ -76,7 +76,7 @@ global _su_render_song@4 _su_render_song@4: pushad ; Stack: edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr xor eax, eax - push 1696 ; Stack: VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr + push 1760 ; Stack: VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr push 1 ; Stack: RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr push eax ; Stack: GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr su_render_rowloop: ; loop through every row in the song @@ -114,11 +114,11 @@ 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, 5702 + cmp eax, 6013 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 - cmp eax, 496 + cmp eax, 752 jl su_render_rowloop ; rewind the stack the entropy of multiple pop eax is probably lower than add pop eax ; eax = GlobalTick, Stack: RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr @@ -183,9 +183,9 @@ su_update_voices_skipreset: su_update_voices_nexttrack: pop ebx ; ebx=first voice of next instrument, Stack: ptrnrow pop edx ; edx=patrnrow - add esi, 31 + add esi, 47 inc ebp - cmp ebp,su_synth_obj + 10 + cmp ebp,su_synth_obj + 9 jl su_update_voices_trackloop ret @@ -857,11 +857,6 @@ section .su_patterns data align=1 su_patterns: db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 db 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,62,1,64,1,65,1,1,1,67,1,1,1 - db 69,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 53,1,1,1,1,1,1,1,1,1,1,1,1,1,64,62 - db 64,1,1,1,1,1,1,1,69,1,1,1,1,1,1,1 db 33,0,0,0,33,33,33,33,0,0,33,0,0,33,0,0 db 28,0,0,0,28,28,28,28,0,0,28,0,0,28,0,0 db 26,0,0,0,26,26,26,26,0,0,26,0,0,26,0,0 @@ -869,42 +864,40 @@ su_patterns: db 28,0,0,0,28,28,28,30,0,0,30,0,0,30,0,0 db 32,0,0,0,32,32,32,32,0,0,32,0,0,32,0,0 db 33,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 45,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 40,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 45,0,0,0,45,45,45,45,0,0,45,0,0,45,0,0 db 40,0,0,0,40,40,40,40,0,0,40,0,0,40,0,0 db 38,0,0,0,38,38,38,38,0,0,38,0,0,38,0,0 db 35,0,0,0,35,35,35,35,0,0,35,0,0,35,0,0 db 40,0,0,0,40,40,40,42,0,0,42,0,0,42,0,0 db 47,0,0,0,47,47,47,47,0,0,47,0,0,47,0,0 - db 21,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 40,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 44,0,0,0,44,44,44,44,0,0,44,0,0,44,0,0 db 49,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 44,0,0,0,44,44,44,44,0,0,44,0,0,44,0,0 + db 64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 1,1,1,1,62,1,64,1,65,1,1,1,67,1,1,1 + db 69,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 65,1,1,1,1,1,1,1,1,1,1,1,1,1,64,62 + db 64,1,1,1,1,1,1,1,69,1,1,1,1,1,1,1 db 49,0,0,0,49,49,49,49,0,0,49,0,0,49,0,0 db 42,0,0,0,42,42,42,42,0,0,42,0,0,42,0,0 db 59,0,0,0,59,59,59,59,0,0,59,0,0,59,0,0 - db 64,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 1,1,1,1,50,1,52,1,53,1,1,1,55,1,1,1 db 57,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 65,1,1,1,1,1,1,1,1,1,1,1,1,1,52,50 + db 53,1,1,1,1,1,1,1,1,1,1,1,1,1,52,50 db 52,1,1,1,1,1,1,1,57,1,1,1,1,1,1,1 db 52,0,0,0,52,52,52,52,0,0,52,0,0,52,0,0 db 57,0,0,0,57,57,57,57,0,0,57,0,0,57,0,0 - db 33,1,1,1,33,33,33,33,1,1,33,1,1,33,1,1 - db 32,1,1,1,32,32,32,32,1,1,32,1,1,32,1,1 - db 30,1,1,1,30,30,30,30,1,1,30,1,1,30,1,1 db 45,1,1,1,45,45,45,45,1,1,45,1,1,45,1,1 db 44,1,1,1,44,44,44,44,1,1,44,1,1,44,1,1 db 42,1,1,1,42,42,42,42,1,1,42,1,1,42,1,1 - db 0,0,0,0,0,0,0,0,0,0,0,0,69,1,1,1 - db 73,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0 - db 74,1,1,1,1,1,1,1,1,1,0,0,73,1,0,71 db 73,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 + db 74,1,1,1,1,1,1,1,1,1,1,1,73,1,1,71 db 1,1,1,1,0,0,0,0,73,1,1,1,1,1,1,1 db 81,1,1,1,1,1,1,1,1,1,1,1,83,1,1,1 db 85,1,1,1,1,1,1,1,83,1,1,1,1,1,1,81 db 80,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,0,0,0,0,0,78,1,1,1,1,1,1,80 + db 1,1,1,1,0,0,0,0,78,1,1,1,1,1,1,80 db 81,1,1,1,1,1,1,1,1,1,0,0,78,1,1,80 db 81,1,1,1,1,1,1,1,1,0,0,0,83,1,1,81 db 80,1,1,1,1,1,1,1,81,1,1,1,1,1,1,1 @@ -912,6 +905,7 @@ su_patterns: db 85,1,1,1,1,1,1,1,0,0,0,0,85,1,1,83 db 85,1,1,1,1,1,1,1,0,0,0,0,81,1,1,85 db 83,1,1,1,1,1,1,1,81,1,1,1,1,1,1,1 + db 74,1,1,1,1,1,1,1,1,1,1,1,73,1,0,71 db 80,1,1,1,1,1,1,1,0,0,0,0,80,1,1,1 db 81,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 62,1,1,1,62,62,62,62,1,1,62,1,1,62,1,1 @@ -922,16 +916,15 @@ su_patterns: ;------------------------------------------------------------------------------- section .su_tracks data align=1 su_tracks: - db 21,1,1,2,3,4,5,6,1,7,7,7,7,7,7,7,7,7,7,8,8,9,10,11,12,7,7,8,8,7,7 - db 13,1,1,1,1,1,14,1,1,15,15,15,15,15,15,15,15,15,15,16,16,17,18,19,20,15,15,16,16,15,15 - db 0,22,1,1,1,1,22,1,1,16,16,16,16,16,16,16,16,16,16,20,20,15,15,20,23,16,16,20,20,16,16 - db 0,1,24,1,1,1,24,1,1,25,25,25,25,25,25,25,25,25,25,23,23,26,26,23,27,25,25,23,23,25,25 - db 0,1,1,28,29,30,31,32,1,33,33,33,33,33,33,33,33,33,33,27,27,34,34,27,1,33,33,27,27,33,33 - db 0,1,1,1,1,1,1,1,1,35,35,35,35,35,35,35,35,35,35,36,36,37,37,36,36,35,35,36,36,35,35 - db 0,1,1,1,1,1,1,1,1,38,38,38,38,38,38,38,38,38,38,39,39,40,40,39,39,38,38,39,39,38,38 - db 0,1,1,1,1,1,1,1,1,1,1,1,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,0 - db 0,1,1,1,1,1,1,1,1,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59,59 - db 0,1,1,1,1,1,1,1,1,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60,60 + db 8,1,1,1,1,1,8,1,1,2,2,2,2,2,2,2,2,2,2,3,3,4,5,6,7,2,2,3,3,2,2,2,2,2,2,3,3,4,5,6,7,2,2,3,3,2,2 + db 0,9,1,1,1,1,9,1,1,10,10,10,10,10,10,10,10,10,10,11,11,12,13,14,15,10,10,11,11,10,10,10,10,10,10,11,11,12,13,14,15,10,10,11,11,10,10 + db 0,1,16,1,1,1,16,1,1,11,11,11,11,11,11,11,11,11,11,15,15,10,10,15,17,11,11,15,15,11,11,11,11,11,11,15,15,10,10,15,17,11,11,15,15,11,11 + db 0,1,1,18,19,20,21,22,1,23,23,23,23,23,23,23,23,23,23,17,17,24,24,17,25,23,23,17,17,23,23,23,23,23,23,17,17,24,24,17,25,23,23,17,17,23,23 + db 0,1,1,26,27,28,29,30,1,31,31,31,31,31,31,31,31,31,31,25,25,32,32,25,1,31,31,25,25,31,31,31,31,31,31,25,25,32,32,25,1,31,31,25,25,31,31 + db 0,1,1,1,1,1,1,1,1,33,33,33,33,33,33,33,33,33,33,34,34,35,35,34,34,33,33,34,34,33,33,33,33,33,33,34,34,35,35,34,34,33,33,34,34,33,33 + db 0,1,1,1,1,1,1,1,1,1,1,1,1,36,37,36,38,39,40,41,42,43,44,45,46,47,48,49,41,36,50,36,38,39,40,41,42,43,44,45,46,47,48,49,51,52,0 + db 0,1,1,1,1,1,1,1,1,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53,53 + db 0,1,1,1,1,1,1,1,1,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54 ;------------------------------------------------------------------------------- ; Sample offsets ;------------------------------------------------------------------------------- @@ -961,7 +954,7 @@ su_sample_offsets: ;------------------------------------------------------------------------------- section .su_delay_times data align=1 su_delay_times: - dw 5230,4533,22810,45620,1116,1188,1276,1356,1422,1492,1556,1618,1140,1212,1300,1380,1446,1516,1580,1642 + dw 5230,4533,24054,48109,1116,1188,1276,1356,1422,1492,1556,1618,1140,1212,1300,1380,1446,1516,1580,1642 ;------------------------------------------------------------------------------- @@ -976,7 +969,7 @@ su_patch_opcodes: ;------------------------------------------------------------------------------- section .su_patch_operands data align=1 su_patch_operands: - db 57,82,62,63,128,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,90,76,52,0,4,81,53,128,0,68,0,0,83,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 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 ;------------------------------------------------------------------------------- ; Constants diff --git a/4klang.h b/4klang.h index 3b11a5c..6c9bfb3 100644 --- a/4klang.h +++ b/4klang.h @@ -3,14 +3,14 @@ #define SU_RENDER_H #define SU_CHANNEL_COUNT 2 -#define SU_LENGTH_IN_SAMPLES 2828192 +#define SU_LENGTH_IN_SAMPLES 4521776 #define SU_BUFFER_LENGTH (SU_LENGTH_IN_SAMPLES*SU_CHANNEL_COUNT) #define SU_SAMPLE_RATE 44100 -#define SU_BPM 116 +#define SU_BPM 110 #define SU_ROWS_PER_BEAT 4 #define SU_ROWS_PER_PATTERN 16 -#define SU_LENGTH_IN_PATTERNS 31 +#define SU_LENGTH_IN_PATTERNS 47 #define SU_LENGTH_IN_ROWS (SU_LENGTH_IN_PATTERNS*SU_PATTERN_SIZE) #define SU_SAMPLES_PER_ROW (SU_SAMPLE_RATE*60/(SU_BPM*SU_ROWS_PER_BEAT)) diff --git a/4klang.inc b/4klang.inc index 1c05405..5a35918 100644 --- a/4klang.inc +++ b/4klang.inc @@ -3,14 +3,14 @@ %define PLAYER_INC %define SU_CHANNEL_COUNT 2 -%define SU_LENGTH_IN_SAMPLES 2828192 +%define SU_LENGTH_IN_SAMPLES 4521776 %define SU_BUFFER_LENGTH (SU_LENGTH_IN_SAMPLES*SU_CHANNEL_COUNT) %define SU_SAMPLE_RATE 44100 -%define SU_BPM 116 +%define SU_BPM 110 %define SU_ROWS_PER_BEAT 4 %define SU_ROWS_PER_PATTERN 16 -%define SU_LENGTH_IN_PATTERNS 31 +%define SU_LENGTH_IN_PATTERNS 47 %define SU_LENGTH_IN_ROWS (SU_LENGTH_IN_PATTERNS*SU_PATTERN_SIZE) %define SU_SAMPLES_PER_ROW (SU_SAMPLE_RATE*60/(SU_BPM*SU_ROWS_PER_BEAT)) %define SU_SAMPLE_SIZE 2 diff --git a/4klang.yml b/4klang.yml index d101d69..fe13d32 100644 --- a/4klang.yml +++ b/4klang.yml @@ -1,46 +1,43 @@ -bpm: 116 +bpm: 110 rowsperbeat: 4 score: tracks: - numvoices: 1 - order: [0, -1, -1, 1, 2, 3, 4, 5, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 9, 10, 11, 6, 6, 7, 7, 6, 6] - patterns: [[21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [52, 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], [53, 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], [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, -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]] - numvoices: 1 - order: [0, -1, -1, -1, -1, -1, 1, -1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 2, 2, 3, 3, 2, 2] - patterns: [[33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 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, -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]] - 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, 3, 2, 4, 1, 1, 2, 2, 1, 1] - patterns: [[40, 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, -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]] - 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] - patterns: [[49, 1, 1, 1, 1, 1, 1, 1, 1, 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, -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]] - 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] - patterns: [[64, 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], [65, 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]] - - numvoices: 2 - 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] - patterns: [[33, 1, 1, 1, 33, 33, 33, 33, 1, 1, 33, 1, 1, 33, 1, 1], [32, 1, 1, 1, 32, 32, 32, 32, 1, 1, 32, 1, 1, 32, 1, 1], [30, 1, 1, 1, 30, 30, 30, 30, 1, 1, 30, 1, 1, 30, 1, 1]] - - numvoices: 2 - 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] + 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]] + - 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]] - numvoices: 3 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] - patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 73, 1, 0, 71], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [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, 0, 1, 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], [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]] + 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] + 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] + 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]] - 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] + 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]] rowsperpattern: 16 - length: 31 + length: 47 patch: - name: Strings numvoices: 5 units: - type: envelope id: 33 - parameters: {attack: 57, channel: 2, decay: 82, gain: 128, release: 63, stereo: 0, sustain: 62} + parameters: {attack: 57, channel: 2, decay: 82, gain: 107, release: 63, stereo: 0, sustain: 62} - 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} @@ -135,14 +132,14 @@ patch: numvoices: 1 units: - type: envelope - parameters: {attack: 0, decay: 68, gain: 90, release: 0, stereo: 0, sustain: 0} + parameters: {attack: 0, decay: 68, gain: 54, 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} - type: mulp parameters: {panning: 64, stereo: 0} - type: envelope - parameters: {attack: 0, auxgain: 64, decay: 68, gain: 83, outgain: 64, release: 0, stereo: 0, sustain: 0} + 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 diff --git a/4klang_old.yml b/4klang_old.yml new file mode 100644 index 0000000..d101d69 --- /dev/null +++ b/4klang_old.yml @@ -0,0 +1,191 @@ +bpm: 116 +rowsperbeat: 4 +score: + tracks: + - numvoices: 1 + order: [0, -1, -1, 1, 2, 3, 4, 5, -1, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7, 7, 8, 9, 10, 11, 6, 6, 7, 7, 6, 6] + patterns: [[21, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [52, 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], [53, 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], [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]] + - numvoices: 1 + order: [0, -1, -1, -1, -1, -1, 1, -1, -1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 4, 5, 6, 7, 2, 2, 3, 3, 2, 2] + patterns: [[33, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [45, 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]] + - 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, 3, 2, 4, 1, 1, 2, 2, 1, 1] + patterns: [[40, 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]] + - 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] + patterns: [[49, 1, 1, 1, 1, 1, 1, 1, 1, 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]] + - 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] + patterns: [[64, 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], [65, 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]] + - numvoices: 2 + 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] + patterns: [[33, 1, 1, 1, 33, 33, 33, 33, 1, 1, 33, 1, 1, 33, 1, 1], [32, 1, 1, 1, 32, 32, 32, 32, 1, 1, 32, 1, 1, 32, 1, 1], [30, 1, 1, 1, 30, 30, 30, 30, 1, 1, 30, 1, 1, 30, 1, 1]] + - numvoices: 2 + 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] + 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]] + - numvoices: 3 + order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] + patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 1, 1, 1], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 73, 1, 0, 71], [73, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [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, 0, 1, 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], [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] + patterns: [[62, 1, 1, 1, 62, 62, 62, 62, 1, 1, 62, 1, 1, 62, 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] + patterns: [[60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1]] + rowsperpattern: 16 + length: 31 +patch: + - name: Strings + numvoices: 5 + units: + - type: envelope + id: 33 + parameters: {attack: 57, channel: 2, decay: 82, gain: 128, release: 63, stereo: 0, sustain: 62} + - 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} + - 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} + - type: addp + id: 20 + parameters: {damp: 0, dry: 128, feedback: 96, notetracking: 2, panning: 64, pregain: 40, stereo: 0} + - type: mulp + 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} + - 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} + - 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} + - type: xch + id: 41 + parameters: {stereo: 0} + - type: addp + id: 39 + parameters: {stereo: 0} + - type: mulp + id: 35 + parameters: {stereo: 0} + - type: outaux + id: 23 + parameters: {auxgain: 19, outgain: 18, 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} + - 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} + - type: oscillator + parameters: {auxgain: 64, color: 64, detune: 48, gain: 97, looplength: 398, loopstart: 2073, outgain: 64, phase: 0, samplestart: 1034961, shape: 64, stereo: 0, transpose: 89, type: 4, unison: 2} + - type: addp + id: 16 + parameters: {stereo: 0} + - type: mulp + id: 14 + 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} + - 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} + - name: Trumpet + numvoices: 3 + units: + - type: envelope + id: 51 + parameters: {attack: 25, decay: 64, gain: 112, release: 64, stereo: 1, sustain: 88} + - 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} + - 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: outaux + id: 56 + parameters: {auxgain: 53, outgain: 56, stereo: 1} + - type: envelope + id: 61 + parameters: {attack: 91, decay: 0, gain: 82, 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} + - type: mulp + id: 62 + parameters: {stereo: 0} + - type: send + id: 1038 + parameters: {amount: 80, 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: 90, 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} + - type: mulp + parameters: {panning: 64, stereo: 0} + - type: envelope + parameters: {attack: 0, auxgain: 64, decay: 68, gain: 83, 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} + - type: outaux + parameters: {auxgain: 56, outgain: 77, stereo: 1} + - name: kick + numvoices: 1 + units: + - type: envelope + id: 1039 + parameters: {attack: 0, decay: 43, gain: 103, release: 50, stereo: 0, sustain: 89} + - type: oscillator + id: 1040 + parameters: {color: 42, detune: 42, gain: 128, looplength: 1, loopstart: 1034, phase: 0, samplestart: 741926, shape: 72, stereo: 0, transpose: 79, type: 4} + - type: mulp + id: 1041 + parameters: {stereo: 0} + - type: pan + id: 1043 + parameters: {panning: 64, stereo: 0} + - type: outaux + id: 1044 + parameters: {auxgain: 0, outgain: 72, stereo: 1} + - name: Global + numvoices: 1 + units: + - type: in + id: 7 + parameters: {channel: 2, stereo: 1} + - type: delay + id: 8 + parameters: {damp: 14, dry: 128, feedback: 123, notetracking: 0, pregain: 33, 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} diff --git a/base.config b/base.config index 49ae20b..5633ba0 100644 --- a/base.config +++ b/base.config @@ -43,11 +43,11 @@ USE_WIDECHAR_TEXTS=1 ########### Time base ########### USE_TIME_DIVIDER_IN_X86_CODE=1 -TIME_DIVIDER=91241.383 +TIME_DIVIDER=96218.180 TIME_BASE=bars AUDIO_DELAY=2048 -PROD_END_TIME=2830240 +PROD_END_TIME=4523824 ########### Final product ########### @@ -61,9 +61,9 @@ QUOTE=\" CRINKLER_ORDERTRIES=4000 -AUDIO_BUFFER_ALLOCATED_LENGTH=2830240 +AUDIO_BUFFER_ALLOCATED_LENGTH=4523824 AUDIO_SAMPLING_RATE=44100 LOOP_END=28.0 LOOP_START=24.0 LOOP_ENABLED=0 -TIME_DIVIDER_INT=91241 +TIME_DIVIDER_INT=96218 diff --git a/minified.config b/minified.config index 7d70fa8..2330871 100644 --- a/minified.config +++ b/minified.config @@ -13,11 +13,12 @@ TIME_UNIFORM_NAME='y' RESOLUTION_UNIFORM_NAME='v' TEXTS_UNIFORM_NAME='f' USE_WIDECHAR_TEXTS=1 -TIME_DIVIDER=91241.383 +TIME_DIVIDER=96218.180 TIME_BASE=bars -TIME_DIVIDER_INT=91241 +TIME_DIVIDER_INT=96218 TWO_PASS_RENDERING=0 SECOND_PASS_NEGATIVE_TIME=0 USE_TEXTS=0 USE_TEXTS_UNIFORM=0 CRINKLER_ORDERTRIES=30000 +USE_RESOLUTION_UNIFORM=0 diff --git a/music/4k_sg_v5.xrns b/music/4k_sg_v5.xrns new file mode 100644 index 0000000000000000000000000000000000000000..5c62c3c534cf61f3bf844b0928821f3d2151c5c2 GIT binary patch literal 28032 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