diff --git a/win/main.cpp b/win/main.cpp index ce80836..1e5a977 100644 --- a/win/main.cpp +++ b/win/main.cpp @@ -19,13 +19,24 @@ static inline unsigned char voice_arp(unsigned long i) return (((i << 1) / (notes[arpeggio[arpseq[(i >> 13) & 7]][(i >> 8) & 3]] >> 2)) & 1) << 7; } +int notes2[25] = { 134, 142, 150, 159, 169, 179, 189, 201, 213, 225, 239, 253, 268, 284, 301, 319, 338, 358, 379, 401, 425, 451, 477, 506, 536 }; +int bassbeat[8] = { 0, 0, 1, 0, 0, 1, 0, 1 }; +int bassline[8] = { 12, 12, 15, 10, 12, 12, 17, 10 }; + +static inline unsigned char voice_bass(unsigned long i) +{ + int note = notes2[bassline[(i >> 13) & 7]]; + int beat = bassbeat[(i >> 10) & 7] ? 7 : 8; + return (((i * note) >> beat) & 0x7F) + (((i * note + i) >> beat) & 0x7F); +} + void fill(char *data) { static unsigned long i = 0; for (int j = 0; j < 4096; j++) { - data[j] = voice_arp(i); + data[j] = voice_bass(i); i++; } }