Device Details


Overview

Name | Version: Kasm Arpeggiator 1.14
Author: kevleyski
Device Type: MIDI Effect
Description: Rust code arpeggiators in Ableton Live!

With canvas visualizer! This is a demonstration of the Kasm Rust SDK arpeggiator feature. This is a basic demo version of a paid version with heaps more patterns and encoder controlled variations, but hey you can also go make your own, grab the Kasm SDK here:
https://pyrmontbrewery.com/get_kasm

Testers of this device get A$25 off of the SDK, in Ableton click the "Kasm Rust" title as shown the image above to get the current coupon code - if you can leave a comment here that's wonderful, but no worries mate

Students also get a 30% discount, use KASMSTU at the checkout

!! 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 Arpeggiator Rust code looks like (Ableton Live and Web version uses identical WebAssembly)...

pub enum ArpeggiatorMode {
Up = 0,
Down = 1,
UpDown = 2,
DownUp = 3,
Random = 4,
Flow = 5,
UpIn = 6,
DownIn = 7,
ExpandingUp = 8,
ExpandingDown = 9,
LowAndUp = 10,
LowAndDown = 11,
HiAndUp = 12,
HiAndDown = 13,
Chord = 14,
Octaves = 15,
UpDownRepeat = 16,
DownUpRepeat = 17,
DoubledUp = 18,
DoubledDown = 19,
Converge = 20,
Diverge = 21,
ConvergeDiverge = 22,
ThumbUp = 23,
ThumbUpDown = 24,
PinkyUp = 25,
PinkyUpDown = 26,
CycleThirds = 27,
SkipOneUp = 28,
SkipOneDown = 29,
OuterToInner = 30,
InnerToOuter = 31,
ReverseFlow = 32,
StaggeredUp = 33,
StaggeredDown = 34,
Bounce = 35,
RandomSkip = 36,
ChordPulse = 37,
OctaveJumpUp = 38,
OctaveJumpDown = 39,
SpiralUp = 40,
SpiralDown = 41,
DoubleBackUp = 42,
DoubleBackDown = 43,
MirrorUp = 44,
MirrorDown = 45,
RandomMirror = 46,
ZigZagUp = 47, // ZigZag Up
ZigZagDown = 48, // ZigZag Down
ZigZagUpDown = 49, // ZigZag Up & Down
ZigZagDownUp = 50, // ZigZag Down & Up
SpiralIn = 51, // Spiral In
SpiralOut = 52, // Spiral Out
SpiralInOut = 53, // Spiral In & Out
SpiralOutIn = 54, // Spiral Out & In
PinkyDown = 55, // Pinky Down
PinkyDownUp = 56, // Pinky Down & Up
ThumbDown = 57, // Thumb Down
ThumbDownUp = 58, // Thumb Down & Up
RandomOctave = 59, // Random Octave
RandomCycle = 60, // Random Cycle
RandomCycleOctave = 61, // Random Cycle Octave
AsPlayed = 62, // As Played
MonoBassline = 63, // Mono Bassline
ArcadeTrills = 64, // Arcade Trills
BouncingFunk = 65, // Bouncing Funk
ChordCycle01 = 66, // Chord Cycle 01
ClassicCycle01 = 67, // Classic Cycle 01
ClassicCycle02 = 68, // Classic Cycle 02
ClassicCycle03 = 69, // Classic Cycle 03
ClassicCycle04 = 70, // Classic Cycle 04
ClassicCycle05 = 71, // Classic Cycle 05
ClassicCycle06 = 72, // Classic Cycle 06
ClassicGroove01 = 73, // Classic Groove 01
ClassicGroove02 = 74, // Classic Groove 02
ComplexChordGroove01 = 75, // Complex Chord Groove 01
ComplexChordGroove02 = 76, // Complex Chord Groove 02
ComplexChordGroove03 = 77, // Complex Chord Groove 03
ComplexChordGroove04 = 78, // Complex Chord Groove 04
ComplexChordGroove05 = 79, // Complex Chord Groove 05
ComplexChordGroove06 = 80, // Complex Chord Groove 06
ComplexChordGroove07 = 81, // Complex Chord Groove 07
ComplexChordGroove08 = 82, // Complex Chord Groove 08
ComplexChordGroove09 = 83, // Complex Chord Groove 09
ComplexChordGroove10 = 84, // Complex Chord Groove 10
FallingGlitch = 85, // Falling Glitch
GroovyCycle01 = 86, // Groovy Cycle 01
GroovyCycle02 = 87, // Groovy Cycle 02
GroovyCycle03 = 88, // Groovy Cycle 03
GroovyCycle04 = 89, // Groovy Cycle 04
GroovyCycle05 = 90, // Groovy Cycle 05
GroovyCycle06 = 91, // Groovy Cycle 06
GroovyCycle07 = 92, // Groovy Cycle 07
GroovyCycle08 = 93, // Groovy Cycle 08
GroovyCycle09 = 94, // Groovy Cycle 09
GroovyCycle10 = 95, // Groovy Cycle 10
GroovyCycle11 = 96, // Groovy Cycle 11
PercolatingAccents = 97, // Percolating Accents
Rolling8ths = 98, // Rolling 8ths
ShiftingPulse01 = 99, // Shifting Pulse 01
ShiftingPulse02 = 100, // Shifting Pulse 02
SimpleChordGroove01 = 101, // Simple Chord Groove 01
SimpleChordGroove02 = 102, // Simple Chord Groove 02
SimpleChordGroove03 = 103, // Simple Chord Groove 03
SimpleChordGroove04 = 104, // Simple Chord Groove 04
SimpleChordGroove05 = 105, // Simple Chord Groove 05
SimpleChordGroove06 = 106, // Simple Chord Groove 06
SimpleChordGroove07 = 107, // Simple Chord Groove 07
SimpleChordGroove08 = 108, // Simple Chord Groove 08
SimpleGroove01 = 109, // Simple Groove 01
Swung16ths02 = 110, // Swung 16ths 02
Swung16ths = 111, // Swung 16ths
SwungChordCycle = 112, // Swung Chord Cycle
SwungChordGroove01 = 113, // Swung Chord Groove 01
SwungChordGroove02 = 114, // Swung Chord Groove 02
SwungChordGroove03 = 115, // Swung Chord Groove 03
SwungChords05 = 116, // Swung Chords 05
SwungDownbeatChords = 117, // Swung Downbeat Chords
SwungGroove01 = 118, // Swung Groove 01
SwungGroove02 = 119, // Swung Groove 02
SwungGroove03 = 120, // Swung Groove 03
SwungGroove04 = 121, // Swung Groove 04
SwungGroove05 = 122, // Swung Groove 05
SwungGroove06 = 123, // Swung Groove 06
SwungGroove07 = 124, // Swung Groove 07
SwungGroove08 = 125, // Swung Groove 08
SwungGroove09 = 126, // Swung Groove 09
SwungGroove10 = 127, // Swung Groove 10
SwungGroove11 = 128, // Swung Groove 11
SwungGroove12 = 129, // Swung Groove 12
SwungGroove13 = 130, // Swung Groove 13
SwungGroove14 = 131, // Swung Groove 14
SwungOffbeatChords = 132, // Swung Offbeat Chords
SyncopatedChords = 133, // Syncopated Chords
TripletGroove01 = 134, // Triplet Groove 01
TripletGroove02 = 135, // Triplet Groove 02
TripletGroove03 = 136, // Triplet Groove 03
TripletGroove04 = 137, // Triplet Groove 04
TripletGroove05 = 138, // Triplet Groove 05
TripletGroove06 = 139, // Triplet Groove 06
TwelveBeatLightlySwung = 140, // Twelve Beat Lightly Swung
TwelveBeatSwungChords = 141, // Twelve Beat Swung Chords
TwelveBeatsCycle01 = 142, // Twelve Beats Cycle 01
TwelveBeatsCycle02 = 143, // Twelve Beats Cycle 02
TwelveBeatsCycle03 = 144, // Twelve Beats Cycle 03
TwelveBeatsCycle04 = 145, // Twelve Beats Cycle 04
Acid01 = 146, // Acid01
Acid02 = 147, // Acid02
Berlin01 = 148, // Berlin01
ThreeFiveSeven = 149, // 357
Cell = 150, // Cell
Minimal = 151, // Minimal
Obliq = 152, // Obliq
RndFew = 153, // RndFew
RndSome = 154, // RndSome
RndMost = 155, // RndMost
RndAll = 156, // RndAll
}

