Start a new topic

Orba hacking knowledge base

This thread is intended to gather the feedback of Orba tinkerers.

27 people like this idea

The other thing I was wondering is whether it was possible to hack the app in the same way as the XML. It seems to work; I was able to change the text in the Settings window. It might possibly provide a way to control options that are inaccessible from the XML.

Just to clarify the timing of the performance:

click - on

click - off

click - on

click - off

click - on


click - off


click - on


click - off


click - on



click - off

click - on



click - off


I also had a scour of the application itself and found lots of xml. Here is a sample:

<TuningEntry name="Major" type="tonal" intervals="P1, M2, M3, P4, P5, M6, M7, P8"/>

If you mess with that intervals list in the app code, and load a preset set to a major scale, it changes it.

So...that's at least one thing where we've found no result from changing the XML in the preset, but it has an effect if you change it in the app code.

Every note value (62=D4) has a value of 16 three places before it, with the first 16 being the start of the data. Perhaps this represents the "Play a note" event or the MIDI channel number. It looks like eventData bundles note-on and note-off into a single entry which includes timing, note, duration, attack velocity and release velocity...?

@Subskybox pointed out a set of tuning entries in the app code.

 <TuningList category="tonal" keySelection="true">

      <TuningEntry name="Major" type="tonal" intervals="P1, M2, M3, P4, P5, M6, M7, P8" />

      <TuningEntry name="Natural Minor" type="tonal" intervals="P1, M2, m3, P4, P5, m6, m7, P8" />

      <TuningEntry name="Harmonic Minor" type="tonal" intervals="P1, M2, m3, P4, P5, m6, M7, P8" />

      <TuningEntry name="Melodic Minor" type="tonal" intervals="P1, M2, m3, P4, P5, M6, M7, P8" />

      <TuningEntry name="Major Pentatonic" type="tonal" intervals="P1, M2, M3, P5, M6, P8, M9, M10" />

      <TuningEntry name="Minor Pentatonic" type="tonal" intervals="P1, m3, P4, P5, m7, P8, m10, P11" />


      <TuningEntry name="Dorian" type="tonal" intervals="P1, M2, m3, P4, P5, M6, m7, P8" />

      <TuningEntry name="Phrygian" type="tonal" intervals="P1, m2, m3, P4, P5, m6, m7, P8" />

      <TuningEntry name="Lydian" type="tonal" intervals="P1, M2, M3, A4, P5, M6, M7, P8" />

      <TuningEntry name="Mixolydian" type="tonal" intervals="P1, M2, M3, P4, P5, M6, m7, P8" />

      <TuningEntry name="Locrian" type="tonal" intervals="P1, m2, m3, P4, d5, m6, m7, P8" />


Let's take a closer look at this. The entry for the Major scale is:

intervals="P1, M2, M3, P4, P5, M6, M7, P8"

The entry for the Mixolydian scale, which has been commented out, is:

intervals="P1, M2, M3, P4, P5, M6, m7, P8"

Myxolidan is Major with a flattened 7th. This suggests that using "m" instead of "M" (the only difference here) means: "flatten this note". This is confirmed by the entry for the Dorian, which is Major with a flattened 3rd and 7th.

intervals="P1, M2, m3, P4, P5, M6, m7, P8"

Most of the eight-note scales follow the same pattern as the Major:

P1, M2, M3, P4, P5, M6, M7, P8

The sequence is: P M M P P M M P, with 1-8.

I haven't tried to figure out what some of the outliers like "A4" and d5" mean, but they all seem to be implemented. If you substitute the intervals entry for "Major" with the one for "Locrian", then load a Lead preset set to the Major scale, you get a Locrian scale.

If you edit the "Major" entry in the app code, you also have to have "Maj" selected in the App. Occasionally I've had to change it to "Min" then back to "Maj" to make sure it grabs the right setting.

The minor scale that the Orba usually plays is the Natural minor. If you edit the app code, grab the intervals list for eg the Harmonic minor, and use it to substitute the Natural minor entry, then you get the Harmonic minor instead.

