Start a new topic

Orba hacking knowledge base

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


27 people like this idea

@BJG145 Brilliant! I love the idea of dual Orbas. I'm not sure but if you plug them both into USB, you might be able to control them both from the Orba Virtual Piano.


On another note, when I finish the Editor, I can get you more information on how to work with the Base64 strings. I bet in the future we could quantize the song data.. Progress has been pretty good the last two days.. The Chord Editor is pretty much done and just starting on the Scale editor coding today. I'm trying to establish the data format for the orba-scales.json file. I think it will look like this:


  

{
	"majorMode": {
	    "standard": [
	      {"Ionian": [0,0,0,0,0,0,0,0]},
	      {"Dorian": [0,0,0,0,0,0,0,0]},
	      {"Phrygian": [0,0,0,0,0,0,0,0]},
	      {"Lydian": [0,0,0,0,0,0,0,0]},
	      {"Mixolydian": [0,0,0,0,0,0,0,0]},
	      {"Aeolian": [0,0,0,0,0,0,0,0]},
	      {"Locrian": [0,0,0,0,0,0,0,0]}
	    ],
	    "custom": [
	      {"Hang Drum": [0,0,0,0,0,0,0,0]},
	      {"Minor Tezeta": [0,0,0,0,0,0,0,0]},
	      {"Abassel": [0,0,0,0,0,0,0,0]}
	    ]
	  }
	},
	"minorMode": {
	    "standard": [
	      {"Ionian": [0,0,0,0,0,0,0,0]},
	      {"Dorian": [0,0,0,0,0,0,0,0]},
	      {"Phrygian": [0,0,0,0,0,0,0,0]},
	      {"Lydian": [0,0,0,0,0,0,0,0]},
	      {"Mixolydian": [0,0,0,0,0,0,0,0]},
	      {"Aeolian": [0,0,0,0,0,0,0,0]},
	      {"Locrian": [0,0,0,0,0,0,0,0]}
	    ],
	    "custom": [
	      {"Hang Drum": [0,0,0,0,0,0,0,0]},
	      {"Minor Tezeta": [0,0,0,0,0,0,0,0]},
	      {"Abassel": [0,0,0,0,0,0,0,0]}
	    ]
	}
}

  


1 person likes this

Cool. By the time you've finished you could probably create your own controller...!


https://www.youtube.com/watch?v=6K_tt-U5wqY


(There have been two attempts at MIDI handpans on Kickstarter. The Oval was discontinued and is now quite rare; the Lumen hasn't made it into commercial production yet. You won't find either of them for less than several hundred dollars, but those piezo sensors cost peanuts.) 


https://www.kickstarter.com/projects/2101519704/oval-the-first-digital-handpan

https://www.indiegogo.com/projects/lumen-the-electro-acoustic-handpan#/


"I'm trying to see if I can convert a Bass or Lead sound to a Chord sound. I guess the real question is what makes a preset start using the ModifierData?"


@Subskybox, that's an interesting experiment. I've been comparing the Lead and Chord versions of the Cartridge patch, and I've found that just copying the first ModifierEntry and the first SeekerEntry across from the chord XML to the lead is enough to get chords out of the lead...but not the ones you'd expect. You can then adjust them by also copying that  "intervals" string, eg


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


It's the first time I've heard any result from changing those values.


1 person likes this

The Orba UpdateUtilities folder contains "artiphon_esp32_programmer", so that's presumably the board it's based on.


There are tutorials for setting this up with the Arduino IDE and programming it. I guess it theory it would be possible to create a new open-source firmware from scratch.


https://www.youtube.com/playlist?list=PLzvRQMJ9HDiQ3OIuBWCEW6yE0S0LUWhGU


I didn't say it would be easy. ;-)


...correction...looking at the TuningEntry section...


  <TuningEntry key="C" name="Major" intervals="P1, M2, M3, P4, P5, M6, M7, P8"

               midiOctave="2" transpositionType="RetainNotes" type="tonal" tuning="48, 50, 52, 53, 55, 57, 59, 60"/>


...I've realised it was changing "Major Pentatonic" (the original setting in the lead file) to "Major" (like the chord file) that altered the chords as described above. I still don't know what the intervals do if anything.


1 person likes this

I've also now realised that just copying the first "SeekerEntry" from the chords preset to the lead one, without any other changes, is enough to produce chords from Lead button.