fn generate_note_sequence() -> Vec i32 {
let held_notes = HELD_NOTES.lock().unwrap();
let flow_order = FLOW_ORDER.lock().unwrap();
let mode = *ARPEGGIATOR_MODE.lock().unwrap();

if held_notes.is_empty() {
return vec![];
}

let notes: Vec i32 = held_notes.iter().map(|n| n.note).collect();

match mode {
ArpeggiatorMode::Up => notes,
ArpeggiatorMode::Down => {
let mut reversed = notes;
reversed.reverse();
reversed
},
ArpeggiatorMode::UpDown => {
let mut sequence = notes.clone();
let mut down = notes;
down.reverse();
if down.len() > 1 {
down.remove(0); // Remove duplicate of highest note
}
if sequence.len() > 1 {
down.remove(down.len() - 1); // Remove duplicate of lowest note
}
sequence.extend(down);
sequence
},
ArpeggiatorMode::DownUp => {
let mut sequence = notes.clone();
sequence.reverse();
let mut up = notes;
if up.len() > 1 {
up.remove(0); // Remove duplicate of lowest note
}
if sequence.len() > 1 {
up.remove(up.len() - 1); // Remove duplicate of highest note
}
sequence.extend(up);
sequence
},
...

Details

Live Version Used: 12.2
Max Version Used: 9.0
Date Added: Aug 16 2025 10:49:46
Date Last Updated: Aug 16 2025 11:34:56
Downloads: 42
License: None
Average Rating

Log in to rate this device

-n/a-

Files

Device File: Kasm Arpy.amxd
 


Login to comment on this device.

Browse the full library