So, for example, I currently have my Orba set so that clicking the "Min/Maj" button in the edited version of the App actually switches between Lydian and Phrygian, with working transpose.

It's curious that these "scale presets" are defined in the app, but the usual XML presets don't respond to them. If you simply try to reference one of these alternative scales in a Lead preset it doesn't seem to do anything. I guess it comes down to the fact that the app only has its "Min/Maj" button; you can choose Major or Natural Minor, nothing else. 

It seems Artiphon originally intended to provide a selection of scales, then decided to keep it simple. 


I was recently looking at an early interview with Artiphon in Sound On Sound back in 2014.

"I really wanted to discover the pain points in music-making and why most people don’t play music. High learning curves for traditional instruments, not enough time, fear of playing a wrong note... music-making can be intimidating. And yet we’re finding that people feel differently about apps. Hundreds of millions of people are making music with their iPhones and iPads, without worrying about whether they’re musicians or not. Mobile music is growing every day, but you can only do so much with a flat glass screen. Artiphon is designing a multi-instrument interface that’s as flexible and adaptive as the apps it can play. I set out to make an instrument that anyone could start playing and that would grow in complexity as people explore their style."

It explains where they're coming from. They seem to have decided to stick with the "anyone could start playing" idea and forget about the "grow in complexity" bit.

Fair enough. Personally I feel there's a lost opportunity between the appealing hardware and the dumbed-down UI. But I guess they know their market.


I mentioned that simply running the app will recreate the Presets folder structure if it's not there. It recreates the Song folder structure as well. So, all that stuff is in the app code; that's the mother lode. The app can spawn presets with various appealing variables, but with some of these it seems you have to go back to the source to make a difference.

























Incidentally, changing those entries in the app seems to affect bass, leads and chords. Getting some pretty zany loops out of my Orba now. ;-)

(I'm actually finding this quite a cool way of noodling around on the various scales and getting a feel for them.)

I forgot to include the LoopData in the "Lead Test" .csv posted previously (which looked at different simple patterns of repeated notes). Here's an updated version with this added.


>"The Orba data has a 0 which I think may represent the Note On event, followed by MIDI note"


I've also realsed that these "0" values are what I called "Duration" in the next test I posted, which looked a durations of 1, 2 and 3 clicks. The value in those were 1, 3 and 5 respectively. In the "Lead test" the notes were very short taps resulting in a 0 value.

I've relabelled them as "Duration-related"; not sure exactly what they represent yet. 


There are different ways of measuring time. You can say, "Start at X, and end at Y". Or you could say, "Start at X, for duration Z".

I was starting to wonder whether the timings in eventData were absolute or relative. It looks as though each note event is a block of 8 values from the beginning of the list, with no header.

1)  16 (Tap note command?)

2)  +ve and -ve (?)

3)  Low +ve (?)

4)  Note value

5)  Attack velocity

6)  Release velocity

7) -ve (?)

8) Low +ve

I was looking at the "Memidex" list in console, which also shows blocks of 8...

MemIdx = 0 - MIDI Note at tick 12, channel 1, note 62, duration 496, von 99, voff 85

MemIdx = 8 - MIDI Note at tick 944, channel 1, note 62, duration 464, von 127, voff 87

MemIdx = 16 - MIDI Note at tick 1908, channel 1, note 62, duration 960, von 121, voff 87

MemIdx = 24 - MIDI Note at tick 3845, channel 1, note 62, duration 996, von 117, voff 80

...and remembered the tip from @Subskybox.

I suspect [eventData] is exact same data from the MemIdx does look like it. The next question is working out what order it's in. Need to test durations that get longer and then shorter again...

...the results are in. This next test is called DPC or Duration Pitch Change. The files are simply:

1) MP3

2) MidiOx screen grab

3) eventData

This test has seven ascending notes:

1) 1/2 are one click long

2) 3/4 are two clicks long

3) 5/6 are one click long 

2) 7 is short

I was main interested in:

1) Whether the first note of the data is the first note of the sequence, and doesn't get bumped to the end. (Previous "Loop Info" console logs had left me wondering. But it's fine, it's in simple order.)

