Device Details
Overview
Name | Version: | Kasm Bangaz 1.14 |
Author: | kevleyski |
Device Type: | MIDI Effect |
Description: | Algorthimic drum machine! This is Rust code chewing on some complex algorithms to bang on your Ableton Drum Racks Evolving euclidean algorithms thrown in the mix For kicks you can also reassign each drum to hit a different MIDI note, this makes it quick an easy to swap drums around but more importantly means to can just skip some altogether, it's kinda fun to play around with can be pretty hypnotic with some FX, there is arandom shuffler too to swap the drums around, keep hitting it until you find what you are after, MIDI key presses also offset the pattern slightly and encoders add fills Also try Bangaz with regular instruments too, reassigning each drum to harmonics to make some interesting apreggios to be had there To go make you own drum sequences this Ableton Max4Live MIDI device was built with source code available here: https://pyrmontbrewery.com/get_kasm !! NOTE: you need the latest Ableton 12.2 for this as it uses the new V8 jsinterp from Max9 !! But... if you don't have Max4Live or have an older Ableton Live version no worries - Kasm is WebAssembly so it also runs on a regular web browsers too! You can interface with Ableton via WebMIDI instead, this way you can develop and test with Kasm SDK in Chrome/Firefox, try it out here: https://pyrmontbrewery.com/kasm For those interested, this is what the Bangaz Rust code (Ableton Live and Web version uses identical WebAssembly)... /// bangaz_1: Kasm Bangaz Drummer Pattern 1 pub fn kasm_emanator_bangaz_1(_inlet_0_note: i32, _inlet_1_semitone: i32, _velocity: i32, _enc1: i32, _enc2: i32, step: i32, _bar: i32) -> i32 { if step % 4 == 0 { send_note(get_drum_note(DrumType::Kick), 127, 0, 100, 30); return get_drum_note(DrumType::Kick); } else if step % 4 == 2 { send_note(get_drum_note(DrumType::Snare), 127, 0, 100, 80); return get_drum_note(DrumType::Snare); } else if step % 8 == 3 { send_note(get_drum_note(DrumType::LowTom), 127 / 2, 0, 100, 64); return get_drum_note(DrumType::LowTom); } else if step % 8 == 6 { send_note(get_drum_note(DrumType::MidTom), 127 / 2, 0, 100, 64); return get_drum_note(DrumType::MidTom); } else if step % 16 == 9 { send_note(get_drum_note(DrumType::HighTom), 127 / 2, 0, 100, 64); return get_drum_note(DrumType::HighTom); } else if step % 16 == 13 { send_note(get_drum_note(DrumType::Clap), 127 / 2, 0, 100, 64); return get_drum_note(DrumType::Clap); } else if step % 16 == 13 { send_note(get_drum_note(DrumType::Cowbell), 127 / 2, 0, 100, 64); return get_drum_note(DrumType::Cowbell); } send_note(get_drum_note(DrumType::ClosedHH), 127 / 2, 0, 100, 64); get_drum_note(DrumType::ClosedHH) } /// bangaz_2: Kasm Bangaz Drummer Pattern 2 - wild polyrhythms and syncopation pub fn kasm_emanator_bangaz_2(_inlet_0_note: i32, _inlet_1_semitone: i32, velocity: i32, _enc1: i32, _enc2: i32, step: i32, _bar: i32) -> i32 { // Kick: every 3 steps (triplet feel) if step % 3 == 0 { send_note(get_drum_note(DrumType::Kick), velocity, 0, 100, 40); } // Snare: every 5 steps (cross-rhythm) if step % 5 == 2 { send_note(get_drum_note(DrumType::Snare), velocity, 0, 100, 90); } // Closed HH: every step, but accent every 7th if step % 7 == 0 { send_note(get_drum_note(DrumType::ClosedHH), velocity, 0, 100, 64); } else { send_note(get_drum_note(DrumType::ClosedHH), velocity / 2, 0, 100, 64); } // Open HH: syncopated, every 6th step if step % 6 == 3 { send_note(get_drum_note(DrumType::OpenHH), velocity / 2, 0, 100, 64); } // Toms: staggered if step % 8 == 4 { send_note(get_drum_note(DrumType::LowTom), velocity / 2, 0, 100, 64); } if step % 10 == 7 { send_note(get_drum_note(DrumType::MidTom), velocity / 2, 0, 100, 64); } if step % 12 == 9 { send_note(get_drum_note(DrumType::HighTom), velocity / 2, 0, 100, 64); } // Clap: offbeat if step % 16 == 5 { send_note(get_drum_note(DrumType::Clap), velocity / 2, 0, 100, 64); } // Cowbell: rare accent if step % 16 == 13 { send_note(get_drum_note(DrumType::Cowbell), velocity / 2, 0, 100, 64); } 0 } /// bangaz_3: Kasm Bangaz Drummer Pattern 3 - extravagant, musically correct polyrhythms pub fn kasm_emanator_bangaz_3(_inlet_0_note: i32, _inlet_1_semitone: i32, velocity: i32, _enc1: i32, _enc2: i32, step: i32, _bar: i32) -> i32 { // Kick: every 4 steps, but double on 12 and 13 (extravagant fill) if step % 4 == 0 || step == 12 || step == 13 { send_note(get_drum_note(DrumType::Kick), velocity, 0, 100, 50); } // Snare: displaced, every 6th and 14th step if step % 6 == 3 || step == 14 { send_note(get_drum_note(DrumType::Snare), velocity, 0, 100, 100); } // Closed HH: every step, but accent every 5th and 11th if step % 5 == 0 || step == 11 { send_note(get_drum_note(DrumType::ClosedHH), velocity, 0, 100, 80); } else { send_note(get_drum_note(DrumType::ClosedHH), velocity / 2, 0, 100, 64); } // Open HH: every 7th and 15th step if step % 7 == 0 || step == 15 { send_note(get_drum_note(DrumType::OpenHH), velocity / 2, 0, 100, 64); } // Toms: polyrhythmic, staggered if step % 8 == 2 { send_note(get_drum_note(DrumType::LowTom), velocity / 2, 0, 100, 64); } if step % 9 == 4 { send_note(get_drum_note(DrumType::MidTom), velocity / 2, 0, 100, 64); } if step % 10 == 6 { send_note(get_drum_note(DrumType::HighTom), velocity / 2, 0, 100, 64); } // Clap: displaced accent if step % 16 == 7 || step == 10 { send_note(get_drum_note(DrumType::Clap), velocity / 2, 0, 100, 64); } // Cowbell: rare, on 1 and 15 if step == 1 || step == 15 { send_note(get_drum_note(DrumType::Cowbell), velocity / 2, 0, 100, 64); } 0 } ... full source code is here https://maxforlive.com/library/device/12909/kasm-rust-ableton-wasm-source-code |
Details
Live Version Used: | 12.2 |
Max Version Used: | 9.0 |
Date Added: | Jul 25 2025 12:43:54 |
Date Last Updated: | Aug 11 2025 23:27:26 |
Downloads: | 177 |
ⓘ License: | None |
Average Rating
Log in to rate this device |
-n/a- |
Files
Device File: | Kasm Bangaz.amxd |
Login to comment on this device.
Browse the full library