1 Commits

Author SHA1 Message Date
3317747bdd The Gate shaderi 2025-07-22 19:04:33 +03:00
6 changed files with 733 additions and 991 deletions

Binary file not shown.

224
song.yml
View File

@ -2,112 +2,103 @@ bpm: 138
rowsperbeat: 4 rowsperbeat: 4
score: score:
tracks: tracks:
- numvoices: 1 - numvoices: 2
order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, 2, -1, 3, 5, 2, 6, 0, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 0, -1, 1, -1, -1] order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, 2, -1, 3, 5, 2, 6, 0, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 0, -1, 1, -1]
patterns: [[33, 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], [29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 1, 1]] patterns: [[33, 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], [29, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [26, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [31, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 28, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 31, 1, 1, 1, 1, 1, 1, 1]]
- numvoices: 1 - numvoices: 2
order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 5, -1, 5, -1, 6, 7, 5, 8, 9, -1, -1, -1, 9, -1, 1, -1, 9, -1, 1, -1, 0, -1, 1, -1, -1] order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 4, -1, 2, -1, 0, -1, -1, -1, 0, -1, -1, -1, 5, -1, 5, -1, 6, 7, 5, 8, 9, -1, -1, -1, 9, -1, 1, -1, 9, -1, 1, -1, 0, -1, 1, -1]
patterns: [[45, 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], [41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [43, 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, 1, 1], [50, 1, 1, 1, 1, 1, 1, 1, 1, 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, 55, 1, 1, 1, 1, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]] patterns: [[45, 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], [41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [43, 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, 1, 1], [50, 1, 1, 1, 1, 1, 1, 1, 1, 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, 55, 1, 1, 1, 1, 1, 1, 1], [57, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]]
- numvoices: 1 - numvoices: 1
order: [-1, -1, -1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 4, -1, 1, -1, 3, -1, 1, -1, 5, -1, 1, -1, 6, 7, 6, 7, 6, 7, 6, 8, 6, 7, 6, 7, 6, 7, 6, 7, 9, 10, 9, 10, 9, 10, 9, 10, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 5, -1, 3, -1, 6, 7, 6, 7, 11, 12, 9, 10, 6, 7, 6, 13, 6, 7, 6, 7, 9, 10, 9, 14, 15, 16, 9, 17, 6, 6, 6, 6, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, -1] order: [-1, -1, -1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 4, -1, 1, -1, 3, -1, 1, -1, 5, -1, 1, -1, 6, 7, 6, 7, 6, 7, 6, 8, 6, 7, 6, 7, 6, 7, 6, 7, 9, 10, 9, 10, 9, 10, 9, 10, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 6, 7, 5, -1, 3, -1, 6, 7, 6, 7, 11, 12, 9, 10, 6, 7, 6, 13, 6, 7, 6, 7, 9, 10, 9, 14, 15, 16, 9, 17, 6, 6, 6, 6, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1]
patterns: [[57, 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], [45, 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, 1, 1], [50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 67, 0, 69, 0], [57, 0, 57, 0, 57, 0, 57, 0, 64, 1, 62, 1, 60, 1, 55, 1], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 63, 0, 65, 0], [55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0], [55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 65, 0, 67, 0], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 69, 0, 57, 0], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 65, 0], [50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0], [50, 0, 50, 0, 50, 0, 50, 0, 52, 0, 52, 0, 52, 0, 52, 0], [53, 0, 53, 0, 53, 0, 53, 0, 55, 0, 55, 0, 55, 0, 55, 0]] patterns: [[57, 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], [45, 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, 1, 1], [50, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 67, 0, 69, 0], [57, 0, 57, 0, 57, 0, 57, 0, 64, 1, 62, 1, 60, 1, 55, 1], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 63, 0, 65, 0], [55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0], [55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 55, 0, 65, 0, 67, 0], [57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 57, 0, 69, 0, 57, 0], [53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 53, 0, 65, 0], [50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0, 50, 0], [50, 0, 50, 0, 50, 0, 50, 0, 52, 0, 52, 0, 52, 0, 52, 0], [53, 0, 53, 0, 53, 0, 53, 0, 55, 0, 55, 0, 55, 0, 55, 0]]
- numvoices: 1 - numvoices: 1
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, 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, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -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, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 0, 0, 0, 0, 0, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
patterns: [[60, 1, 1, 1, 1, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1], [60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 1, 1, 1, 60, 1], [60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1]] patterns: [[60, 1, 1, 1, 1, 1, 1, 1, 60, 1, 1, 1, 1, 1, 1, 1], [60, 1, 1, 1, 1, 1, 1, 1, 1, 1, 60, 1, 1, 1, 60, 1], [60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1, 60, 1, 1, 1]]
- numvoices: 1 - numvoices: 1
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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -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, -1, -1, -1, -1, -1, -1, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1, 72, 1, 1, 1], [1, 1, 1, 1, 72, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1]] patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1, 72, 1, 1, 1], [1, 1, 1, 1, 72, 1, 1, 1, 1, 1, 1, 1, 72, 1, 1, 1]]
- numvoices: 1 - numvoices: 1
order: [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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 4, -1, -1] order: [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, 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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 0, 1, 1, 2, 2, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3, -1, 4, -1]
patterns: [[88, 0, 83, 0, 84, 0, 81, 0, 88, 0, 83, 0, 84, 0, 81, 0], [91, 0, 83, 0, 84, 0, 81, 0, 91, 0, 83, 0, 84, 0, 81, 0], [89, 0, 83, 0, 84, 0, 81, 0, 89, 0, 83, 0, 84, 0, 81, 0], [45, 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]] patterns: [[88, 0, 83, 0, 84, 0, 81, 0, 88, 0, 83, 0, 84, 0, 81, 0], [91, 0, 83, 0, 84, 0, 81, 0, 91, 0, 83, 0, 84, 0, 81, 0], [89, 0, 83, 0, 84, 0, 81, 0, 89, 0, 83, 0, 84, 0, 81, 0], [45, 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 - numvoices: 1
order: [-1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, 2, -1, 1, -1, 3, -1, 1, -1, 2, -1, 1, -1, 4, -1, 1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 0, -1, 1, -1, 0, -1, -1, -1, 2, -1, -1, -1, 2, -1, -1, -1, 0, -1, -1, -1, 0, -1, -1, -1, 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, -1, -1, -1, -1, -1, -1, -1, 0, -1, 1, -1, 0, -1, 1, -1, -1, -1, -1, -1, -1] 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, -1, -1, -1, -1, -1, -1, -1, 0, 1, -1, 2, 3, 4, 5, -1, 0, 6, -1, -1, 0, 6, -1, 7, 0, -1, -1, -1, 8, -1, -1, 9, -1, -1, -1, -1, 10, 7, 11, 12, 0, -1, -1, 13, 10, 7, 11, 7, 8, -1, 14, -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]
patterns: [[45, 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], [41, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [38, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [43, 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, -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, -1, 2, 3, 4, 5, -1, 0, 6, -1, -1, 0, 6, -1, 7, 0, -1, -1, -1, 8, -1, -1, 9, -1, -1, -1, -1, 10, 7, 11, 12, 0, -1, -1, 13, 10, 7, 11, 7, 8, -1, 14, -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, -1]
patterns: [[83, 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, 84, 1, 81, 1], [1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 74, 1, 76, 1, 1, 1], [71, 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, 72, 1, 1, 1], [69, 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, 84, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 86, 1, 1, 1, 1, 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], [88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 83, 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, 1, 1, 1, 1, 1, 0, 1, 1, 1]] patterns: [[83, 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, 84, 1, 81, 1], [1, 1, 1, 1, 1, 1, 1, 1, 72, 1, 74, 1, 76, 1, 1, 1], [71, 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, 72, 1, 1, 1], [69, 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, 84, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 86, 1, 1, 1, 1, 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], [88, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 83, 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, 1, 1, 1, 1, 1, 0, 1, 1, 1]]
- numvoices: 4 - numvoices: 4
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, -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, 13, -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, -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, -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, -1, -1, -1, -1, -1, -1, -1, -1, 0, 1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, -1, 13, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1]
patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 81, 83, 84, 86], [88, 83, 84, 81, 88, 83, 84, 81, 88, 83, 84, 81, 88, 83, 84, 81], [91, 83, 84, 81, 91, 83, 84, 81, 91, 83, 84, 81, 91, 83, 84, 81], [93, 83, 84, 81, 93, 83, 84, 81, 93, 83, 84, 81, 93, 83, 84, 81], [89, 81, 83, 84, 86, 88, 89, 91, 89, 81, 83, 84, 83, 84, 86, 88], [89, 79, 81, 83, 81, 83, 84, 86, 84, 86, 88, 89, 88, 84, 86, 83], [91, 88, 89, 86, 88, 84, 86, 83, 84, 81, 83, 79, 81, 77, 79, 76], [77, 74, 76, 72, 74, 71, 72, 69, 71, 67, 69, 65, 67, 69, 71, 74], [77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 77, 76], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 71, 72, 76], [84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 79, 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]] patterns: [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 81, 83, 84, 86], [88, 83, 84, 81, 88, 83, 84, 81, 88, 83, 84, 81, 88, 83, 84, 81], [91, 83, 84, 81, 91, 83, 84, 81, 91, 83, 84, 81, 91, 83, 84, 81], [93, 83, 84, 81, 93, 83, 84, 81, 93, 83, 84, 81, 93, 83, 84, 81], [89, 81, 83, 84, 86, 88, 89, 91, 89, 81, 83, 84, 83, 84, 86, 88], [89, 79, 81, 83, 81, 83, 84, 86, 84, 86, 88, 89, 88, 84, 86, 83], [91, 88, 89, 86, 88, 84, 86, 83, 84, 81, 83, 79, 81, 77, 79, 76], [77, 74, 76, 72, 74, 71, 72, 69, 71, 67, 69, 65, 67, 69, 71, 74], [77, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 76, 1, 77, 76], [74, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 69, 71, 72, 76], [84, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 83, 1, 1, 1], [81, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 79, 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]]
rowsperpattern: 16 rowsperpattern: 16
length: 108 length: 108
patch: patch:
- name: 80slead.instr - name: 80s lead
numvoices: 2 numvoices: 4
units: units:
- type: oscillator - type: oscillator
id: 1089 id: 1089
parameters: {color: 0, detune: 80, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 76, type: 1, unison: 3} parameters: {color: 128, detune: 80, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 1, transpose: 76, type: 1, unison: 3}
- type: oscillator - type: oscillator
id: 1090 id: 1090
parameters: {color: 64, detune: 64, gain: 128, lfo: 0, phase: 1, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0} parameters: {color: 128, detune: 57, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 1, transpose: 64, type: 1, unison: 2}
- type: addp - type: addp
id: 1091 id: 1091
parameters: {stereo: 0} parameters: {stereo: 1}
- type: envelope - type: envelope
id: 1092 id: 1092
parameters: {attack: 37, decay: 66, gain: 90, release: 54, stereo: 0, sustain: 81} parameters: {attack: 37, decay: 66, gain: 90, release: 54, stereo: 1, sustain: 81}
- type: mulp - type: mulp
id: 1098 id: 1098
parameters: {stereo: 0} parameters: {stereo: 1}
- type: sync
id: 1172
parameters: {}
- type: pan - type: pan
id: 1096 id: 1096
parameters: {panning: 63, stereo: 0} parameters: {panning: 60, stereo: 1}
- type: filter - type: filter
id: 1108 id: 1108
parameters: {bandpass: 1, frequency: 94, highpass: 0, lowpass: 1, resonance: 99, stereo: 1} parameters: {bandpass: 0, frequency: 84, highpass: 0, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 128, stereo: 1}
- type: gain - type: gain
id: 1119 id: 1119
parameters: {gain: 64, stereo: 1} parameters: {gain: 64, stereo: 1}
- type: filter - type: filter
id: 1146 id: 1133
parameters: {bandpass: 0, frequency: 13, highpass: 1, lowpass: 1, resonance: 109, stereo: 1} parameters: {bandpass: 0, frequency: 10, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 88, stereo: 1}
- type: outaux - type: outaux
id: 1097 id: 1097
parameters: {auxgain: 20, outgain: 40, stereo: 1} parameters: {auxgain: 34, outgain: 34, stereo: 1}
- name: 80sbass.instr - name: 80s bass
numvoices: 1 numvoices: 1
units: units:
- type: oscillator - type: oscillator
id: 3 id: 3
parameters: {color: 0, detune: 64, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 1, transpose: 64, type: 1, unison: 0} parameters: {color: 128, detune: 64, gain: 128, lfo: 0, phase: 64, shape: 64, stereo: 1, transpose: 64, type: 1, unison: 0}
- type: oscillator - type: oscillator
id: 4 id: 4
parameters: {color: 0, detune: 74, gain: 128, lfo: 0, phase: 0, shape: 64, stereo: 1, transpose: 52, type: 1, unison: 2} parameters: {color: 128, detune: 76, gain: 128, lfo: 0, phase: 30, shape: 64, stereo: 1, transpose: 52, type: 1, unison: 1}
- type: addp - type: addp
id: 1084 id: 1084
parameters: {stereo: 1} parameters: {stereo: 1}
- type: envelope - type: envelope
id: 1085 id: 1085
parameters: {attack: 0, decay: 70, gain: 100, release: 68, stereo: 1, sustain: 28} parameters: {attack: 0, decay: 69, gain: 100, release: 68, stereo: 1, sustain: 50}
- type: send - type: send
id: 1088 id: 1088
parameters: {amount: 80, port: 0, sendpop: 0, stereo: 1, target: 1087, voice: 0} parameters: {amount: 100, port: 0, sendpop: 0, stereo: 1, target: 1087, voice: 0}
- type: mulp - type: mulp
id: 1086 id: 1086
parameters: {stereo: 1} parameters: {stereo: 1}
- type: filter
id: 1087
parameters: {bandpass: 0, frequency: 45, highpass: 1, lowpass: 1, resonance: 46, stereo: 1}
- type: distort - type: distort
id: 1107 id: 1107
parameters: {drive: 100, stereo: 1} parameters: {drive: 112, stereo: 1}
- type: filter
id: 1087
parameters: {bandpass: 0, frequency: 30, highpass: 1, lowpass: 1, negbandpass: 1, neghighpass: 0, resonance: 40, stereo: 1}
- type: pan - type: pan
id: 284 id: 284
parameters: {panning: 64, stereo: 1} parameters: {panning: 64, stereo: 1}
- type: gain - type: gain
id: 1121 id: 1121
parameters: {gain: 107, stereo: 1} parameters: {gain: 110, stereo: 1}
- type: sync
id: 1173
parameters: {}
- type: outaux - type: outaux
id: 15 id: 15
parameters: {auxgain: 21, outgain: 42, stereo: 1} parameters: {auxgain: 30, outgain: 30, stereo: 1}
- name: kick.instr - name: Kick
comment: 'Suggested note: C-3' comment: 'Suggested note: C-3'
numvoices: 1 numvoices: 1
units: units:
@ -122,10 +113,10 @@ patch:
parameters: {amount: 96, port: 0, sendpop: 1, stereo: 0, target: 262, voice: 0} parameters: {amount: 96, port: 0, sendpop: 1, stereo: 0, target: 262, voice: 0}
- type: oscillator - type: oscillator
id: 262 id: 262
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 0, unison: 0} parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 57, type: 0, unison: 0}
- type: filter - type: filter
id: 281 id: 281
parameters: {bandpass: -1, frequency: 91, highpass: -1, lowpass: 0, resonance: 98, stereo: 0} parameters: {bandpass: 0, frequency: 91, highpass: 0, lowpass: 0, negbandpass: 1, neghighpass: 1, resonance: 98, stereo: 0}
- type: mulp - type: mulp
id: 263 id: 263
parameters: {stereo: 0} parameters: {stereo: 0}
@ -143,16 +134,16 @@ patch:
parameters: {amount: 84, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0} parameters: {amount: 84, port: 0, sendpop: 1, stereo: 0, target: 277, voice: 0}
- type: envelope - type: envelope
id: 274 id: 274
parameters: {attack: 34, decay: 70, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 45, decay: 70, gain: 128, release: 0, stereo: 0, sustain: 0}
- type: send - type: send
id: 1118 id: 1118
parameters: {amount: 0, port: 0, sendpop: 0, stereo: 0, target: 1119, voice: 0} parameters: {amount: 0, port: 0, sendpop: 0, stereo: 0, target: 1119, voice: 0}
- type: send - type: send
id: 1147 id: 1122
parameters: {amount: 0, port: 0, sendpop: 0, stereo: 0, target: 1121, voice: 0} parameters: {amount: 0, port: 0, sendpop: 0, stereo: 0, target: 1121, voice: 0}
- type: send - type: send
id: 1148 id: 1124
parameters: {amount: 51, port: 0, sendpop: 0, stereo: 0, target: 1159, voice: 0} parameters: {amount: 32, port: 0, sendpop: 0, stereo: 0, target: 1123, voice: 0}
- type: oscillator - type: oscillator
id: 277 id: 277
parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0} parameters: {color: 128, detune: 64, gain: 128, phase: 0, shape: 64, stereo: 0, transpose: 45, type: 0}
@ -166,15 +157,21 @@ patch:
id: 294 id: 294
parameters: {panning: 64, stereo: 0} parameters: {panning: 64, stereo: 0}
- type: filter - type: filter
id: 1149 id: 1132
parameters: {bandpass: 0, frequency: 11, highpass: -1, lowpass: 1, resonance: 128, stereo: 1} parameters: {bandpass: 0, frequency: 11, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 1}
- type: sync
id: 1180
parameters: {}
- type: outaux - type: outaux
id: 266 id: 266
parameters: {auxgain: 20, outgain: 59, stereo: 1} parameters: {auxgain: 14, outgain: 50, stereo: 1}
- name: snare.instr - type: oscillator
id: 1134
parameters: {color: 64, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 64, stereo: 0, transpose: 52, type: 0}
- type: sync
id: 1135
parameters: {}
- type: pop
id: 1136
parameters: {stereo: 0}
- name: snare edm 3
comment: 'Suggested range: E-4' comment: 'Suggested range: E-4'
numvoices: 1 numvoices: 1
units: units:
@ -198,10 +195,10 @@ patch:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 201 id: 201
parameters: {bandpass: 0, frequency: 78, highpass: -1, lowpass: 1, resonance: 127, stereo: 0} parameters: {bandpass: 0, frequency: 78, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 127, stereo: 0}
- type: filter - type: filter
id: 225 id: 225
parameters: {bandpass: 0, frequency: 122, highpass: 0, lowpass: 1, resonance: 112, stereo: 0} parameters: {bandpass: 0, frequency: 122, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 112, stereo: 0}
- type: addp - type: addp
id: 226 id: 226
parameters: {stereo: 0} parameters: {stereo: 0}
@ -213,7 +210,7 @@ patch:
parameters: {panning: 63, stereo: 0} parameters: {panning: 63, stereo: 0}
- type: outaux - type: outaux
id: 232 id: 232
parameters: {auxgain: 49, outgain: 62, stereo: 1} parameters: {auxgain: 52, outgain: 58, stereo: 1}
- type: envelope - type: envelope
id: 233 id: 233
parameters: {attack: 37, decay: 47, gain: 128, release: 0, stereo: 0, sustain: 0} parameters: {attack: 37, decay: 47, gain: 128, release: 0, stereo: 0, sustain: 0}
@ -232,19 +229,19 @@ patch:
- type: send - type: send
id: 238 id: 238
parameters: {amount: 32, port: 0, sendpop: 1, target: 202} parameters: {amount: 32, port: 0, sendpop: 1, target: 202}
- name: SuperSaw 4.instr - name: SuperSaw 4
comment: Automate filter frequency for the classic trance sound comment: Automate filter frequency for the classic trance sound
numvoices: 2 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 1109 id: 1109
parameters: {attack: 0, decay: 0, gain: 64, release: 64, stereo: 0, sustain: 85} parameters: {attack: 0, decay: 0, gain: 64, release: 64, stereo: 0, sustain: 85}
- type: oscillator - type: oscillator
id: 1099 id: 1099
parameters: {color: 0, detune: 96, gain: 64, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 96, gain: 64, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: oscillator - type: oscillator
id: 12 id: 12
parameters: {color: 0, detune: 80, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 77, gain: 80, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: addp - type: addp
id: 13 id: 13
parameters: {stereo: 0} parameters: {stereo: 0}
@ -253,62 +250,66 @@ patch:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: envelope - type: envelope
id: 17 id: 17
parameters: {attack: 0, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99} parameters: {attack: 18, decay: 67, gain: 64, release: 64, stereo: 0, sustain: 99}
- type: oscillator - type: oscillator
id: 1156 id: 18
parameters: {color: 0, detune: 44, gain: 64, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 46, gain: 81, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: oscillator - type: oscillator
id: 1157 id: 19
parameters: {color: 0, detune: 35, gain: 64, lfo: 0, phase: 0, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3} parameters: {color: 128, detune: 38, gain: 76, lfo: 0, phase: 64, shape: 64, stereo: 0, transpose: 64, type: 1, unison: 3}
- type: addp - type: addp
id: 1158 id: 20
parameters: {stereo: 0} parameters: {stereo: 0}
- type: mulp - type: mulp
id: 23 id: 23
parameters: {stereo: 0} parameters: {stereo: 0}
- type: gain - type: gain
id: 1159 id: 1123
parameters: {gain: 120, stereo: 1} parameters: {gain: 120, stereo: 1}
- type: delay
id: 24
parameters: {damp: 0, dry: 0, feedback: 0, notetracking: 0, pregain: 128, stereo: 0}
varargs: [420]
- type: delay - type: delay
id: 29 id: 29
parameters: {damp: 23, dry: 106, feedback: 32, notetracking: 2, pregain: 69, stereo: 1} parameters: {damp: 0, dry: 71, feedback: 32, notetracking: 2, pregain: 71, stereo: 1}
varargs: [24, 36] varargs: [32, 36]
- type: outaux
id: 1160
parameters: {auxgain: 25, outgain: 25, stereo: 1}
- type: loadnote - type: loadnote
id: 1174 id: 1140
parameters: {stereo: 0} parameters: {stereo: 0}
- type: sync - type: sync
id: 1175 id: 1138
parameters: {} parameters: {}
- type: pop - type: pop
id: 1176 id: 1139
parameters: {stereo: 0} parameters: {stereo: 0}
- name: pad.instr - type: outaux
id: 30
parameters: {auxgain: 23, outgain: 25, stereo: 1}
- name: pad
numvoices: 1 numvoices: 1
units: units:
- type: envelope - type: envelope
id: 1161 id: 1
parameters: {attack: 72, decay: 96, gain: 128, release: 88, stereo: 0, sustain: 96} parameters: {attack: 72, decay: 96, gain: 128, release: 88, stereo: 0, sustain: 96}
- type: send - type: send
id: 2 id: 2
parameters: {amount: 64, port: 4, sendpop: 0, target: 1161} parameters: {amount: 64, port: 4, sendpop: 0, target: 1}
- type: oscillator - type: oscillator
id: 1162 id: 1125
parameters: {color: 80, detune: 60, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 2} parameters: {color: 80, detune: 60, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 2}
- type: oscillator - type: oscillator
id: 1163 id: 1126
parameters: {color: 96, detune: 72, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1} parameters: {color: 96, detune: 72, gain: 128, lfo: 0, phase: 32, shape: 64, stereo: 0, transpose: 64, type: 1}
- type: oscillator - type: oscillator
id: 5 id: 5
parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 90, stereo: 0, transpose: 32, type: 0} parameters: {color: 128, detune: 64, gain: 128, lfo: 1, phase: 0, shape: 90, stereo: 0, transpose: 32, type: 0}
- type: send - type: send
id: 1164 id: 6
parameters: {amount: 68, port: 1, sendpop: 0, target: 1162} parameters: {amount: 68, port: 1, sendpop: 0, target: 1125}
- type: send - type: send
id: 78 id: 78
parameters: {amount: 61, port: 1, sendpop: 1, target: 1163} parameters: {amount: 61, port: 1, sendpop: 1, target: 1126}
- type: addp - type: addp
id: 80 id: 80
parameters: {stereo: 0} parameters: {stereo: 0}
@ -317,10 +318,10 @@ patch:
parameters: {stereo: 0} parameters: {stereo: 0}
- type: filter - type: filter
id: 11 id: 11
parameters: {bandpass: 0, frequency: 26, highpass: -1, lowpass: 1, resonance: 128, stereo: 0} parameters: {bandpass: 0, frequency: 26, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 1, resonance: 128, stereo: 0}
- type: filter - type: filter
id: 1165 id: 1127
parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, resonance: 64, stereo: 0} parameters: {bandpass: 0, frequency: 64, highpass: 0, lowpass: 1, negbandpass: 0, neghighpass: 0, resonance: 64, stereo: 0}
- type: distort - type: distort
id: 1128 id: 1128
parameters: {drive: 109, stereo: 0} parameters: {drive: 109, stereo: 0}
@ -331,13 +332,10 @@ patch:
id: 1130 id: 1130
parameters: {damp: 64, dry: 128, feedback: 96, notetracking: 2, pregain: 96, stereo: 1} parameters: {damp: 64, dry: 128, feedback: 96, notetracking: 2, pregain: 96, stereo: 1}
varargs: [24, 48] varargs: [24, 48]
- type: sync
id: 1181
parameters: {}
- type: outaux - type: outaux
id: 1131 id: 1131
parameters: {auxgain: 15, outgain: 15, stereo: 1} parameters: {auxgain: 15, outgain: 15, stereo: 1}
- name: HappyLead.instr - name: HappyLead
numvoices: 4 numvoices: 4
units: units:
- type: oscillator - type: oscillator
@ -364,51 +362,17 @@ patch:
varargs: [12550, 24402, 21265, 32419] varargs: [12550, 24402, 21265, 32419]
- type: outaux - type: outaux
id: 172 id: 172
parameters: {auxgain: 38, outgain: 64, stereo: 1} parameters: {auxgain: 64, outgain: 64, stereo: 1}
- type: loadnote
id: 1177
parameters: {stereo: 0}
- type: sync
id: 1178
parameters: {}
- type: pop
id: 1179
parameters: {stereo: 0}
- name: Global - name: Global
numvoices: 1 numvoices: 1
units: units:
- type: in - type: in
id: 7 id: 7
parameters: {channel: 2, stereo: 1} parameters: {channel: 2, stereo: 1}
comment: Aux 1 (reverb)
- type: delay - type: delay
id: 8 id: 8
parameters: {damp: 28, dry: 0, feedback: 120, notetracking: 0, pregain: 35, stereo: 1} parameters: {damp: 25, dry: 0, feedback: 120, notetracking: 0, pregain: 40, stereo: 1}
varargs: [1116, 1188, 1276, 1356, 1422, 1492, 1556, 1618, 1140, 1212, 1300, 1380, 1446, 1516, 1580, 1642] varargs: [1116, 1188, 1276, 1356, 1422, 1492, 1556, 1618, 1140, 1212, 1300, 1380, 1446, 1516, 1580, 1642]
- type: out
id: 1169
parameters: {gain: 92, stereo: 1}
comment: Reverb amount to master
- type: in
id: 1170
parameters: {channel: 0, stereo: 1}
comment: Input (Master)
- type: filter
id: 1171
parameters: {bandpass: 0, frequency: 128, highpass: 0, lowpass: 1, resonance: 128, stereo: 1}
comment: Limit highs
- type: filter
id: 1166
parameters: {bandpass: 0, frequency: 8, highpass: 1, lowpass: 0, resonance: 128, stereo: 1}
comment: Low cut
- type: compressor
id: 1167
parameters: {attack: 0, invgain: 52, ratio: 128, release: 46, stereo: 1, threshold: 52}
comment: Clipper (change threshold and invgain to match loudness)
- type: mulp
id: 1168
parameters: {stereo: 1}
- type: out - type: out
id: 9 id: 9
parameters: {gain: 120, stereo: 1} parameters: {gain: 64, stereo: 1}
comment: Master Out

View File

@ -37,31 +37,6 @@ static int pidMain;
static int pidPost; static int pidPost;
// static HDC hDC; // static HDC hDC;
#define GRID 32
#define HEX_TEX_SIZE (GRID * GRID * 4) // RGBA: 4 floats per texel
#define SHAPES 16
#define SHAPES_TEX_SIZE (SHAPES * SHAPES * 4)
#define MAX_DISTANCE 100.f
#define PARTICLES 16
#define PARTICLES_TEX_SIZE (PARTICLES * PARTICLES * 4)
#define PARTICLES_DISTANCE 80.f
static float syncs[1 + SU_NUMSYNCS];
// FFT buffers
static float fft_input[FFT_SIZE];
static float fft_output[FFT_SIZE / 2]; // Magnitudes
static float fft_uniform[FFT_SIZE / 4];
static float particlesData[PARTICLES_TEX_SIZE];
static float particlesData2[PARTICLES * PARTICLES]; // additional value for particle distance
static float shapesData[SHAPES_TEX_SIZE];
static float hexGridData[HEX_TEX_SIZE];
#ifndef EDITOR_CONTROLS #ifndef EDITOR_CONTROLS
#pragma code_seg(".main") #pragma code_seg(".main")
void entrypoint(void) void entrypoint(void)
@ -143,69 +118,14 @@ int __cdecl main(int argc, char* argv[])
// Play sound // Play sound
direct_sound_buffer->Play(0, 0, 0); direct_sound_buffer->Play(0, 0, 0);
static float syncs[1 + SU_NUMSYNCS];
// Init FFT // Init FFT
init_hamming_window(); init_hamming_window();
// FFT buffers
static float fft_input[FFT_SIZE];
static float fft_output[FFT_SIZE / 2]; // Magnitudes
static float fft_uniform[FFT_SIZE / 4];
struct Vec3 {
float x, y, z;
};
PFNGLUNIFORM1FVPROC glUniform1fvProc = ((PFNGLUNIFORM1FVPROC)wglGetProcAddress("glUniform1fv"));
PFNGLACTIVETEXTUREPROC glActiveTexture = ((PFNGLACTIVETEXTUREPROC)wglGetProcAddress("glActiveTexture"));
PFNGLUNIFORM1IPROC glUniform1i = ((PFNGLUNIFORM1IPROC)wglGetProcAddress("glUniform1i"));
PFNGLGETUNIFORMLOCATIONPROC glGetUniformLocation = ((PFNGLGETUNIFORMLOCATIONPROC)wglGetProcAddress("glGetUniformLocation"));
GLuint hexGridTex, shapesTex, particlesTex;
glGenTextures(1, &hexGridTex);
glBindTexture(GL_TEXTURE_2D, hexGridTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA32F, GRID, GRID, 0, GL_RGBA, GL_FLOAT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
/*
glGenTextures(1, &shapesTex);
glBindTexture(GL_TEXTURE_2D, shapesTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, SHAPES, SHAPES, 0, GL_RGBA, GL_FLOAT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
*/
glGenTextures(1, &particlesTex);
glBindTexture(GL_TEXTURE_2D, particlesTex);
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA16F, SHAPES, SHAPES, 0, GL_RGBA, GL_FLOAT, nullptr);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
int currentShape = 0; // mark location which shape we are currently building
float shapeIncrement = 0.15f;
float shapeLastNote = 0.0f;
int currentParticle = 0; // mark location which shape we are currently building
float particleIncrement = 3.0f;
float particleLastNote = 0.0f;
do do
{ {
@ -282,183 +202,15 @@ int __cdecl main(int argc, char* argv[])
syncs[i + 1] = syncBuf[(playCursor / (2 * sizeof(SUsample)) >> 8) * SU_NUMSYNCS + i]; syncs[i + 1] = syncBuf[(playCursor / (2 * sizeof(SUsample)) >> 8) * SU_NUMSYNCS + i];
} }
PFNGLUNIFORM1FVPROC glUniform1fvProc = ((PFNGLUNIFORM1FVPROC)wglGetProcAddress("glUniform1fv"));
/*
//////////////////////////////////////////////////////
// Shape builder
//////////////////////////////////////////////////////
// if sound is playing, start a shape, if shape is already started - add length
// if sound has stopped, end shape
// if shape is finished, move shape forward
float shapeCaptureSync = syncs[5];
// Detect note change to start a new shape
bool shapeNoteChanged = (shapeCaptureSync - shapeLastNote) * (shapeCaptureSync - shapeLastNote) > 0.0001f;
shapeLastNote = shapeCaptureSync;
// If note changed and value is significant, start new shape
if (shapeCaptureSync > 0.001f && shapeNoteChanged) {
int index = currentShape * 4;
// Reset and activate current shape
shapesData[index + 0] = 0.0f; // x start
shapesData[index + 1] = shapeCaptureSync; // y from audio
shapesData[index + 2] = 1.0f; // z (unused or length)
shapesData[index + 3] = 1.0f; // active
// Advance to next shape slot (circular)
currentShape = (currentShape + 1) % (SHAPES*SHAPES);
}
// Move active shapes
for (int i = 0; i < SHAPES*SHAPES; ++i) {
int index = i * 4;
// Check if shape is active
if (shapesData[index + 3] > 0.5f) {
// Move shape right
shapesData[index + 0] += shapeIncrement;
// Update y (optional, reflect live audio)
//shapesData[index + 1] = captureSync;
// Optional: grow z value to show duration
//shapesData[index + 2] += shapeIncrement * 0.2f;
// If x exceeds max distance, deactivate and reset
if (shapesData[index + 0] > MAX_DISTANCE) {
shapesData[index + 0] = 0.0f;
shapesData[index + 1] = 0.0f;
shapesData[index + 2] = 0.0f;
shapesData[index + 3] = 0.0f; // inactive
}
}
}
// Bind and update u_ShapesTex
glActiveTexture(GL_TEXTURE0 + 2);
glBindTexture(GL_TEXTURE_2D, shapesTex);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, SHAPES, SHAPES, GL_RGBA, GL_FLOAT, shapesData);
glUniform1i(glGetUniformLocation(pidMain, "u_ShapesTex"), 2);
*/
//////////////////////////////////////////////////////
// Particles Builder
//////////////////////////////////////////////////////
// if sound is playing, start a shape, if shape is already started - add length
// if sound has stopped, end shape
// if shape is finished, move shape forward
float particleCaptureSync = syncs[5];
// Detect note change to start a new shape
bool particleNoteChanged = (particleCaptureSync - particleLastNote) * (particleCaptureSync - particleLastNote) > 0.0001f;
particleLastNote = particleCaptureSync;
// If note changed and value is significant, start new shape
if (particleCaptureSync > 0.001f && particleNoteChanged) {
int index = currentParticle * 4;
// Reset and activate current shape
particlesData[index + 0] = 0.0f; // x offset
particlesData[index + 1] = 0.0f; // y offset
particlesData[index + 2] = 0.0f; // z distance
particlesData[index + 3] = 1.0f; // a active
//particlesData2[currentParticle] = 0.0f; // reset progress/time!
// Advance to next shape slot (circular)
currentParticle = (currentParticle + 1) % (PARTICLES * PARTICLES);
}
// Move active shapes
for (int i = 0; i < (PARTICLES * PARTICLES); ++i) {
int index = i * 4;
// Check if shape is active
if (particlesData[index + 3] > 0.5f) {
// Move shape
particlesData[index + 2] += particleIncrement;
// Update y (optional, reflect live audio)
//shapesData[index + 1] = captureSync;
// Optional: grow z value to show duration
//shapesData[index + 2] += shapeIncrement * 0.2f;
// If x exceeds max distance, deactivate and reset
if (particlesData[index + 2] > PARTICLES_DISTANCE) {
particlesData[index + 0] = 0.0f;
particlesData[index + 1] = 0.0f;
particlesData[index + 2] = 0.0f;
particlesData[index + 3] = 0.0f; // inactive
}
}
}
// Bind and update u_ParticlesTex
glActiveTexture(GL_TEXTURE0 + 3);
glBindTexture(GL_TEXTURE_2D, particlesTex);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, PARTICLES, PARTICLES, GL_RGBA, GL_FLOAT, particlesData);
glUniform1i(glGetUniformLocation(pidMain, "u_ParticlesTex"), 3);
//glUniform1fvProc(700, PARTICLES*PARTICLES, particlesData2);
//PFNGLUNIFORM3FVPROC glUniform3fvProc = ((PFNGLUNIFORM3FVPROC)wglGetProcAddress("glUniform3fv"));
//glUniform3fvProc(600, 1, flatShapes); // array of shapes
//glUniform3fvProc(700, 1, test); // test shape
glUniform1fvProc(0, SU_NUMSYNCS + 1, syncs); glUniform1fvProc(0, SU_NUMSYNCS + 1, syncs);
glUniform1fvProc(20, FFT_SIZE / 4, fft_uniform); glUniform1fvProc(8, FFT_SIZE / 4, fft_uniform);
//////////////////////////////////////////////////////
// Hex Grid Builder
//////////////////////////////////////////////////////
float gap = 0.3f;
float cellW = 1.6f + 0.2f; // flat-to-flat width
float cellH = (sqrtf(3.0f) / 2.0f) * cellW; // height based on regular hex geometry
float horizontalSpacing = 0.75f * cellW * (1.0f + gap); // 3/4 of width per column
float verticalSpacing = cellH * (1.0f + gap); // full height per row
float rippleCenterX = 7.0f;
float rippleCenterY = 7.0f;
Vec3 gridOffset = { horizontalSpacing * (GRID - 1) * 0.24f, -5.0f, verticalSpacing * (GRID - 1) * 0.24f };
for (int j = 0; j < GRID; ++j) {
for (int i = 0; i < GRID; ++i) {
// Offset every other column vertically
float offsetZ = (i % 2 == 0) ? 0.0f : 0.5f * verticalSpacing;
float x = i * horizontalSpacing;
float z = j * verticalSpacing + offsetZ;
float y = 0.0f;
Vec3 hexPos = { x - gridOffset.x, y - gridOffset.y, z - gridOffset.z };
float dx = (float)i - rippleCenterX;
float dy = (float)j - rippleCenterY;
float hexDist = sqrtf(dx * dx + dy * dy);
int idx = (j * GRID + i) * 4;
hexGridData[idx + 0] = hexPos.x;
hexGridData[idx + 1] = hexPos.y;
hexGridData[idx + 2] = hexPos.z;
hexGridData[idx + 3] = hexDist;
}
}
// Bind and update u_hexGridTex
glActiveTexture(GL_TEXTURE0 + 1);
glBindTexture(GL_TEXTURE_2D, hexGridTex);
glTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, GRID, GRID, GL_RGBA, GL_FLOAT, hexGridData);
glUniform1i(glGetUniformLocation(pidMain, "u_hexGridTex"), 1);
glRects(-1, -1, 1, 1); glRects(-1, -1, 1, 1);
//syncs[0] = -syncs[0];
//glUniform1fvProc(0, SU_NUMSYNCS + 1, syncs);
// render "post process" using the opengl backbuffer // render "post process" using the opengl backbuffer
#if POST_PASS #if POST_PASS
glBindTexture(GL_TEXTURE_2D, 1); glBindTexture(GL_TEXTURE_2D, 1);

