I’m making a patch that requests pattern dumps and stores them in Max to send to the Rytm later.
I can recall 3095 byte kits by this method no problem, but i can’t seem to send stored pattern dumps to the Rytm successfully. I’ve tried slowing the bytes down to 1 per ms , but still nothing is received. I know I’ve sent the right number of bytes (15090) and the bytes I’m sending are correct because C6 sends them successfully to the Rytm.
Are you sure the patterns are encoded properly? Requesting and Sending Sysex requires you to compute checksums. Use the libanalogrytm library on github. My app sends and receives patterns, and there is no need to slow down the sysex.
C6 just sends sysex without caring if it’s valid, so maybe the Rytm is disregarding it because it’s not formatted / encoded properly?
As i remember the problem was the max object that i was using to send and receive sysex. I think the native ones didnt work and i ended up using lh_midiin and lh_midiout. But things may be different now
What’s the question? You need to unpack / decode the sysex to see a stream of numbers which represent actual parameter values. If not, you won’t be able to make sense of it.
Its possible. I don’t think theres any documentation. I got it to work by trial and error when i had way too much time on my hands. What software are you using? I needed a colour coded hex editor (which i had to make) to find the right bytes and work out how they were packed. Its a nightmare tbh
People should just use https://github.com/bsp2/libanalogrytm to decode / encode the sysex. Yes it uses code, but you can probably import c code in maxmsp by now, and it will save you the headache.
OB won’t be of use. You need to be able to receive / send Kit Sysex if you want to affect scenes / performances. I do this by using the linked github library.
It’s not too bad, here is an example of me using the library in Objective-C…you send this function the kit sysex data (stream of bytes) and it uses the library to convert it to a struct that you can then use to get real values of parameters.
// This function accepts the Kit sysex data and uses libanalogRytm to convert and look at values
#define BUF_SIZE (1024 * 1024 * 4u)
- (void)kitFromSysexKitData:(NSArray *)data {
// vars
ar_sysex_meta_t meta;
sU32 datSz;
sysex = malloc(BUF_SIZE * 3);
raw = malloc(BUF_SIZE * 3);
// Copy the data from our incoming array to our sU8 array
for (int i = 0; i < [data count]; i++) {
sysex[i] = [[data objectAtIndex:i] unsignedCharValue];
}
// Convert and check for error
err = ar_kit_syx_to_raw(raw, sysex, (int)data.count, &datSz, &meta);
if (err != AR_ERR_OK) {
MDLog(@"KIT PARSER: Error with ar_kit_syx_to_raw: %d", err);
}
// cast raw to our struct
ar_kit_t *k = (ar_kit_t *)raw;
// At this point you can look at the "k" variable to get all the paramters of a kit as defined in kit.h
// k.tracks[0].synth_param_1, etc
}
Not sure I’d have patience / time for that !
Thanks for sharing.
With Collider, would you be able to create a Perf from 2 kits ?
1 kit as active kit, 1 kit as reference, a Perf applying differences…
A kit to Scene function ?