Device Details
Overview
Name | Version: | Kasm Bangaz General MIDI version 1.12 |
Author: | kevleyski |
Device Type: | MIDI Effect |
Description: | General MIDI Drum mapping version of Bangaz (Ableton Drum Rack version) Interesting drummer patterns generated by Rust code! Shuffle the drum allocations and reset each drum to any MIDI note allowingfor interesting melodic arpeggiators instead Go edit your own step sequences MIDI note/velocity + CC here: https://maxforlive.com/library/device/12909/kasm-rust-ableton-wasm-source-code !! NOTE: you need the latest Ableton 12.2 for this as it uses the new V8 jsinterp from Max9 !! Kasm is WebAssembly so you can develop and test things in web browser too, go try out Bangaz on the web if you like here which is running the exact same JS/Rust/WebAssembly file as in the Max4Live device - totally unmodified 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: | Aug 01 2025 03:18:15 |
Date Last Updated: | Aug 01 2025 03:29:44 |
Downloads: | 26 |
ⓘ License: | None |
Average Rating
Log in to rate this device |
-n/a- |
Files
Device File: | Kasm Bangaz General MIDI.amxd |
Login to comment on this device.
Browse the full library