View File

@ -4,578 +4,438 @@ out vec4 o;
const float PI = 3.14159265; const float PI = 3.14159265;
const float TAU = (2. * PI); const float TAU = (2. * PI);
const float PHI = sqrt(5.) * 0.5 + 0.5; const float PHI = sqrt(5.) * 0.5 + 0.5;
layout(location = 0) uniform float syncs[12]; layout(location = 0) uniform float syncs[7];
layout(location = 20) uniform float fft_output[512]; // FFT_SIZE / 4 layout(location = 8) uniform float fft_output[512]; // FFT_SIZE / 4
layout(location = 600) uniform vec3 shapes[15]; // shapes - x = horizontal position, y = vertical position, z = length
//layout(location = 700) uniform float particlesData2[256]; // additional particles data for distance
layout(binding = 1) uniform sampler2D u_hexGridTex; //uniform sampler2D u_fft_texture;
//layout(binding = 0) uniform sampler2D u_ShapesTex; // uniform sampler2D shapes texture
layout(binding = 3) uniform sampler2D u_ParticlesTex; // uniform sampler2D particles texture
float u_time = syncs[0]; float u_time = syncs[0];
/* uses some snippets from:
* "Seascape" by Alexander Alekseev aka TDM - 2014
* License Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License.
* Contact: tdmaav@gmail.com
*/
vec3 palette(float t){ //precision mediump float;
vec3 a=vec3(0.46,0.2,0.94); vec2 u_resolution = vec2(1920,1080);
vec3 b=vec3(0.66,0.64,0.77); const float PI = 22./7.;
vec3 c=vec3(0.91,0.62,0.97);
vec3 d=vec3(0.26,0.2,0.84);
return a+b*cos(6.28318*(c*t+d));
}
// Or 2D version vec3 no(vec3 v) { return normalize(v); }
float hash(vec2 p) { float cl(float a, float b, float c) { return clamp(a,b,c); }
return fract(sin(dot(p, vec2(127.1, 311.7))) * 43758.5453123);
}
vec2 getUV() {
const vec2 scale = vec2(0.00104166667, 0.00185185185);
return gl_FragCoord.xy * scale - 1.0;
}
// Rotate
mat2 rot2D(float angle) { mat2 rot2D(float angle) {
float s = sin(angle); float s = sin(angle), c = cos(angle);
float c = cos(angle);
return mat2(c, -s, s, c); return mat2(c, -s, s, c);
} }
float noise(in vec2 xy, in float seed) { float smax( float a, float b, float k )
return fract(tan(distance(xy * PHI, xy) * seed) * xy.x); {
float h = max(k-abs(a-b),0.0);
return max(a, b) + h*h*0.25/k;
} }
float getScaledFFT(int index, float scale, float offset) { float hash(vec2 p, int algo)
// Clamp index to valid range {
index = clamp(index, 0, 511); if (algo == 1) {
float h = dot(p,vec2(127.1,311.7));
return fract(sin(h)*43758.5453123);
}
p = 50. * fract( p*0.3183099);
return fract( p.x*p.y*(p.x+p.y) );
}
// Get raw FFT value float noise(vec2 p, float scale, int a)
float raw = fft_output[index]; {
vec2 i = floor( p ),
// Apply logarithmic scaling: log(1 + value * scale) + offset f = fract( p ),
return log(1.0 + raw * scale) + offset; u = f*f*(3.-2.*f);
float sc = scale;
if (a == 1) sc = 2.;
return -scale+sc*mix( mix( hash( i + vec2(0.), a),
hash( i + vec2(1.0,0.0), a ), u.x),
mix( hash( i + vec2(0.0,1.0), a),
hash( i + vec2(1.), a), u.x), u.y);
} }
///////////////// /////////////////
// GEOMETRY // // GEOMETRY //
///////////////// /////////////////
/*float sdSphere(vec3 p, float r) {
// Hexagonal prism, circumcircle variant
float fHexagonCircumcircle(vec3 p, vec2 h) {
vec3 q = abs(p);
return max(q.y - h.y, max(q.x * sqrt(3.) * 0.5 + q.z * 0.5, q.z) - h.x);
//this is mathematically equivalent to this line, but less efficient:
//return max(q.y - h.y, max(dot(vec2(cos(PI/3), sin(PI/3)), q.zx), q.z) - h.x);
}
float sdHex(vec3 pos, float i, float angle) {
float d1 = fHexagonCircumcircle(pos, vec2(0.86, i));
return d1;
}
float sdSphere(vec3 p, float r){
return length(p)-r; return length(p)-r;
}*/
float sdCappedCylinder( vec3 p, float h, float r )
{
vec2 d = abs(vec2(length(p.xy),p.z)) - vec2(r,h);
return min(max(d.x,d.y),0.0) + length(max(d,0.0));
}
float sdBox2(vec3 p, vec3 b) {
vec3 q = abs(p) - b;
return length(max(q,0.)) + min(max(q.x,max(q.y,q.z)),0.);
}
float sdTriPrism( vec3 p, vec2 h, float rot )
{
p.xy *= rot2D(rot);
vec3 q = abs(p);
return max(q.z-h.y,max(q.x*.866025+p.y*.5,-p.y)-h.x*.5);
}
float sdPyramid( vec3 p, float s)
{
p = abs(p);
return (p.x+p.y+p.z-s)*0.577;// 35027;
}
//////////////////
// ANIMATION //
//////////////////
// POSITIONS
//const vec3 glyph1Pos = vec3(1.7,-1.1,0.0);
//const vec3 glyph2Pos = vec3(2.0,0.0,0.0);
//const vec3 glyph4Pos = vec3(0.0,2.0,0.0)
//const vec3 glyph6Pos = vec3(1.5 * -1.,1.4,0.0);
//const vec3 glyph7Pos = vec3(1.7 * -1.,-1.1,0.0);
// DELAYS
float STARTDELAY = 9., glow = 0.;
// POSITIONS
// COLORS
vec3 chevronColor = vec3(0.36, 0.9, 0.0);
// with duration d, startTime s and speed up with timeFact
float timedSine(vec3 i) {
return min((u_time - i.y)*i.z, i.x*PI);
}
float calcFactor (float startTime)
{
return STARTDELAY + STARTDELAY*cl(sin(timedSine(vec3(1.5, startTime, 4.)) * 0.06), -.9, .9);
}
// Animate ring movements
vec3 ringAnim(vec3 p) {
for (float i = 0.; i < 7.; i++) {
float rotateDelay = STARTDELAY + (i * 3.), o=1.;
if(u_time > rotateDelay) {
if(mod(i,2.) >= 1.) o = -1.;
p.xy *= rot2D(calcFactor(rotateDelay)*o);
}
}
return p;
}
// Animate prism movements
float prismAnim(vec2 i) {
if(u_time >= i.y) {
i.x += (.045*cl(sin((timedSine(vec3(3., i.y, 40.)) * .4)),-.8, .8));
}
return i.x;
} }
////////////// //////////////
// SCENE // // SCENE //
////////////// //////////////
float sea_octave(vec2 uv, float choppy) {
uv += noise(uv, 1., 1);
vec2 wv = 1.0-abs(sin(uv));
wv = mix(wv, abs(cos(uv)),wv);
return pow(1.0-pow(wv.x * wv.y,0.65),choppy);
}
// instructions -> opU( { float to union with } , vec2( {put shape here}, {put material here} ) ) vec3 map(vec3 p, int displace)
vec2 opU( vec2 d1, vec2 d2 )
{ {
return (d1.x<d2.x) ? d1 : d2; float mat = 0., glo = 1e3,
// Ring boxes
an = PI/12.,
step,
anRot = floor(atan(p.y,p.x)/an + .5)*an;
vec3 q = p;
q.xy = rot2D(anRot)*q.xy;
float d = length(max(abs(q.xy - vec2(1.8,0.))-vec2(0.24,0.14),0.)) - .02,
// Main ring
d2 = abs(length(p.xy) - 1.8) - .2;
d = min(d,d2);
// Inner ring
d2 = smax( abs(length(p.xy) - 1.75) - .08, abs(p.z - .1)-.04, .005 );
d = max(-d2,d);
// Depth slice rings
d = smax( d, abs(p.z)-.1, .02 );
//Rotating glyphs
vec3 p2 = ringAnim(p), q2=p2;
an = PI/16.;
q2.xy = rot2D(floor((atan(p2.y,p2.x)/an) + .5)*an)*q2.xy;
d2 = sdBox2( q2.xyz - vec3(1.75,0.,0.), vec3(.04, .14, .05) ) - .02 + noise(p.xy*100.,1e-3,0);
d = min(d, d2);
if (d==d2) mat = 6.;
// Gate Base
d2 = 1e3;
float stepDist = 1.5, h = 0.0, d3, choppy=4., freq=0.6, amp=.2;
for(int i = 0; i < 4; i++) {
step = sdBox2(vec3(p.x,p.y+stepDist+0.05,p.z), vec3(2., .2,stepDist)) - .05;
d2 = min(d2, step);
stepDist += .2;
} }
d2 += noise(p.xz * 50.+200., .007, 0);
d = min(d, d2);
if (d==d2) mat = 2.0;
// float opU( float d1, float d2 ) { return -max( -d1, -d2 ); } if (displace == 1) {
vec2 uv = p.xy;
vec2 mapScene(in vec3 p) { for(int i = 0; i < 4; i++) {
d3 = sea_octave((uv+u_time)*freq,choppy);
vec2 res = vec2( p.y, 0.0 ); d3 += sea_octave((uv-u_time)*freq,choppy);
h += d3 * amp;
float mat = 1.; uv *= mat2(1.6,1.2,-1.2,1.6); freq *= 1.9; amp *= 0.22;
float d = 1e9; choppy = mix(choppy,1.0,0.4);
float a = 0.;
vec2 rippleCenter = vec2(7.,7.);
float rippleSpeed = 4.0;
float rippleFreq = 1.0;
float rippleDecay = 0.25;
// Hexagonal grid
float hexGap = 0.2;
/*
for(float j = 0.; j < 16.; j++) {
vec3 po = p-vec3(-2.0,-5., 0.0);
po += vec3((1.6 + hexGap) * 8, -5., -(1.88 + hexGap) * 10);
po += vec3(0, 0., (1.88 + hexGap) * j);
for(float i = 0.; i < 16.; i++) {
if(mod(i, 2.) == 0.) {
po -= vec3(1.6 + hexGap, 0., 1.);
} else {
po += vec3(-(1.6 + hexGap), 0., 1.);
}
// Add individual hexagon ripples based on distance from center
int hexDist = int(length(vec2(i, j) - rippleCenter.xy));
//float wave = sin(hexDist * rippleFreq - u_time * rippleSpeed) * exp(-hexDist * rippleDecay);
// Apply ripple to hexagon size and position
// float hexSize = fft_output[int(i+1)*int(j+1)]*5.0; // sin(1.5*u_time)+ wave
//float hexSize = fft_output[hexDist] * 5.0;
float hexSize = getScaledFFT(hexDist, 15.0, 0.0) * 2.0; // Adjusted multiplier
a = sdHex(po, 1. + hexSize, 0.);
//d = min(d, a);
res = opU(res, vec2(a, 2.));
} }
} }
*/ d2 = max(-sdCappedCylinder(p, 2.0, min((1.7 - (u_time - 28.9)*2.5),2.3)), sdCappedCylinder(p, .025, 1.6) - h*0.15);
// main note effect shapes d2 = max(d2, sdCappedCylinder ( p, 0.3, 1.7));
// res = opU( res, vec2( sdSphere(p- vec3(2.0 + (test.x * 2.), 12. + (test.y * 10.), 0.0), 0.2 ), 1.)); d = min(d, d2);
if (d==d2) {
mat = 1.0;
}
/* // sand
float gridSize = 16.0; // or GRID if you want full size d2 = (p.y +3.7) + noise((vec2((p.x),(p.z*.44-40.))*.04)+100., 20., 0) + .25*sin(p.z*.5+u_time);
//float hexGap = 0.2; d = min(d,d2);
if (d==d2) mat = 3.0;
for(float j = 0.; j < gridSize; j++) { // pyradmid
for(float i = 0.; i < gridSize; i++) { d2 = sdPyramid(p+vec3(-75., 0., 100.), 60.);
ivec2 texSize = textureSize(u_hexGridTex, 0); d = min(d, d2);
vec2 texCoord = (vec2(i, j)) / vec2(texSize); if (d==d2) mat=3.;
// Prisms
for(float i = 0.; i < 8.; i++ ) {
q = p;
anRot = 24.67 / (PI * 2.) + (i+1.) * PI / 4.;
vec4 hexData = texture(u_hexGridTex, texCoord); // RGBA: x, y, z, dist // Nudge first and the last prism out of the ground
if (i == 1.) anRot += .2;
vec3 hexPos = hexData.rgb; if (i == 7.) anRot -= .2;
float hexDist = hexData.a; q.xy = rot2D(anRot) * q.xy;
float rotateDelay = STARTDELAY + (i - 1.) * 3. + 1.5;
// Optionally use hexDist for ripple effect with FFT // We can now call each prism by it's index
int index = clamp(int((hexDist / 34.)*512.), 0, 511); // draw all except the middle bottom prism
float hexSize = getScaledFFT(index, 15. ,0.); if (i > 0.) {
float a = sdHex(p - hexPos, 1.0 + hexSize, 0.0); q.x -= 1.95;
res = opU(res, vec2(a, 1.)); vec3 q2 = q; // new point for movable parts
if(u_time > rotateDelay) q2.x = prismAnim(vec2(q2.x, rotateDelay));
float prismTop = sdTriPrism(vec3(q.x - .06, q.y, q.z), vec2(.1,.15), .5) -.01;
d2 = max(-sdTriPrism(vec3(q2.x - .14, q2.y - 0. , q2.z), vec2(.22), .5) - .01 , sdTriPrism(vec3(q2.x, q2.y, q2.z ), vec2(.2,.12), .5) - .02);
d2 = min(d2, prismTop);
d = min(d, d2);
// glyph locking thing material
if (d == d2) mat = 4.;
// glyph locking prism material
if( d == prismTop) if(u_time > rotateDelay + .2) {
mat = 5.;
glo = min(d2, prismTop);
} }
} }
*/
/*
float gridSize2 = 16.;
for(float j = 0.; j < gridSize2; j++) {
for(float i = 0.; i < gridSize2; i++) {
vec2 texCoord = (vec2(i, j) + 0.5) / float(gridSize2);
vec4 shapeData = texture(u_ShapesTex, texCoord); // RGBA: x, y, length, active
float shapeActive = shapeData.a;
if(shapeActive < 0.5) continue;
vec3 shapePos = p - vec3(-70.0 + (shapeData.x * 2.), 12. + (shapeData.y * 80.), 0.0);
float a = sdSphere(shapePos, 0.8);
res = opU(res, vec2(a, 1.));
} }
}
*/
/*
float maxRadius = 40.; // Circle radius
float sphereRadius = 0.3;
int index = 0;
float gridSize3 = 16.; return vec3( d, mat, glo);
for(float j = 0; j < gridSize3; j++) {
for(float i = 0; i < gridSize3; i++) {
vec2 texCoord = (vec2(i, j) + 0.5) / float(gridSize3);
vec4 particleData = texture(u_ParticlesTex, texCoord); // RGBA: x, y, distance, active
float particleActive = particleData.a;
if(particleData.z < 0.5) continue;
// Map param to angle
float particleStartPos = hash(vec2(j, i)) * 2.0 * PI;
// Direction from center to initial circle position (in XY plane)
vec3 dir = normalize(vec3(cos(particleStartPos), 0.0, sin(particleStartPos))); // XZ direction
float r = max(maxRadius - particleData.z, -maxRadius);
float offsetFactor = 15.;
vec3 particleOffset = vec3(hash(vec2(i, j)) * offsetFactor , 4., hash(vec2(j, i)) * offsetFactor); // particle offset
// Final object position = center (offset) + radial movement
vec3 center = particleOffset; // Circle center
vec3 objPos = center + dir * r; // Object slides inward
res = opU(res, vec2(sdSphere(p - objPos, sphereRadius), 1.));
index++;
}
}
*/
return res;
} }
//////////////// ////////////////
// RAYCAST // // DRAWING //
//////////////// ////////////////
vec3 castRay(vec3 ro, vec3 rd, inout vec3 pos) { float rayMarch(vec3 ro, vec3 rd, int a) {
float t = 0.; vec3 d;
float mat = 0.; float t = 0.; // total distance travelled
float hit = 0.; // Raymarching
// Reduced from 40 to 24 steps for (int i = 0; i < 100; i++) {
for(int i = 0; i < 30; i++) { d = map(ro + rd * t, 0); // Get distance to objects
pos = ro + rd * t; if (a==0&&d.z<0.3) glow += pow(0.01/d.z,0.8)*0.6;
vec2 res = mapScene(pos); t += d.x; // "march" the ray
// Increase step size multiplier for faster marching if (d.x < 1e-3 || t > 500.) break;
t += res.x;
mat = res.y;
if(t > 600.) { // Reduced max distance
break;
} }
if(res.x < 0.001 * t) { // Less precise hit detection return t;
hit = 1.;
break;
}
}
// This will break fog effect
//if (t > 100.)
// t = 0.;
return vec3(t, mat, hit);
} }
//////////////// vec3 getNormal(vec3 p) {
// SHADING //
////////////////
float softshadow(in vec3 ro, in vec3 rd, float mint, float maxt, float w) {
float res = 1.0;
float t = mint;
for(int i = 0; i < 6; i++) {
if(t > maxt)
break;
float h = mapScene(ro + t * rd).x;
res = min(res, h / (w * t));
t += clamp(h, 0.1, 0.80);
if(res < -1.0)
break;
}
res = max(res, -1.0);
return 0.25 * (1.0 + res) * (1.0 + res) * (2.0 - res);
}
vec3 calcNormal(vec3 pos) {
vec2 e = vec2(.01, 0.); vec2 e = vec2(.01, 0.);
vec3 n = vec3(mapScene(pos + e.xyy).x - mapScene(pos - e.xyy).x, mapScene(pos + e.yxy).x - mapScene(pos - e.yxy).x, mapScene(pos + e.yyx).x - mapScene(pos - e.yyx).x); vec3 n = map(p, 1).x - vec3(
return normalize(n); map(p-e.xyy,1).x,
map(p-e.yxy,1).x,
map(p-e.yyx,1).x);
return no(n);
} }
vec3 addPointLight(vec3 lightPos, vec3 lightColor, float intensity, vec3 worldPos, vec3 viewDir, vec3 normal, float roughness) { float getLight(vec3 p, vec3 lightPos, float intensity, float shadow, vec3 n, float atte) {
// Light vector from surface to light vec3 l = no(lightPos - p);
vec3 lightDir = lightPos - worldPos; float len = length( lightPos - p ); // Distance from the light to the surface point.
float lightDistance = length(lightDir); float dif = cl(dot(n, l)*intensity, 0., intensity) * 1.0 / (1.0 + atte*len),
lightDir = normalize(lightDir); d = rayMarch(p+n*.0025, l, 1);
if(d<length(lightPos-p)) dif *= shadow;
// Attenuation (quadratic falloff) return dif;
float attenuation = intensity / (1.0 + 0.09 * lightDistance + 0.032 * lightDistance * lightDistance);
// Diffuse lighting (Lambert)
float NdotL = max(dot(normal, lightDir), 0.0);
vec3 diffuse = lightColor * NdotL * attenuation;
// Specular lighting (Blinn-Phong)
vec3 halfDir = normalize(lightDir + (-viewDir));
float NdotH = max(dot(normal, halfDir), 0.0);
float shininess = mix(128.0, 8.0, roughness); // Convert roughness to shininess
vec3 specular = lightColor * pow(NdotH, shininess) * attenuation;
// Fresnel effect
vec3 F0 = vec3(0.04); // Base reflectance for dielectrics
vec3 fresnel = F0 + (1.0 - F0) * pow(clamp(1.0 - max(dot(halfDir, lightDir), 0.0), 0.0, 1.0), 5.0);
// Soft shadows
float shadow = softshadow(worldPos + normal * 0.01, lightDir, 0.02, lightDistance, 4.0);
// Combine diffuse and specular with shadow
return (diffuse + specular * fresnel) * shadow;
} }
// lighting
float diffuse(vec3 n,vec3 l,float p) {
return pow(dot(n,l) * 0.4 + 0.6,p);
}
float specular(vec3 normal,vec3 lightPos,vec3 rayOrigin,float specular) {
float nrm = (specular + 8.0) / (PI * 8.0);
return pow(max(dot(reflect(rayOrigin,normal),lightPos),0.0),specular) * nrm;
}
vec3 getSeaColor(vec3 p, vec3 n, vec3 l, vec3 eye) {
vec3 color = vec3(0.0, 0.1, 0.3) + diffuse(n,l,60.0) * vec3(0.11, 0.16, 0.18) * 0.3;
color -= vec3(0.73, 0.15, 0.66) * pow(cl(1.-dot(n, -eye), 0., 1.), .7);
color += vec3(specular(n,l,eye,60.0))*0.2;
return color;
}
vec3 applyFog(vec3 col, float t, vec3 rd, vec3 lightDir, float b ) { vec3 applyFog(vec3 col, float t, vec3 rd, vec3 lightDir, float b ) {
vec3 fogColor = mix( vec3(0.34, 0.11, 0.34), // blue
float syncsBass = clamp((syncs[1] + syncs[2] + syncs[3]), 0., 1.); vec3(0.93, 0.37, 0.16), // yellow
pow(max( dot(rd, lightDir), 0.) ,8.));
float fogAmount = 1.0 - exp(-t*b); return mix( col, fogColor, 1.0 - exp(-t*b) );
float sunAmount = max( dot(rd, lightDir), 0.0 );
vec3 fogColor = mix( vec3(0.2667, 0.2941, 0.3451), // blue
vec3(0.302, 0.3176, 0.3725), // yellow
pow(sunAmount, syncsBass * 5.0) );
return mix( col, fogColor, fogAmount );
} }
// Point light with no shadow and radius based falloff vec3 getCameraRayDir(vec2 uv, vec3 p, vec3 l, float z)
vec3 addPointLightNoShadow(vec3 lightPos, vec3 lightColor, float intensity, float radius, vec3 worldPos, vec3 viewDir, vec3 normal, float roughness) {
// Light vector from surface to light
vec3 lightDir = lightPos - worldPos;
float lightDistance = length(lightDir);
lightDir = normalize(lightDir);
// Attenuation (radius based falloff)
float attenuation = clamp(intensity - lightDistance*lightDistance/(radius*radius), 0.0, 1.0);
// Diffuse lighting (Lambert)
float NdotL = max(dot(normal, lightDir), 0.0);
vec3 diffuse = lightColor * NdotL * attenuation;
// Specular lighting (Blinn-Phong)
vec3 halfDir = normalize(lightDir + (-viewDir));
float NdotH = max(dot(normal, halfDir), 0.0);
float shininess = mix(128.0, 8.0, roughness); // Convert roughness to shininess
vec3 specular = lightColor * pow(NdotH, shininess) * attenuation;
// Fresnel effect
vec3 F0 = vec3(0.04); // Base reflectance for dielectrics
vec3 fresnel = F0 + (1.0 - F0) * pow(clamp(1.0 - max(dot(halfDir, lightDir), 0.0), 0.0, 1.0), 5.0);
// Soft shadows
//float shadow = softshadow(worldPos + normal * 0.01, lightDir, 0.02, lightDistance, 4.0);
// Combine diffuse and specular with shadow
return diffuse + specular * fresnel;
}
/*vec3 addPointLight(vec3 lightPos, vec3 lightColor, float intensity, vec3 worldPos, vec3 viewDir, vec3 normal) {
vec3 lightDir = normalize(lightPos - worldPos);
float lightDistance = length(lightPos - worldPos);
// Attenuation
float attenuation = intensity / (1.0 + 0.1 * lightDistance + 0.01 * lightDistance * lightDistance);
// Diffuse
float NdotL = max(dot(normal, lightDir), 0.0);
// Specular (Blinn-Phong)
vec3 halfDir = normalize(lightDir - viewDir);
float NdotH = max(dot(normal, halfDir), 0.0);
float specular = pow(NdotH, 32.0);
// Shadow
float shadow = softshadow(worldPos + normal * 0.01, lightDir, 0.01, lightDistance, 8.0);
return lightColor * (NdotL + specular * 0.5) * attenuation * shadow;
}
*/
vec3 shading(vec3 v, vec3 n, vec3 dir, float material) {
float shininess = 0.01;
vec3 outMaterial = vec3(0.);
if(material == 0.) {
outMaterial = vec3(0.8314, 0.2941, 0.2941);
shininess = 0.1;
} else if(material == 1.) {
outMaterial = vec3(0.6196, 0.6118, 0.6118);
shininess = .7;
} else if(material == 2.) {
outMaterial = vec3(0.3255, 0.4784, 0.3255);
shininess = .2;
} else if(material == 3.) {
outMaterial = vec3(0.2471, 0.3059, 0.6314);
shininess = 1.0;
} else if(material == 4.) {
outMaterial = vec3(0.9961, 1.0, 0.9922);
shininess = .1;
} else if(material == 5.) {
outMaterial = vec3(0.9961, 1.0, 0.9922);
shininess = .3;
}
vec3 lights = vec3(0.);
lights += addPointLight(vec3(0., 40.0, -10.), vec3(0.77, 0.26, 0.73), 30.0, v, dir, n, shininess);
lights += addPointLight(vec3(0., 20.0, 15.), vec3(0.77, 0.26, 0.73), 30.0, v, dir, n, shininess);
// LIGHTS IN HEX GRID PATTERN
/*
float gridsize = 16.0; // or GRID if you want full size
vec3 p = vec3(0.);
for(float j = 0.; j < gridsize; j++) {
for(float i = 0.; i < gridsize; i++) {
ivec2 texSize = textureSize(u_hexGridTex, 0);
vec2 texCoord = (vec2(i, j)) / vec2(texSize);
vec4 hexData = texture(u_hexGridTex, texCoord); // RGBA: x, y, z, dist
vec3 hexPos = hexData.rgb;
float hexDist = hexData.a;
// Optionally use hexDist for ripple effect with FFT
int index = clamp(int((hexDist / 34.)*512.), 0, 511);
float hexSize = getScaledFFT(index, 15. ,0.);
//float a = sdHex(p - hexPos, 1.0 + hexSize, 0.0);
lights += addPointLightNoShadow(vec3(hexPos.x, (hexPos.y + hexSize) + 2., hexPos.z), palette(hexSize* 1.5), clamp(hexSize * 5., 0., 1.), 3.4 ,v, dir, n, shininess);
}
}
*/
// LIGHTS WITH PARTICLES
float maxRadius = 40.; // Circle radius
float sphereRadius = 0.7;
int index = 0;
float particleHeight = 4.;
float gridSize3 = 16.;
for(float j = 0; j < gridSize3; j++) {
for(float i = 0; i < gridSize3; i++) {
vec2 texCoord = (vec2(i, j) + 0.5) / float(gridSize3);
vec4 particleData = texture(u_ParticlesTex, texCoord); // RGBA: x, y, distance, active
float particleActive = particleData.a;
if(particleData.z < 0.5) continue;
// Map param to angle
float particleStartPos = hash(vec2(j, i)) * 2.0 * PI;
// Direction from center to initial circle position (in XY plane)
vec3 dir = normalize(vec3(cos(particleStartPos), 0.0, sin(particleStartPos))); // XZ direction
float r = max(maxRadius - particleData.z, -maxRadius);
float offsetFactor = 15.;
vec3 particleOffset = vec3(hash(vec2(i, j)) * offsetFactor , particleHeight, hash(vec2(j, i)) * offsetFactor); // particle offset
// Final object position = center (offset) + radial movement
vec3 center = particleOffset; // Circle center
vec3 objPos = center + dir * r; // Object slides inward
//res = opU(res, vec2(sdSphere(p - objPos, sphereRadius), 1.));
lights += addPointLight(objPos, palette(i + j), 3.0, v, dir, n, shininess);
//lights += addPointLightNoShadow(objPos, palette(i + j), 10. , 20. ,v, dir, n, shininess);
index++;
}
}
vec3 lightDir = vec3(0., 1., -3);
//float sun_dif = clamp(dot(n, lightDir), 0., 1.);
//float shadow = softshadow(v + n * 0.01, lightDir, .01, 30., 18.);
//lights += vec3(0.6431, 0.7804, 0.8588) * sun_dif * shadow * occ;
float ind = clamp(dot(n, normalize(lightDir * vec3(.0, -1.0, -2.0))), 0.0, 1.0);
lights += vec3(0.08, 0.62, 0.75) * ind * 0.8;
outMaterial *= max(vec3(0.), lights); // output with lights;
return outMaterial;
}
vec3 postProcess(vec3 col) {
// float random = noise(gl_FragCoord.xy, 0.01+u_time);
// float random2 = noise(gl_FragCoord.xy, .2+u_time);
//col += 0.075*clamp(vec3(0.5*random, 0.5*random2, 0.5*random), 0.02, 1.); // dither
// Normalized pixel coordinates (from 0 to 1)
vec2 screenCoord = getUV();
// Vignette
float radius = 0.8;
float d = smoothstep(radius, radius - 0.4, length(screenCoord - vec2(0.5)));
col = mix(col, col * d, 1.);
// Contrast
float contrast = .75;
col = mix(col, smoothstep(0.0, 1.0, col), contrast);
// Colour mapping
col *= vec3(1.0, 1.0, 1.0);
col = pow(col, vec3(0.4545)); // gamma
// fade in at the beginning
//col*=vec3(clamp((u_time-1.8)*0.5,0., 1.));
// fade out at the end
// col*=vec3(clamp((120.-u_time)*.35, 0., 1.));
return col;
}
//////////////////
// RENDERING //
//////////////////
vec3 getCameraRayDir(vec2 uv, vec3 camPos, vec3 camTarget, float fov)
{ {
vec3 f = normalize(camTarget-camPos), vec3 f = no(l-p),
r = normalize(cross(vec3(0,1,0), f)), r = no(cross(vec3(0.,1.,0.), f)),
u = cross(f,r), u = cross(f,r),
c = f*fov, c = f*z,
i = c + uv.x*r + uv.y*u, i = c + uv.x*r + uv.y*u,
d = normalize(i); d = no(i);
return d; return d;
} }
vec3 render(vec2 uv) { vec3 postProcess(vec3 col) {
// Vignette
//col *= smoothstep(0.9, 0.5, length(gl_FragCoord.xy/u_resolution.xy-vec2(.5)));
// Colour mapping
col *= vec3(.9, 0.8, 0.7);
// gamma
col = pow( col, vec3(.45) );
// Contrast = a
col = smoothstep(0., 1., col);
vec3 camPos = vec3(-10.0, 20.0, -20.0); // fade out at the end
vec3 camTarget = vec3(0.0, 10.0, 0.0); // Adjust target as needed col += 1.0 - vec3(cl((46. - u_time)*.5, 0., 1.0));
float fov = 1.0;
vec3 rayDir = getCameraRayDir(uv, camPos, camTarget, fov);
vec3 col = vec3(0.); // background color
vec3 hitPos = vec3(0);
vec3 t = castRay(camPos, rayDir, hitPos);
if(t.x > 0.0) {
vec3 nor = calcNormal(hitPos);
col = shading(hitPos, nor, rayDir, t.y);
}
/*
//glow from the bottom
vec3 bGlowColor = palette(clamp((syncs[1] + syncs[2] + syncs[3]), 0., 1.)); // color change
float bGlowDistance = 0.3;
vec3 p = camPos + t.x * rayDir;
vec3 bGlowLevel = bGlowColor * exp(-(p.y + 0.0) / bGlowDistance) * 9900.;
col += bGlowLevel;
col = clamp(mix(bGlowLevel, col, t.z), 0.0, 1.0);
*/
// distance fog + bass thunder
float fogAmount = 0.01;
col = col *exp(-t.x*fogAmount) + applyFog(col, t.x, rayDir, vec3(0., -0.5, 1.8), fogAmount) * (1.0-exp(-t.x*fogAmount));
return col; return col;
} }
vec3 cameraPos()
{
// first zoom in to the gate
vec3 cPos = vec3(0., cl(6.-u_time,2.,6.), cl((100.-u_time*11.),6.,100.));
if (u_time > 7.5) cPos += vec3(0., cl(7.5-u_time,-1.,0.), 0.);
// close up shot for 1st glyph lock
if (u_time > 10.5) cPos = vec3(2.,-1.,1.);
// zoom away for 2nd glyph animation
if (u_time > 12.) cPos = vec3(-1., -.7, 4.);
if (u_time > 14.5) {
cPos = vec3(0., 0., 4.);
cPos.yz *= rot2D(-0.6-(cos(u_time-15.))*0.05);
cPos.xz *= rot2D(sin((u_time-16.5)*0.1));
}
if (u_time > 23.5)
{
cPos = vec3(3., -.7, 4.);
}
if (u_time > 32.5)
{
cPos = vec3(-20.,10.,50.);
}
if (u_time > 36.5) {
cPos = vec3(3., -.7, 4.);
cPos.yz *= rot2D(((1.-cos(u_time-36.5))*-0.025));
cPos.xz *= rot2D(sin((u_time-36.5)*0.07));
}
return cPos;
}
vec3 cameraPointAt() {
vec3 p = vec3(0., -.5, 0.);
// look at 1st glyph
if (u_time > 10.5) p = vec3(1.7,-1.1,0.);
// look gate at distance
if(u_time > 12.) p = vec3(0.);
if(u_time > 14.5) p = mix(vec3(1.5,1.4,0.0),vec3(-1.5,1.4,0.0), (u_time-16.5)*0.13);
if(u_time > 23.5) p = vec3(0.);
return p;
}
// flash screen with glyph color when it is locked
vec3 colorFlashesAnim(vec3 col) {
if(u_time > 10.75) {
float x = smoothstep(-1.,.8,sin((timedSine(vec3(.8, 10.75, 8.))*2.)));
col = mix(col, chevronColor * (x * 1.4), x *.76);
}
return col;
}
vec3 addSpecular(vec3 nor, vec3 rod, float amount, float phong)
{
return vec3(specular(nor,no(vec3(0.0,0.3,0.8)),no(rod),pow(10.,phong)))*amount;
}
vec3 sceneGate(vec2 uv)
{
// Initialization
vec3 ro = cameraPos(),
rd = getCameraRayDir(uv, ro, cameraPointAt(), cl((43.-u_time)*-2.,2.,25.)),
col = vec3(0.);
float d = rayMarch(ro, rd,0), mat = 0.;
if (d < 500.) {
// Lighting
vec3 p = ro + rd * d,
n = getNormal(p);
mat = map(p,0).y;
// Light 1 Arguments
// 1: Ray starting point
// 2: Light position
// 3: Light intensity
// 4: Shadow intensity
// Lights
col += vec3(0.82, 0.5, 0.9) * getLight(p, vec3( 10., 15., 25.), 1., .2,n,1e-10);
col += vec3(0.79, 0.66, 0.43) * getLight(p, vec3( 4., 2., -15.), 1., 1.,n,1e-10);
col += vec3(0.0, 0.06, 0.7) * getLight(p, vec3( 0., 0., 5.),cl((u_time-29.0)*100.,0.,50.), 0.0,n,3.1);
// indirect lightning -> vec3 in normalize is light direction
col += vec3(0.29, 0.28, 0.33) * cl( dot( n, no(vec3(0. , 1., 10.))), 0., 1.);
if(mat==0.)
col *= vec3(0.2, 0.3, 0.3) + addSpecular(n,rd,.5, 2.);
if(mat==1.)
col *= getSeaColor(p, n, no(vec3(0.0,0.3,0.8)),no(rd));
if(mat==2.)
col *= vec3(0.7, 0.7, 0.4) + noise (p.xz*3.+1.5, 0.1,0);
if(mat==3.)
col *= vec3(.8, .8, .5) + noise(p.xz*500.+1e5, .3,0);
if(mat==4.)
col *= vec3(0.0, 0.08, 0.11) + addSpecular(n,rd,0.3,0.7);
if(mat ==5.)
col = chevronColor*0.4;// * pow(cl(1. -dot(n, -rd), 0., 1.), .3);
if(mat == 6.)
col *= vec3(0.01, 0.04, 0.06) + addSpecular(n,rd,.1, 2.5);
}
col += glow * chevronColor*.25;
return postProcess(colorFlashesAnim(applyFog(col, d, rd, vec3(0., -.1, -1.), .01)));
}
void main() { void main() {
vec3 finalColor = render(getUV()); o = vec4(sceneGate( (gl_FragCoord.xy * 2. - u_resolution.xy) / u_resolution.y), 1.);
//finalColor = postProcess(finalColor);
o = vec4(finalColor, 1.);
} }
/*
vec3 render2(vec2 uv, float time) {
vec3 res = vec3(.0);
float pos = syncs[5];
if (uv.x >= pos && uv.x <= pos+0.01 ) {
res += vec3(1.);
}
//if (uv.x >= 0.0 && uv.x <= 0.01 ) {
// res += vec3(abs(syncs[4]*2));
//}
//res += vec3(0.1, 0.2, 0.3) * abs(syncs[2]*1.2);
return res;
}
void main() {
vec2 uv = gl_FragCoord.xy * 2. / vec2(1920,1080);
vec3 col = render2(uv, u_time);
o = vec4(col,1.0);
}
*/

