diff --git a/4klang.asm b/4klang.asm index c682422..456a434 100644 --- a/4klang.asm +++ b/4klang.asm @@ -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 5792 ; Stack: VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr + push 1696 ; 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 @@ -85,8 +85,8 @@ su_render_rowloop: ; loop through every row in the song xor eax, eax ; ecx is the current sample within row su_render_sampleloop: ; loop through every sample in the row push eax ; Stack: Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr - push 126672 ; Stack: PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr ; does the next voice reuse the current opcodes? - push 17 ; Stack: VoicesRemain, PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr + push 31664 ; Stack: PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr ; does the next voice reuse the current opcodes? + push 15 ; Stack: VoicesRemain, PolyphonyBitmask, Sample, Row, GlobalTick, RandSeed, VoiceTrackBitmask, edi, esi, ebp, esp, ebx, edx, ecx, eax, retaddr_su_render_song, OutputBufPtr mov edx, dword su_synth_obj ; edx points to the synth object mov ebx, dword su_patch_opcodes ; COM points to vm code mov esi, dword su_patch_operands ; VAL points to unit params @@ -185,7 +185,7 @@ su_update_voices_nexttrack: pop edx ; edx=patrnrow add esi, 41 inc ebp - cmp ebp,su_synth_obj + 11 + cmp ebp,su_synth_obj + 10 jl su_update_voices_trackloop ret @@ -301,7 +301,6 @@ 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) @@ -323,14 +322,6 @@ su_op_filter: jz short su_op_filter_skiplowpass fadd dword [ebp] su_op_filter_skiplowpass: - test al, byte 0x20 - jz short su_op_filter_skipbandpass - fadd dword [ebp+8] -su_op_filter_skipbandpass: - test al, byte 0x10 - jz short su_op_filter_skiphighpass - fadd dword [ebp+4] -su_op_filter_skiphighpass: test al, byte 0x04 jz short su_op_filter_skipneghighpass fsub dword [ebp+4] @@ -346,14 +337,12 @@ su_op_filter_skipneghighpass: ;------------------------------------------------------------------------------- section .su_op_pan code align=1 su_op_pan: - jc su_op_pan_do ; this time, if this is mono op... - fld st0 ; ...we duplicate the mono into stereo first -su_op_pan_do: - fld dword [edx] ; p l r - fld1 ; 1 p l r - fsub st1 ; 1-p p l r - fmulp st2 ; p (1-p)*l r - fmulp st2 ; (1-p)*l p*r + fld dword [edx] ; p s + fmul st1 ; p*s s + fsub st1, st0 ; p*s s-p*s + ; Equal to + ; s*p s*(1-p) + fxch ; s*(1-p) s*p SHOULD PROBABLY DELETE, WHY BOTHER ret ;------------------------------------------------------------------------------- @@ -644,7 +633,6 @@ su_op_oscillat_normalized: test al, byte 0x80 jz short su_op_oscillat_not_sample fst dword [ebp] ; for samples, we store the phase without mod(p,1) - fadd dword [edx + 8] call su_oscillat_sample jmp su_op_oscillat_shaping ; skip the rest to avoid color phase normalization and colorloading su_op_oscillat_not_sample: @@ -654,22 +642,12 @@ su_op_oscillat_not_sample: fprem ; we actually computed mod(p+1,1) instead of mod(p,1) as the fprem takes mod fstp st1 ; towards zero fst dword [ebp] ; store back the updated phase - fadd dword [edx + 8] - fld1 ; this is a bit stupid, but we need to take mod(x,1) again after phase modulations - fadd st1, st0 ; as the actual oscillator functions expect x in [0,1] - fxch - fprem - fstp st1 fld dword [edx + 12] ; // c p ; every oscillator test included if needed test al, byte 0x40 jz short su_op_oscillat_notsine call su_oscillat_sine su_op_oscillat_notsine: - test al, byte 0x20 - jz short su_op_oscillat_not_trisaw - call su_oscillat_trisaw -su_op_oscillat_not_trisaw: su_op_oscillat_shaping: ; finally, shape the oscillator and apply gain fld dword [edx + 16] @@ -678,20 +656,6 @@ su_op_oscillat_gain: fmul dword [edx + 20] ret -section .su_oscillat_trisaw code align=1 -su_oscillat_trisaw: - fucomi st1 ; // c p - jnc short su_oscillat_trisaw_up - fld1 ; // 1 c p - fsubr st2, st0 ; // 1 c 1-p - fsubrp st1, st0 ; // 1-c 1-p -su_oscillat_trisaw_up: - fdivp st1, st0 ; // tp'/tc - fadd st0 ; // 2*'' - fld1 ; // 1 2*'' - fsubp st1, st0 ; // 2*''-1 - ret - section .su_oscillat_sine code align=1 su_oscillat_sine: fucomi st1 ; // c p @@ -817,19 +781,7 @@ su_power: ret -;------------------------------------------------------------------------------- -; DISTORT opcode: apply distortion on the signal -;------------------------------------------------------------------------------- -; Mono: x -> x*a/(1-a+(2*a-1)*abs(x)) where x is clamped first -; Stereo: l r -> l*a/(1-a+(2*a-1)*abs(l)) r*a/(1-a+(2*a-1)*abs(r)) -; This is placed here to be able to flow into waveshaper & also include -; wave shaper if needed by some other function; need to investigate the -; best way to do this -;------------------------------------------------------------------------------- -section .su_op_distort code align=1 -su_op_distort: - fld dword [edx] - +section .su_waveshaper code align=1 su_waveshaper: fld st0 ; a a x @@ -845,23 +797,6 @@ 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 @@ -883,16 +818,15 @@ section .su_vm_jumptable data align=1 su_vm_jumptable: dd su_op_envelope dd su_op_oscillator - dd su_op_distort dd su_op_addp dd su_op_mulp dd su_op_xch - dd su_op_filter 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_in dd su_op_out @@ -903,16 +837,15 @@ section .su_vm_transformcounts data align=1 su_vm_transformcounts: db 5 db 6 - db 1 db 0 db 0 db 0 db 2 - db 2 db 1 db 4 db 1 db 2 + db 2 db 0 db 1 @@ -931,9 +864,9 @@ su_patterns: 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,1,1,1,26,26,26,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 db 23,0,0,0,23,23,23,23,0,0,23,0,0,23,0,0 - db 28,1,1,1,28,28,28,30,0,0,30,0,0,30,0,0 + 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 26,1,1,1,1,1,1,1,1,1,25,1,1,1,1,1 db 23,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 @@ -943,7 +876,7 @@ su_patterns: db 45,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,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 @@ -971,62 +904,66 @@ su_patterns: db 62,1,1,1,1,1,1,1,1,1,62,1,1,1,1,1 db 62,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 db 64,1,1,1,1,1,1,1,64,1,1,1,1,1,64,1 + 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 50,1,1,1,50,1,1,1,50,1,1,1,50,1,1,1 db 52,1,1,1,52,1,1,1,52,1,1,1,52,1,1,1 - db 56,0,0,0,56,56,56,56,0,0,56,0,0,56,0,0 - db 54,0,0,0,54,54,54,54,0,0,54,0,0,54,0,0 + db 52,1,1,1,52,1,1,1,0,0,0,0,0,0,0,0 + 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 62,1,1,1,62,1,1,1,62,1,1,1,62,1,1,1 db 64,1,1,1,64,1,1,1,64,1,1,1,64,1,1,1 + db 64,1,1,1,64,1,1,1,0,0,0,0,0,0,0,0 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 0,0,0,0,0,0,0,0,73,1,1,1,1,1,1,1 + 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,1,0,0,0,0,78,1,1,1,1,1,1,80 + db 1,1,1,0,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 db 83,1,1,1,1,1,0,0,81,1,1,1,1,1,1,83 - db 85,1,1,1,1,1,1,1,0,0,0,0,85,83,85,86 - db 85,1,1,1,1,1,1,1,0,0,0,0,81,83,85,86 + 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,83,81 - db 80,1,1,1,1,1,1,1,76,78,80,83,80,81,83,88 + db 80,1,1,1,1,1,1,1,0,0,0,0,76,1,1,1 db 86,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,1,0,0,86,1,1,1,85,1,1,1 + db 1,1,1,1,0,0,0,0,86,1,1,1,85,1,1,1 db 83,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,0,0,0,83,1,1,1,88,1,1,1 - db 1,1,1,1,1,1,1,0,86,1,1,1,88,1,1,1 + db 1,1,1,1,0,0,0,0,83,1,1,1,88,1,1,1 + db 1,1,1,1,1,1,0,0,86,1,1,1,88,1,1,1 db 88,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,1,0,0,76,1,1,1,1,1,1,1 + db 1,1,1,1,0,0,0,0,76,1,1,1,1,1,1,1 db 81,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0 - db 50,1,1,1,1,1,1,1,1,1,49,1,1,1,1,1 - db 47,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 - db 38,1,1,1,1,1,1,1,1,1,49,1,1,1,1,1 - db 1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0 - db 60,1,1,1,60,1,1,1,60,1,1,1,60,1,1,1 - db 60,1,1,1,62,62,62,62,1,1,62,1,1,62,1,1 + db 1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,0 db 62,1,1,1,62,62,62,62,1,1,62,1,1,62,1,1 + db 62,1,1,1,62,1,1,1,62,1,1,1,62,1,62,62 + db 62,1,1,1,62,1,1,1,62,1,1,1,62,1,62,1 + db 62,1,1,1,62,1,1,1,1,1,1,1,1,1,1,1 + db 60,1,1,1,60,1,1,1,60,1,1,1,60,1,1,1 + db 60,1,1,1,60,1,1,1,1,1,1,1,1,1,1,1 ;------------------------------------------------------------------------------- ; Tracks ;------------------------------------------------------------------------------- section .su_tracks data align=1 su_tracks: - db 16,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,11,12,13,14,15,1,13,14,15,1,0,1,1,1 - db 17,1,1,1,1,1,18,1,1,19,19,19,19,19,19,19,19,19,19,20,20,21,22,23,24,19,19,23,24,25,26,27,1,25,26,27,1,0,1,1,1 - db 0,28,1,1,1,1,28,1,1,20,20,20,20,20,20,20,20,20,20,24,24,19,19,24,29,20,20,24,29,30,31,32,1,30,31,32,1,0,1,1,1 - db 0,1,33,1,1,1,33,1,1,34,34,34,34,34,34,34,34,34,34,29,29,35,35,29,36,34,34,29,36,37,38,39,1,37,38,39,1,0,1,1,1 - db 0,1,1,40,41,31,42,43,1,44,44,44,44,44,44,44,44,44,44,36,36,45,45,36,1,44,44,36,1,46,47,48,1,46,47,48,1,0,1,1,1 - db 0,1,1,1,1,1,1,1,1,7,7,7,7,7,7,7,7,7,7,29,29,35,35,29,29,19,19,29,29,49,49,50,50,49,49,50,50,0,1,1,1 - db 0,1,1,1,1,1,1,1,1,19,19,19,19,19,19,19,19,19,19,51,51,52,52,51,51,45,45,51,51,53,53,54,54,53,53,54,54,0,1,1,1 - db 0,1,1,1,1,1,1,1,1,1,1,1,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,72,76,77,78,79,80,1,1 - db 0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,81,82,27,1,83,82,27,84,1,1,1,1 - db 0,1,1,1,1,1,1,1,1,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,85,1,1,1,1 - db 0,1,1,1,1,1,1,1,1,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,86,87,0,1,1,1 + db 16,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,13,14,15,1,13,14,15,1,0,1,1,1 + db 17,1,1,1,1,1,18,1,1,19,19,19,19,19,19,19,19,19,19,20,20,21,22,23,24,19,19,20,20,25,26,27,1,25,26,27,1,0,1,1,1 + db 0,28,1,1,1,1,28,1,1,20,20,20,20,20,20,20,20,20,20,24,24,19,19,24,29,20,20,24,24,30,31,32,1,30,31,32,1,0,1,1,1 + db 0,1,33,1,1,1,33,1,1,34,34,34,34,34,34,34,34,34,34,29,29,35,35,29,36,34,34,29,29,37,38,39,1,37,38,39,1,0,1,1,1 + db 0,1,1,40,41,31,42,43,1,44,44,44,44,44,44,44,44,44,44,36,36,45,45,36,1,44,44,36,36,46,47,48,1,46,47,48,1,0,1,1,1 + db 0,1,1,1,1,1,1,1,1,49,49,49,49,49,49,49,49,49,49,50,50,51,51,50,50,49,49,50,50,52,52,53,53,52,52,53,54,1,1,1,1 + db 0,1,1,1,1,1,1,1,1,55,55,55,55,55,55,55,55,55,55,56,56,57,57,56,56,55,55,56,56,58,58,59,59,58,58,59,60,1,1,1,1 + db 0,1,1,1,1,1,1,1,1,1,1,1,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,78,82,83,84,85,86,1,1 + db 0,1,1,1,1,1,1,1,1,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,87,88,89,88,89,88,89,88,90,1,1,1,1 + db 0,1,1,1,1,1,1,1,1,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,91,92,1,1,1,1 ;------------------------------------------------------------------------------- ; Sample offsets ;------------------------------------------------------------------------------- @@ -1044,15 +981,12 @@ su_sample_offsets: dd 1622065 dw 1916 dw 76 - dd 1252819 - dw 6513 - dw 905 - dd 741926 - dw 1034 - dw 1 dd 560606 dw 4276 dw 1 + dd 741926 + dw 1034 + dw 1 ;------------------------------------------------------------------------------- ; Delay times @@ -1067,14 +1001,14 @@ su_delay_times: ;------------------------------------------------------------------------------- section .su_patch_opcodes data align=1 su_patch_opcodes: - db 2,4,4,6,8,10,2,4,4,6,12,8,10,15,17,0,2,4,4,8,14,10,18,21,17,0,3,5,11,19,21,17,2,4,10,22,0,2,4,4,8,4,14,8,10,14,18,17,0,2,4,10,18,17,0,2,4,10,2,24,10,14,14,8,18,17,0,27,21,29,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,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 ;------------------------------------------------------------------------------- ; The parameters / inputs to each opcode ;------------------------------------------------------------------------------- section .su_patch_operands data align=1 su_patch_operands: - db 57,85,62,63,84,91,65,0,0,67,35,128,79,61,0,1,65,78,128,32,57,87,50,64,71,91,54,0,0,64,64,128,79,62,0,1,80,68,128,64,92,128,96,27,41,10,70,0,72,61,77,32,0,2,81,74,130,77,48,0,2,42,128,128,47,128,112,64,69,128,53,98,0,1,39,33,0,67,87,71,128,62,64,0,3,63,88,128,73,76,128,61,16,2,1,92,76,95,0,92,89,82,81,64,0,128,64,128,72,89,41,0,40,65,77,71,74,52,64,64,126,64,128,66,64,64,75,118,61,128,33,93,64,42,4,104,128,128,50,100,68,94,128,64,64,39,0,0,43,89,50,128,79,42,0,5,72,128,128,64,124,0,14,68,0,0,110,76,52,0,6,81,53,128,0,68,0,0,83,2,39,128,67,68,110,116,64,59,128,8,2,30,128,125,25,4,15,128 + 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 ;------------------------------------------------------------------------------- ; Constants diff --git a/4klang.yml b/4klang.yml index 9073491..c344813 100644 --- a/4klang.yml +++ b/4klang.yml @@ -3,38 +3,35 @@ 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, 10, 11, 12, 13, 14, -1, 12, 13, 14, -1, 15, -1, -1, -1] - 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, 1, 1, 1, 26, 26, 26, 28, 0, 1, 28, 0, 1, 28, 0, 1], [23, 0, 1, 1, 23, 23, 23, 23, 0, 1, 23, 0, 1, 23, 0, 1], [28, 1, 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], [26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1], [23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [28, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 32, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 12, 13, 14, -1, 12, 13, 14, -1, 15, -1, -1, -1, -1] + 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], [26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 25, 1, 1, 1, 1, 1], [23, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [28, 1, 1, 1, 1, 1, 1, 1, 30, 1, 1, 1, 1, 1, 32, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 6, 7, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -1] - 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, 40, 0, 1, 40, 0, 1, 40, 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], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 1, 1, 1], [35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1, 44, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -1, -1] + 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], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 1, 1, 1], [35, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1, 44, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 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, 3, 2, 4, 1, 1, 2, 4, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -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, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -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], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 57, 1, 1, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [59, 1, 1, 1, 1, 1, 1, 1, 59, 1, 1, 1, 1, 1, 59, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 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, 4, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -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, 5, 6, 7, -1, 5, 6, 7, -1, 8, -1, -1, -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], [54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 1, 1, 1, 1, 1], [54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [56, 1, 1, 1, 1, 1, 1, 1, 56, 1, 1, 1, 1, 1, 56, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 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, -1, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -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, 8, 9, 10, -1, 8, 9, 10, -1, 11, -1, -1, -1, -1] 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], [62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 62, 1, 1, 1, 1, 1], [62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [64, 1, 1, 1, 1, 1, 1, 1, 64, 1, 1, 1, 1, 1, 64, 1], [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 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, 3, 3, 1, 1, 4, 4, 5, 5, 4, 4, 5, 5, 6, -1, -1, -1] - patterns: [[33, 0, 1, 1, 33, 33, 33, 33, 0, 1, 33, 0, 1, 33, 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], [45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1], [52, 1, 1, 1, 52, 1, 1, 1, 52, 1, 1, 1, 52, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 3, 3, 4, 4, 3, 3, 4, 5, -1, -1, -1, -1, -1] + 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], [50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1, 50, 1, 1, 1], [52, 1, 1, 1, 52, 1, 1, 1, 52, 1, 1, 1, 52, 1, 1, 1], [52, 1, 1, 1, 52, 1, 1, 1, 0, 1, 1, 1, 1, 1, 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, 3, 3, 1, 1, 4, 4, 5, 5, 4, 4, 5, 5, 6, -1, -1, -1] - patterns: [[45, 0, 1, 1, 45, 45, 45, 45, 0, 1, 45, 0, 1, 45, 0, 1], [56, 0, 1, 1, 56, 56, 56, 56, 0, 1, 56, 0, 1, 56, 0, 1], [54, 0, 1, 1, 54, 54, 54, 54, 0, 1, 54, 0, 1, 54, 0, 1], [57, 0, 1, 1, 57, 57, 57, 57, 0, 1, 57, 0, 1, 57, 0, 1], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1], [64, 1, 1, 1, 64, 1, 1, 1, 64, 1, 1, 1, 64, 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, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 2, 2, 1, 1, 0, 0, 1, 1, 3, 3, 4, 4, 3, 3, 4, 5, -1, -1, -1, -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], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1], [64, 1, 1, 1, 64, 1, 1, 1, 64, 1, 1, 1, 64, 1, 1, 1], [64, 1, 1, 1, 64, 1, 1, 1, 0, 1, 1, 1, 1, 1, 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, 19, 20, 17, 21, 22, 23, 24, 25, -1, -1] - 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], [0, 1, 1, 1, 1, 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, 1, 83], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 85, 83, 85, 86], [85, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 81, 83, 85, 86], [83, 1, 1, 1, 1, 1, 1, 1, 81, 1, 1, 1, 1, 1, 83, 81], [80, 1, 1, 1, 1, 1, 1, 1, 76, 78, 80, 83, 80, 81, 83, 88], [86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 86, 1, 1, 1, 85, 1, 1, 1], [83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 0, 1, 1, 83, 1, 1, 1, 88, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 0, 86, 1, 1, 1, 88, 1, 1, 1], [88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 76, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1]] - - numvoices: 2 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, -1, 3, 1, 2, 4, -1, -1, -1, -1] - patterns: [[50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1], [47, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [40, 1, 1, 1, 1, 1, 1, 1, 42, 1, 1, 1, 1, 1, 44, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 49, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]] + 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, 19, 20, 17, 21, 22, 23, 24, 25, -1, -1, -1] + 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, 1, 83], [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, 83, 81], [80, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 76, 1, 1, 1], [86, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 86, 1, 1, 1, 85, 1, 1, 1], [83, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 83, 1, 1, 1, 88, 1, 1, 1], [1, 1, 1, 1, 1, 1, 0, 1, 86, 1, 1, 1, 88, 1, 1, 1], [88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 0, 1, 1, 1, 76, 1, 1, 1, 1, 1, 1, 1], [81, 1, 1, 1, 1, 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]] - 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, -1, -1, -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, 1, 2, 1, 2, 1, 2, 1, 3, -1, -1, -1, -1, -1] + patterns: [[62, 1, 1, 1, 62, 62, 62, 62, 1, 1, 62, 1, 1, 62, 1, 1], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 62, 62], [62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 1, 1, 62, 1, 62, 1], [62, 1, 1, 1, 62, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] - numvoices: 1 - order: [-1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 2, -1, -1, -1] - patterns: [[60, 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, 62, 1, 1, 62, 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, 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, -1, -1, -1, -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, 1, 1, 1, 1, 1, 1, 1, 1]] rowsperpattern: 16 length: 41 patch: @@ -43,16 +40,13 @@ patch: units: - type: envelope id: 33 - parameters: {attack: 57, channel: 2, decay: 85, gain: 84, release: 63, stereo: 0, sustain: 62} + 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: 35, looplength: 9710, loopstart: 251, notetracking: 0, phase: 0, pregain: 40, samplestart: 1448797, shape: 67, stereo: 0, transpose: 91, type: 4, unison: 0} + 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: 61, gain: 78, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 65, stereo: 0, transpose: 79, type: 4, unison: 0} - - type: distort - id: 47 - parameters: {damp: 0, drive: 32, dry: 128, feedback: 96, notetracking: 2, pregain: 40, stereo: 0} + 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: {panning: 64, stereo: 0} @@ -60,16 +54,13 @@ patch: parameters: {auxgain: 64, outgain: 64, stereo: 0} - type: envelope id: 46 - parameters: {attack: 57, decay: 87, gain: 71, panning: 64, release: 64, stereo: 0, sustain: 50} + parameters: {attack: 57, decay: 87, gain: 100, 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: 0} + 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: 68, looplength: 10741, loopstart: 284, phase: 0, samplestart: 1351767, shape: 80, stereo: 0, transpose: 79, type: 4, unison: 0} - - type: distort - id: 48 - parameters: {drive: 64, stereo: 0} + 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} @@ -79,134 +70,72 @@ patch: - type: mulp id: 35 parameters: {stereo: 0} - - type: filter - id: 45 - parameters: {bandpass: 1, frequency: 92, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 1} - type: outaux id: 23 - parameters: {auxgain: 41, outgain: 27, stereo: 1} + parameters: {auxgain: 19, outgain: 18, stereo: 1} - name: Pizzicato numvoices: 4 units: - type: envelope id: 1 - parameters: {attack: 10, channel: 2, decay: 70, gain: 61, release: 72, stereo: 0, sustain: 0} + parameters: {attack: 31, channel: 2, decay: 70, gain: 76, release: 66, stereo: 0, sustain: 0} - type: oscillator id: 2 - parameters: {color: 60, damp: 64, detune: 32, dry: 128, feedback: 125, gain: 74, looplength: 398, loopstart: 2073, notetracking: 0, phase: 0, pregain: 40, samplestart: 1034961, shape: 81, stereo: 0, transpose: 77, type: 4, unison: 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: 128, looplength: 398, loopstart: 2073, outgain: 64, phase: 0, samplestart: 1034961, shape: 42, stereo: 0, transpose: 77, type: 4, unison: 0} + 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: filter - id: 15 - parameters: {bandpass: 1, frequency: 47, highpass: 1, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} - type: mulp id: 14 parameters: {bandpass: 0, frequency: 82, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} - - parameters: {} - type: pan id: 5 - parameters: {auxgain: 39, outgain: 58, panning: 64, stereo: 0} + parameters: {auxgain: 39, outgain: 58, panning: 75, stereo: 0} - type: delay id: 49 - parameters: {damp: 98, dry: 128, feedback: 53, notetracking: 0, pregain: 69, stereo: 1} + parameters: {damp: 86, dry: 128, feedback: 59, notetracking: 0, pregain: 28, stereo: 1} varargs: [5230, 4533] - type: outaux id: 6 - parameters: {auxgain: 33, outgain: 39, stereo: 1} + parameters: {auxgain: 32, outgain: 20, stereo: 1} - name: Trumpet numvoices: 3 units: - type: envelope id: 51 - parameters: {attack: 0, decay: 67, gain: 128, release: 71, stereo: 1, sustain: 87} + parameters: {attack: 25, decay: 64, gain: 112, release: 64, stereo: 1, sustain: 88} - type: oscillator id: 1037 - parameters: {color: 61, detune: 64, gain: 88, looplength: 76, loopstart: 1916, phase: 0, samplestart: 1622065, shape: 63, stereo: 1, transpose: 62, type: 4, unison: 0} + 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: pan - id: 55 - parameters: {panning: 73, stereo: 1} - type: delay - parameters: {damp: 16, dry: 128, feedback: 61, notetracking: 2, pregain: 76, stereo: 1} + parameters: {damp: 18, dry: 128, feedback: 37, notetracking: 2, pregain: 84, stereo: 1} varargs: [48, 96] - type: outaux id: 56 - parameters: {auxgain: 76, outgain: 92, stereo: 1} + parameters: {auxgain: 53, outgain: 56, stereo: 1} - type: envelope id: 61 - parameters: {attack: 95, decay: 0, gain: 82, release: 89, stereo: 0, sustain: 92} + 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: 81, type: 0} + 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: 89, port: 1, sendpop: 1, stereo: 0, target: 1037, unit: 0, voice: 0} - - name: Bass - numvoices: 2 - units: - - type: envelope - id: 21 - parameters: {attack: 40, decay: 65, gain: 74, release: 71, stereo: 0, sustain: 77} - - type: oscillator - id: 400 - parameters: {color: 126, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 52, type: 0, unison: 2} - - type: oscillator - id: 6 - parameters: {color: 118, detune: 64, gain: 128, lfo: 0, phase: 75, shape: 61, stereo: 0, transpose: 64, type: 1, unison: 1} - - type: addp - parameters: {stereo: 0} - - type: oscillator - id: 1033 - parameters: {color: 62, detune: 64, gain: 128, looplength: 905, loopstart: 6513, phase: 42, samplestart: 1252819, shape: 104, stereo: 0, transpose: 93, type: 4, unison: 0} - - type: filter - id: 1035 - parameters: {bandpass: 0, frequency: 50, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 100, stereo: 0} - - type: addp - id: 1032 - parameters: {stereo: 0} - - type: mulp - id: 22 - parameters: {stereo: 0} - - type: filter - parameters: {bandpass: 0, frequency: 94, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 128, stereo: 0} - - type: pan - id: 18 - parameters: {panning: 64, stereo: 0} - - type: outaux - id: 19 - parameters: {auxgain: 0, outgain: 39, stereo: 1} - - name: kick - numvoices: 1 - units: - - type: envelope - id: 1039 - parameters: {attack: 0, decay: 43, gain: 128, 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: 124, stereo: 1} + 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: 14, decay: 68, gain: 110, release: 0, stereo: 0, sustain: 0} + 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} @@ -228,7 +157,25 @@ patch: - type: pan parameters: {panning: 59, stereo: 0} - type: outaux - parameters: {auxgain: 8, outgain: 128, stereo: 1} + 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: @@ -237,8 +184,8 @@ patch: parameters: {channel: 2, stereo: 1} - type: delay id: 8 - parameters: {damp: 25, dry: 128, feedback: 125, notetracking: 0, pregain: 30, stereo: 1} + 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: 128, stereo: 1} + parameters: {gain: 90, stereo: 1} diff --git a/music/4k_sg_v3.xrns b/music/4k_sg_v3.xrns index dc51f64..f5eb463 100644 Binary files a/music/4k_sg_v3.xrns and b/music/4k_sg_v3.xrns differ