2) Whether the value I've described as "duration-related" would go up and down again. It does. It goes 1, 1, 3, 3, 1, 1. I'm still not sure exactly what it's for, but this is in line with previous results. It seems to be some kind of indicator of duration rounded to the nearest number of clicks.

I'm currently wondering whether the two values following "release velocity" might represent duration as a kind of "fine/coarse" control. That would leave the last two unknowns ( preceding note value) as "fine/coarse" for start-time. 

I think start-time is probably absolute rather than relative, for a couple of reasons; partly because that would fit with the Memidx console info, and partly because when I tried to add a bunch of notes to the sequence in a simple way (by copying and pasting the string data multiple times), they all played at once. 

(595 Bytes)
(591 KB)

@BJG145 said:

  • "It seems Artiphon originally intended to provide a selection of scales, then decided to keep it simple. "

I absolutely agree, although I think the reason they moved away from this is that it complicated the use of Chords. It seems in the early stages that they were planning on offering lots of scales (that were defined from the .orbapreset files), but as we know, chords are defined as a series of offsets from the notes of the selected scale. So, if the user can choose from a whole bunch of scales, the chords would get messed up. The modiferData string lets the user define two sets of chords so I think they made the app limit selection to only two scales. I originally thought that the last bit of the ModifierData string would let you define a third chord set that would be applied if your voice was Pentatonic. I think I tested that but I can't remember anymore. It might be possible to hack the Maj/Min selection box in the app to include more scales. I find it interesting that they commented out some of the modes (e.g. Dorian, Phrygian) but left a number of minor modes active. I tried Melodic Minor in a Preset but it doesn't work. It only responds to Major[Pentatonic]/Minor[Pentatonic]. The good news is that the Editor allows you to apply all these scales AND keep the Chords intact.

On the intervals, there is a standard notation for intervals that I remember from my school days. A = Augmented and d is Diminished. See here.

Re: the "Fine/Coarse" duration control, I haven't fully thought this through, but I'm imagining that there's a "coarse" value that counts whole clicks, and a "fine" value that counts the offset within the final click; or something like that. 

The start-time data could work in a similar way; one value that counts the number of clicks from the start, and another that counts the offset within the final click. Just a theory so far.

On Uuids, I think that unique identifiers have been created to make things easier for development and to speed up data transfer. For example, I think uploading an Artiphon Preset voice with Uuids will upload to the Orba faster than one without (Unproven). I think the App sends the Uuid to the Orba and if it already has a copy of the associated data, then it can skip the transfer. If it doesn't have that reference, it has to transfer the whole body of data. I found that in the Editor, if I didn't delete the Uuids from the new Preset that sometimes the chord/scale changes would not apply.

My next plan of attack is to look more at the other Modifiers/Seekers to see what we might be able to do. I've always been interested in Pitchbend so that might be a starting point. I've hooked up an external MIDI keyboard and the Orba to my laptop in the past and was able to play the Orba via the keyboard. It didn't respond to the Pitchbend wheel (at least for the voices I tried it with). I was disappointed.

Recently, I found this video I hadn't seen before:

This goes over the Gestures at the start and I do believe it is in some ways false advertising. The Slide gesture as a 'Singing Bowl' could be possible but not without hacking and Spin to control Pitch is also not possible. Perhaps with some hacking it could be. I've imagined adding Tilt to a voice to control pitch (not sure if even possible). The idea is that you could get many more notes in a scale knowing that tilting the Orba to its side would flatten all the notes a semitone. Later in this video, they show arpeggios. I do believe that maybe these had been planned for in the past and that this is what the <PatternList> and <PatternEntry> nodes were for. I haven't messed around with these.

@BJG145 Congrats on the App edits. It would be great if you could find the default quantization setting and flip it back on. Even if its buggy, it would be cool to try.

Looking at the eventData for the last test, it's interesting that every note value is preceded by a 7, except the first one. That makes me think the theory above isn't quite right.

Sooo I'm guessing that they still have not loaded a file load system to put in my own sounds?

Login or Signup to post a comment