View File

@ -1,139 +1,305 @@
// Generated with Shader Minifier 1.5.1 (https://github.com/laurentlb/Shader_Minifier/) // Generated with Shader Minifier 1.5.1 (https://github.com/laurentlb/Shader_Minifier/)
#ifndef FRAGMENT_INL_ #ifndef FRAGMENT_INL_
# define FRAGMENT_INL_ # define FRAGMENT_INL_
# define VAR_fft_output "n" # define VAR_fft_output "p"
# define VAR_o "f" # define VAR_o "f"
# define VAR_shapes "s" # define VAR_syncs "a"
# define VAR_syncs "m"
# define VAR_u_ParticlesTex "d"
# define VAR_u_hexGridTex "k"
const char *fragment_frag = const char *fragment_frag =
"#version 460\n" "#version 460\n"
"precision mediump float;" "precision mediump float;"
"out vec4 f;" "out vec4 f;"
"const float i=2.*acos(-1.),v=sqrt(5.)*.5+.5;" "const float m=2.*acos(-1.),v=sqrt(5.)*.5+.5;"
"layout(location=0)uniform float m[12];" "layout(location=0)uniform float a[7];"
"layout(location=20)uniform float n[512];" "layout(location=8)uniform float p[512];"
"layout(location=600)uniform vec3 s[15];" "float y=a[0];"
"layout(binding=1)uniform sampler2D k;" "vec2 c=vec2(1920,1080);"
"layout(binding=3)uniform sampler2D d;" "const float z=22./7.;"
"float g=m[0];" "vec3 n(vec3 v)"
"float t(vec2 v)"
"{" "{"
"return fract(sin(dot(v,vec2(127.1,311.7)))*43758.5453123);" "return normalize(v);"
"}" "}"
"vec2 t(vec3 v)" "float n(float v,float f,float y)"
"{" "{"
"return vec2(v.y,0);" "return clamp(v,f,y);"
"}" "}"
"vec3 t(vec3 v,vec3 x,inout vec3 f)" "mat2 n(float v)"
"{" "{"
"float i=0.,e=0.,y=0.;" "float f=sin(v);"
"for(int n=0;n<30;n++)" "v=cos(v);"
"return mat2(v,-f,f,v);"
"}"
"float x(float v,float y,float m)"
"{" "{"
"f=v+x*i;" "float z=max(m-abs(v-y),0.);"
"vec2 m=t(f);" "return max(v,y)+z*z*.25/m;"
"i+=m.x;" "}"
"e=m.y;" "float n(vec2 v,int y)"
"if(i>6e2)"
"break;"
"if(m.x<.001*i)"
"{" "{"
"y=1.;" "if(y==1)"
"{"
"float y=dot(v,vec2(127.1,311.7));"
"return fract(sin(y)*43758.5453123);"
"}"
"v=50.*fract(v*.3183099);"
"return fract(v.x*v.y*(v.x+v.y));"
"}"
"float n(vec2 v,float y,int f)"
"{"
"vec2 m=floor(v);"
"v=fract(v);"
"v=v*v*(3.-2.*v);"
"float z=y;"
"if(f==1)"
"z=2.;"
"return-y+z*mix(mix(n(m+vec2(0),f),n(m+vec2(1,0),f),v.x),mix(n(m+vec2(0,1),f),n(m+vec2(1),f),v.x),v.y);"
"}"
"float n(vec3 v,float y,float m)"
"{"
"vec2 f=abs(vec2(length(v.xy),v.z))-vec2(m,y);"
"return min(max(f.x,f.y),0.)+length(max(f,0.));"
"}"
"float n(vec3 v,vec3 y)"
"{"
"v=abs(v)-y;"
"return length(max(v,0.))+min(max(v.x,max(v.y,v.z)),0.);"
"}"
"float n(vec3 v,vec2 y)"
"{"
"v.xy*=n(.5);"
"vec3 m=abs(v);"
"return max(m.z-y.y,max(m.x*.866025+v.y*.5,-v.y)-y.x*.5);"
"}"
"float x(vec3 v)"
"{"
"v=abs(v);"
"return(v.x+v.y+v.z-60.)*.577;"
"}"
"float s=0.;"
"vec3 l=vec3(.36,.9,0);"
"float t(vec3 v)"
"{"
"return min((y-v.y)*v.z,v.x*z);"
"}"
"vec3 w(vec3 v)"
"{"
"for(float f=0.;f<7.;f++)"
"{"
"float m=9.+f*3.,z=1.;"
"if(y>m)"
"{"
"if(mod(f,2.)>=1.)"
"z=-1.;"
"v.xy*=n((9.+9.*n(sin(t(vec3(1.5,m,4))*.06),-.9,.9))*z);"
"}"
"}"
"return v;"
"}"
"float n(vec2 v)"
"{"
"if(y>=v.y)"
"v.x+=.045*n(sin(t(vec3(3,v.y,40))*.4),-.8,.8);"
"return v.x;"
"}"
"float n(vec2 v,float f)"
"{"
"v+=n(v,1.,1);"
"vec2 y=1.-abs(sin(v));"
"y=mix(y,abs(cos(v)),y);"
"return pow(1.-pow(y.x*y.y,.65),f);"
"}"
"vec3 n(vec3 v,int m)"
"{"
"float f=0.,i=1e3,r=z/12.,a,s=floor(atan(v.y,v.x)/r+.5)*r;"
"vec3 l=v;"
"l.xy=n(s)*l.xy;"
"float c=length(max(abs(l.xy-vec2(1.8,0))-vec2(.24,.14),0.))-.02,d=abs(length(v.xy)-1.8)-.2;"
"c=min(c,d);"
"d=x(abs(length(v.xy)-1.75)-.08,abs(v.z-.1)-.04,.005);"
"c=x(max(-d,c),abs(v.z)-.1,.02);"
"vec3 p=w(v),t=p;"
"r=z/16.;"
"t.xy=n(floor(atan(p.y,p.x)/r+.5)*r)*t.xy;"
"d=n(t.xyz-vec3(1.75,0,0),vec3(.04,.14,.05))-.02+n(v.xy*1e2,.001,0);"
"c=min(c,d);"
"if(c==d)"
"f=6.;"
"d=1e3;"
"r=1.5;"
"float e=0.,u,g=4.,C=.6,F=.2;"
"for(int f=0;f<4;f++)"
"a=n(vec3(v.x,v.y+r+.05,v.z),vec3(2,.2,r))-.05,d=min(d,a),r+=.2;"
"d+=n(v.xz*50.+2e2,.007,0);"
"c=min(c,d);"
"if(c==d)"
"f=2.;"
"if(m==1)"
"{"
"vec2 f=v.xy;"
"for(int v=0;v<4;v++)"
"u=n((f+y)*C,g)+n((f-y)*C,g),e+=u*F,f*=mat2(1.6,1.2,-1.2,1.6),C*=1.9,F*=.22,g=mix(g,1.,.4);"
"}"
"d=max(max(-n(v,2.,min(1.7-(y-28.9)*2.5,2.3)),n(v,.025,1.6)-e*.15),n(v,.3,1.7));"
"c=min(c,d);"
"if(c==d)"
"f=1.;"
"d=v.y+3.7+n(vec2(v.x,v.z*.44-40.)*.04+1e2,20.,0)+.25*sin(v.z*.5+y);"
"c=min(c,d);"
"if(c==d)"
"f=3.;"
"d=x(v+vec3(-75,0,100));"
"c=min(c,d);"
"if(c==d)"
"f=3.;"
"for(float m=0.;m<8.;m++)"
"{"
"l=v;"
"s=24.67/(z*2.)+(m+1.)*z/4.;"
"if(m==1.)"
"s+=.2;"
"if(m==7.)"
"s-=.2;"
"l.xy=n(s)*l.xy;"
"float r=9.+(m-1.)*3.+1.5;"
"if(m>0.)"
"{"
"l.x-=1.95;"
"vec3 v=l;"
"if(y>r)"
"v.x=n(vec2(v.x,r));"
"float m=n(vec3(l.x-.06,l.yz),vec2(.1,.15))-.01;"
"d=min(max(-n(vec3(v.x-.14,v.yz),vec2(.22))-.01,n(vec3(v),vec2(.2,.12))-.02),m);"
"c=min(c,d);"
"if(c==d)"
"f=4.;"
"if(c==m)"
"if(y>r+.2)"
"f=5.,i=min(d,m);"
"}"
"}"
"return vec3(c,f,i);"
"}"
"float n(vec3 v,vec3 y,int m)"
"{"
"vec3 f;"
"float c=0.;"
"for(int i=0;i<100;i++)"
"{"
"f=n(v+y*c,0);"
"if(m==0&&f.z<.3)"
"s+=pow(.01/f.z,.8)*.6;"
"c+=f.x;"
"if(f.x<.001||c>5e2)"
"break;" "break;"
"}" "}"
"return c;"
"}" "}"
"return vec3(i,e,y);" "vec3 h(vec3 v)"
"}"
"float t(vec3 v,vec3 i,float f)"
"{" "{"
"float m=1.,y=.02;" "vec2 f=vec2(.01,0);"
"for(int n=0;n<6;n++)" "return n(n(v,1).x-vec3(n(v-f.xyy,1).x,n(v-f.yxy,1).x,n(v-f.yyx,1)));"
"{"
"if(y>f)"
"break;"
"float d=t(v+y*i).x;"
"m=min(m,d/(4.*y));"
"y+=clamp(d,.1,.8);"
"if(m<-1.)"
"break;"
"}" "}"
"m=max(m,-1.);" "float h(vec3 v,vec3 y,float f,float m,vec3 c,float i)"
"return.25*(1.+m)*(1.+m)*(2.-m);"
"}"
"vec3 x(vec3 v)"
"{" "{"
"vec2 m=vec2(.01,0);" "vec3 d=n(y-v);"
"return normalize(vec3(t(v+m.xyy).x-t(v-m.xyy).x,t(v+m.yxy).x-t(v-m.yxy).x,t(v+m.yyx).x-t(v-m.yyx).x));" "f=n(dot(c,d)*f,0.,f)/(1.+i*length(y-v));"
"i=n(v+c*.0025,d,1);"
"if(i<length(y-v))"
"f*=m;"
"return f;"
"}" "}"
"vec3 t(vec3 v,vec3 m,float i,vec3 d,vec3 f,vec3 x,float y)" "float h(vec3 v,vec3 f,vec3 y,float m)"
"{" "{"
"v-=d;" "return pow(max(dot(reflect(y,v),f),0.),m)*((m+8.)/(z*8.));"
"float n=length(v);"
"v=normalize(v);"
"i/=1.+.09*n+.032*n*n;"
"float g=max(dot(x,v),0.);"
"f=normalize(v-f);"
"vec3 e=vec3(.04);"
"e+=(1.-e)*pow(clamp(1.-max(dot(f,v),0.),0.,1.),5.);"
"n=t(d+x*.01,v,n);"
"return(m*g*i+m*pow(max(dot(x,f),0.),mix(128.,8.,y))*i*e)*n;"
"}" "}"
"vec3 t(vec3 v,vec3 f,vec3 i,float m)" "vec3 h(vec3 v,vec3 y,vec3 f,vec3 m)"
"{" "{"
"float y=.01;" "return vec3(0,.1,.3)+pow(dot(y,f)*.4+.6,60.)*vec3(.11,.16,.18)*.3-vec3(.73,.15,.66)*pow(n(1.-dot(y,-m),0.,1.),.7)+vec3(h(y,f,m,60.))*.2;"
"vec3 n=vec3(0);"
"if(m==0.)"
"n=vec3(.8314,.2941,.2941),y=.1;"
"else if(m==1.)"
"n=vec3(.6196,.6118,.6118),y=.7;"
"else if(m==2.)"
"n=vec3(.3255,.4784,.3255),y=.2;"
"else if(m==3.)"
"n=vec3(.2471,.3059,.6314),y=1.;"
"else if(m==4.)"
"n=vec3(.9961,1,.9922),y=.1;"
"else if(m==5.)"
"n=vec3(.9961,1,.9922),y=.3;"
"vec3 e=vec3(0)+t(vec3(0,40,-10),vec3(.77,.26,.73),30.,v,i,f,y)+t(vec3(0,20,15),vec3(.77,.26,.73),30.,v,i,f,y);"
"int g=0;"
"for(float m=0;m<16.;m++)"
"for(float i=0;i<16.;i++)"
"{"
"vec2 n=(vec2(i,m)+.5)/float(16.);"
"vec4 x=texture(d,n);"
"if(x.z<.5)"
"continue;"
"float s=t(vec2(m,i))*2.*acos(-1.);"
"vec3 c=normalize(vec3(cos(s),0,sin(s))),l=vec3(t(vec2(i,m))*15.,4,t(vec2(m,i))*15.);"
"e+=t(l+c*max(40.-x.z,-40.),vec3(.46,.2,.94)+vec3(.66,.64,.77)*cos(6.28318*(vec3(.91,.62,.97)*(i+m)+vec3(.26,.2,.84))),3.,v,c,f,y);"
"g++;"
"}" "}"
"e+=vec3(.08,.62,.75)*clamp(dot(f,normalize(vec3(0,1,-3)*vec3(0,-1,-2))),0.,1.)*.8;" "vec3 h(vec2 v,vec3 y,vec3 f,float m)"
"return n*max(vec3(0),e);"
"}"
"vec3 t(vec2 m,vec3 v)"
"{" "{"
"v=normalize(vec3(0,10,0)-v);" "y=n(f-y);"
"vec3 y=normalize(cross(vec3(0,1,0),v));" "f=n(cross(vec3(0,1,0),y));"
"return normalize(v+m.x*y+m.y*cross(v,y));" "return n(y*m+v.x*f+v.y*cross(y,f));"
"}" "}"
"vec3 x(vec2 v)" "vec3 h()"
"{" "{"
"vec3 f=vec3(-10,20,-20),y=t(v,f),i=vec3(0),n=vec3(0);" "vec3 v=vec3(0,n(6.-y,2.,6.),n(1e2-y*11.,6.,1e2));"
"f=t(f,y,n);" "if(y>7.5)"
"if(f.x>0.)" "v+=vec3(0,n(7.5-y,-1.,0.),0);"
"{" "if(y>10.5)"
"vec3 v=x(n);" "v=vec3(2,-1,1);"
"i=t(n,v,y,f.y);" "if(y>12.)"
"v=vec3(-1,-.7,4);"
"if(y>14.5)"
"v=vec3(0,0,4),v.yz*=n(-.6-cos(y-15.)*.05),v.xz*=n(sin((y-16.5)*.1));"
"if(y>23.5)"
"v=vec3(3,-.7,4);"
"if(y>32.5)"
"v=vec3(-20,10,50);"
"if(y>36.5)"
"v=vec3(3,-.7,4),v.yz*=n((1.-cos(y-36.5))*-.025),v.xz*=n(sin((y-36.5)*.07));"
"return v;"
"}" "}"
"return i*exp(-f.x*.01)+mix(i,mix(vec3(.2667,.2941,.3451),vec3(.302,.3176,.3725),pow(max(dot(y,vec3(0,-.5,1.8)),0.),clamp(m[1]+m[2]+m[3],0.,1.)*5.)),1.-exp(-f.x*.01))*(1.-exp(-f.x*.01));" "vec3 n()"
"{"
"vec3 v=vec3(0,-.5,0);"
"if(y>10.5)"
"v=vec3(1.7,-1.1,0);"
"if(y>12.)"
"v=vec3(0);"
"if(y>14.5)"
"v=mix(vec3(1.5,1.4,0),vec3(-1.5,1.4,0),(y-16.5)*.13);"
"if(y>23.5)"
"v=vec3(0);"
"return v;"
"}"
"vec3 r(vec3 v)"
"{"
"if(y>10.75)"
"{"
"float f=smoothstep(-1.,.8,sin(t(vec3(.8,10.75,8))*2.));"
"v=mix(v,f*1.4*l,f*.76);"
"}"
"return v;"
"}"
"vec3 h(vec3 v,vec3 y,float f,float m)"
"{"
"return vec3(h(v,n(vec3(0,.3,.8)),n(y),pow(10.,m)))*f;"
"}"
"vec3 h(vec2 v)"
"{"
"vec3 f=h(),m=h(v,f,n(),n((43.-y)*-2.,2.,25.)),c=vec3(0);"
"float z=n(f,m,0),i=0.;"
"if(z<5e2)"
"{"
"vec3 v=f+m*z,d=h(v);"
"i=n(v,0).y;"
"c+=vec3(.82,.5,.9)*h(v,vec3(10,15,25),1.,.2,d,1e-10);"
"c+=vec3(.79,.66,.43)*h(v,vec3(4,2,-15),1.,1.,d,1e-10);"
"c+=vec3(0,.06,.7)*h(v,vec3(0,0,5),n((y-29.)*1e2,0.,50.),0.,d,3.1);"
"c+=vec3(.29,.28,.33)*n(dot(d,n(vec3(0,1,10))),0.,1.);"
"if(i==0.)"
"c*=vec3(.2,.3,.3)+h(d,m,.5,2.);"
"if(i==1.)"
"c*=h(v,d,n(vec3(0,.3,.8)),n(m));"
"if(i==2.)"
"c*=vec3(.7,.7,.4)+n(v.xz*3.+1.5,.1,0);"
"if(i==3.)"
"c*=vec3(.8,.8,.5)+n(v.xz*5e2+1e5,.3,0);"
"if(i==4.)"
"c*=vec3(0,.08,.11)+h(d,m,.3,.7);"
"if(i==5.)"
"c=l*.4;"
"if(i==6.)"
"c*=vec3(.01,.04,.06)+h(d,m,.1,2.5);"
"}"
"c+=s*l*.25;"
"return smoothstep(0.,1.,pow(r(mix(c,mix(vec3(.34,.11,.34),vec3(.93,.37,.16),pow(max(dot(m,vec3(0,-.1,-1)),0.),8.)),1.-exp(-z*.01)))*vec3(.9,.8,.7),vec3(.45)))+1.-vec3(n((46.-y)*.5,0.,1.));"
"}" "}"
"void main()" "void main()"
"{" "{"
"vec3 v=x(gl_FragCoord.xy*vec2(.00104166667,.00185185185)-1.);" "f=vec4(h((gl_FragCoord.xy*2.-c.xy)/c.y),1);"
"f=vec4(v,1);"
"}"; "}";
#endif // FRAGMENT_INL_ #endif // FRAGMENT_INL_

View File

@ -13,7 +13,7 @@
#define SU_LENGTH_IN_PATTERNS 108 #define SU_LENGTH_IN_PATTERNS 108
#define SU_LENGTH_IN_ROWS (SU_LENGTH_IN_PATTERNS*SU_PATTERN_SIZE) #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_SAMPLES_PER_ROW (SU_SAMPLE_RATE*60/(SU_BPM*SU_ROWS_PER_BEAT))
#define SU_NUMSYNCS 11 #define SU_NUMSYNCS 2
#define SU_SYNCBUFFER_LENGTH ((SU_LENGTH_IN_SAMPLES+255)>>8)*SU_NUMSYNCS #define SU_SYNCBUFFER_LENGTH ((SU_LENGTH_IN_SAMPLES+255)>>8)*SU_NUMSYNCS
#include <stdint.h> #include <stdint.h>