(...although, strangely, that works consistently on one of my Orbas but not the other. Can't see any difference between them, but with the second one that manoeuvre just kills the chords.)

I'm not sure how that works either.. I've tried:


  <TuningEntry key="C" name="Custom" intervals="P1, M2, M3, P4, P5, M6, M7, P8"


to see if that would make the Orba grab those intervals. The Fiddler and Editor should probably strip "Pentatonic" from the file because that alters the root notes for each pad. It applies the chord offsets to the Pentatonic versions of the Major/Minor scales.


I've been curious what those "Seekers" actually do. I've found I can move a Chord voice into the Leads folder and it will take the synth settings from the previous voice. For example, I think I copied 1981 from Chords to Leads and renamed it 1981_2. I then loaded the "Faux" sound from Leads and then the 1981_2 sound right after. I believe it kept the Faux sound but added the Chords as described in 1981.

mode and synthMode seem to have something to do with the sound being used when you switch a preset from one folder to another.

  <SoundPreset name="">
    <SynthPatch mode="Lead" synthMode="0"

 

Some XML comparisons


Everything generally has a set of <ModifierEntry> containing:


modifierData

modifierUuid

gestureUuid

uuid


...and a set of <SeekerEntry> containing:


seekerData

seekerUuid

uuid


We've only got a result from the first entry in the mofidier list so far; we don't know why there are several, but for now I'm just looking at the first one across three presets ("All Out", "Cartridge", "Lead"). 


We know that modifierData controls chords. We don't know what seekerData does, if anything, but copying seekerData entries from chord files to lead ones causes the Lead button to play chords. (At least it does on one of my Orbas, but not the other; can other people recreate that?)


The Uuids (identifiers?) sound as if they might be used as keys to match up different data keys perhaps. 


So far I've noticed the following:


1) The Seeker uuid always matches the Modifier uuid within a preset. The values change between preset types (eg Drums/Bass/Chords). When comparing different presets of the same type, the values sometimes vary, sometimes not. Eg it's the same for "Cartridge Lead" and "Ohm Lead", but different for "All Out Lead". Ditto for bass. All the Drum ones are the same, and all the Chord ones are different. 


I'm not sure if the actual value matters, or whether it's just a lookup key. I suspect that presets may contain data that's not actually relevant for the type, so the fact that they vary across Chord presets but not Drum presets might be a clue that the Seeker keys are only relevant for chords.(?)


2) The value of modifierUuid is the same across all three presets for Lead/Drums/Bass. The chords have a different value, which is the same across all three chord presets. 


3) The value of seekerData follows the same pattern as modifierUuid; the chords all have one value, everything else has another.


4) The value of gestureUuid is the same everywhere 


It looks it looks as though these Modifier/Seeker keys have special relevance for the Chord type.


Based on the above, I thought I'd test a theory that the 7th chords preset would have a different "seekerData" value to the others, but it matches all the above.


*************************************************************************************************


Looking at the 7th chords file, it's noticeable that the first <ModifierEntry> in the list has the different modifierData info we've identified as chord data, but everything else in that list looks 'blank' by comparison.


Wit the <SeekerEntry> list, it's the opposite; the seekerData value for the first entry looks like the blank template seen everywhere else, whereas everything else in the list is different.


So, we're back to the mystery of why there's a list of values, what the other ones do if anything, because they seemed to have had no effect when we were first untangling the chord data.


With the remaining entries in these lists, the two "uuids" continue to match; I'm sure it's just a cross-reference, so every ModifierEntry has a corresponding SeekerEntry.


I think it's also worth investigating the Song files to try and shed some light on this. These have a section for for each preset type. I'm not sure if the preset files are used when loading a song file...? Would be simplke to test that. It's odd that the data in the preset files doesn't closely match the data in the corresponding section of the song file. 


But I think there's probably a lot of stuff that just isn't needed; for instance, each section in the "Song" file has a "quantisation" setting. Sore point, I know, and it doesn't seem to do anything. I expect parts of the code are redundant; inactive, but there may be undiscovered sections that could bring features like the custom chords to life.

>Just pushed up a first crack at the Editor into a separate branch


Thanks @Subskybox, just taking a look. I'm not sure what's meant to happen when you click the "Download" button...tried Edge/Chrome but I don't think it's doing anything. I can't find the file in the Downloads folder.

...love the way it automatically changes from chords to lead when you change the mode on the Orba...

...Seeker observations continued...


I was was still able to load a Song after renaming the associated Preset subfolders, and it seemd to make no difference. So, I think the Presets are just for separating out the different parts of the Song to enable mix & match...? But confusingly the Modifier/Seeker sections are quite different. The Song versions are much more streamlined, and I suspect the additional stuff in the Preset files has no purpose.


For instance, in the Lead preset for "All Out", there are nine Modifier entries with matched Seeker entries. But in the Lead section of the Song file, the modifier list is empty. The nine Seeker entries are still there, but are they actually doing anything...?


The other Lead and Bass examples followed the same pattern.


For the Drum presets, these have a shorter list of four matched Modifier/Seeker entries. But again, if you look at the relevant section of the Song file, the Modifier list is blank.


The Chord preset files have a list of eight matched Modifier/Seeker entries. As usual, the relevant section of the Song file still has all the same Seeker entries, but this time, the Modifier list has a single entry - the one that we've found actually makes a difference if you change it in the preset file.


Based on this, my theory is that the first Modifier and Seeker entry in the Chord preset files (and the corresponding section of the Song files) have an effect. But I don't think the rest of the list for the Chords does anything, and I don't think it's relevant for anything except chords.

It's interesting that to change sounds, you need to load a preset, but you can change the key on the fly via the App. It's sending some kind of data directly/immediately. I was wondering if it might be possible to somehow access the file system on the ESP32 and read/change data on the Orba directly. 


https://www.espressif.com/sites/default/files/documentation/esp32_technical_reference_manual_en.pdf


I'm still trying to get the computer to talk directly to the ESP32. I'm interested in seeing whether I can flash it with some completely different program and then restore the original firmware again. There's a couple of different varieties of the card which need different drivers and I'm tempted to take "Orba hacking" literally by opening it up to check the electronics, but I haven't quite reached that stage yet. Maybe soon though if I can't get it working. :-)

    

Login or Signup to post a comment