STROM for iPad


#1054

that’s a zero chance unfortunately, would rather go with a new app :slight_smile:

When I started working on Strom, the sampling part wasn’t meant to end up as a playable instrument, just a simple recorder/editor for Rytm samples.

the code grew organically and it’s not easy to make major changes.


#1055

Can I pre-order your potential new app?:yum:


#1056

soon(ish(ly))


#1057

Cool thanks for quick reply.


#1058

Strom is so awesome. I’m curious about how the pattern generator works codewise. Could you describe how it works out the patterns? (Sorry if the question has been asked before. Long thread…)


#1059

thanks! :slight_smile:

there’s a bunch of midi sysex commands which can request data (patterns, kits etc) from the Rytm. What you get is the same sysex data that’s used for backups with c6.

I’ve reverse engineered that data so that it can be edited, and created object-oriented wrappers around the data so it has getters/setters for trigs, p-locks etc…

patterns especially are relatively complex & large structures (compared to most sysex) - they’re around 15KB.

The second part is a wrapper around the midi communication. Asking for a pattern consists of sending a request, and waiting for a response… this is wrapped into an asynchronous request/callback mechanism for all the Rytm data structures. Feels less like midi now, more like sending a network request.

so basically, when strom adds trigs to a pattern, it asks the Rytm for the current pattern, receives it, calls some functions on it, and sends the data back.

This is all done in Objective-C…
recently I’ve written another layer on top of that which translates these ObjC objects to JSON and back, and exposes this as a http REST API, so it’s now pretty easy to program the machine in JavaScript in the browser.


#1060

here’s an example. Just activates the first step on track 1 of the current pattern.

In ObjC:

[code][ARRequest requestWithKeys:@[@“pat.x”] completionHandler:^(NSDictionary *dict) {

          ARPattern *pattern = dict[@"pat.x"];
          [pattern setTrig: ARTrigMakeDefault() atStep: 0 inTrack: 0];
          [pattern send];
                 
   } errorHandler:^(NSError *err) {
      DLog(@"something went wrong: %@", err);
   }];[/code]

and here’s the same thing in JS:

ar.get('pat.x').then(res => { pattern = res['pat.x'] pattern.tracks[0].steps[0].on = true ar.post(pattern) }) // error handling omitted

there will be news soon with regards to the Javascript things!


#1061

reading your post again, think you’re more interested in how the pattern generator creates rhythms…?

that’s basically the good old Euclidean thing… trying to evenly distribute a number of steps (lets say 9) over a number of slots (lets say 16), rounding to the nearest slot. That way it’s creating a relatively regular, yet varied pattern. Then, if you have multiple tracks selected, it will cycle through these tracks on each step, so that rhythm is sort of spread across a number of instruments… kind of like a drummer would move a hand between drums, hitting a different one each time.


#1062

My youngest took a shine to my last iPad and stole it (he’s 2 so I forgive him :slight_smile:).

Anyway just bought a new iPad so strom will be the first new app added. Looking forward too it!


#1063

It’s always interesting to get the full scoop, so thanks for a generous explanation. Yes, i was curious about the rhythm creation, especially the multiple part. Would it be too far off to compare the drum part distribution to a note arpeggiation? Anyway, thanks again for letting us in on the details!


#1064

yea it’s a quite like an arp! just arps tracks instead of notes…

a proper melodic arp for the Rytm would be fun though… hmmmmm :grin:


#1065

Hey void how’s this coming along?
I’d love to have random on the scenes, that would be fabulous :open_hands:t3:


#1066

hey!
yeah so basically, no real update on specifically this. Technically it’s not an issue at all, it’s just that randomizing scenes gives in most cases useless results.

I.e. it’s quicker to get to something useful/good by setting them up manually instead of randomizing, testing, discarding, repeat…

there’s this other thing tho
e.g. often you end up with p-locked sounds which are good… by randomly recording p-locks or whatever. But you can’t save them!
Working on a thing which has a features that solves this - you can choose whether to save a p-locked sound into a track, the sound pool, or adding the locks into a scene / perf macro.

Other translation-type things like this may come up as well…

However, most likely not part of the strom app! Don’t feel good about adding more IAP things…


#1067

The idea of saving plocks to the soundpool is a great idea.
Everything is pretty much covered in strom, which is remarkable really. I’m really enjoying the pattern page now :heat:


#1068

This sounds so useful! Would absolutely love that.

Had Strom for a while but have only just been able to update my iPad to use Wirelessly, as USB wasn’t always possible due to OB.

Just spent the whole day learning. It’s absolutely great. Really inspiring, fun and has some many useful applications in live situations too.

Thank you @void - look forward to seeing what happens next!


#1069

One suggestion @void - it would be so handy to have little segments/visual notches on the range bar, so you can easily visualise which of the 16 trigs will have trigs added into the AR sequencer, based on the range set by the left and right markers in Strom

Hope that makes sense? If not I’ll photoshop what I mean


#1070

V[quote=“dave_angel, post:1068, topic:7147”]
Had Strom for a while but have only just been able to update my iPad to use Wirelessly, as USB wasn’t always possible due to OB.
[/quote]

Out of curiosity: do you have STROM working with OB mode enabled? If I try this I have frequent problems with SDS drop loosing its connection, and when it is connected I can e.g. randomise kits but not patterns, and the FN + select tracks to control a parameter also does not seem to work. I have been combing through the different threads here in the forum but haven’t found a solution.


#1071

Yep works fine here!

OSX 10.9
Ableton Live 9

Worked seamlessly once I’d updated my iOS on the iPad (so I could update strom to 1.3 to get access to wifi connectivity).


#1072

Also @void

I would like to buy a midi device and assign one of it’s buttons to the ‘Fn’ Button in Strom. Would that be possible? I have an iRig midi - which I can use to send the midi data into the iPad if so. Would be so handy for my use!

Mainly so I can just hold a tactile button down, while looking at the Rytm and without looking at the iPad, and be able to do a filter sweep on all Rytm tracks


#1073

@void First day fully using Strom was a Breeze - was using it in conjunction with Overbridge and it was working like a charm!

However I’ve since encountered a few problems.

First one was when I tried to record the midi data from FN+Filter cutoff on all tracks - The midi data recorded into Ableton was vastly different to the performance I gave. Is this normal? Or is this feature not possible to do successfully? Shame if so as it’s so handy for the music I make.

Second was yesterday I wasn’t able to get Strom to work at all - or if it did it sent kit or pattern changes extremely late, sometimes up to a minute after the button press?

SDS Drop said it was connected for both SDS and Midi.

Tried restarting the computer, Ableton, SDS and Strom multiple times. Even restarted the wifi router but no luck. I don’t understand what happened really as day one it was used for 8+ hours without a single problem. Yesterday couldn’t get more than 2 button presses out of the connection before the AR stopped responding?