This thread is intended to gather the feedback of Orba tinkerers.
Ok here is version 1 of my Orba Preset Editor. It's written in LiveCode which you will need to run the app. (Get LiveCode free from https://livecode.org/download-member-offer/).
I can't get the images to work as I cannot work out how the uuid and CoverImageHash are calculated, if you know then let me know.
Get the Orba Preset Editor on Github at https://github.com/Batninja/Orba-Preset-Editor
Any preset can be turned into its diatonic version by replacing the TuningEntry as follows
<TuningEntry key="C" name="Major" intervals="P1, M2, M3, P4, P5, M6, M7, P8" midiOctave="3" transpositionType="RetainNotes" type="tonal" tuning="60, 62, 64, 65, 67, 69, 71, 72"/>
Orba presets can be found under the paths
Presets are XML files, where a bunch of undocumented (at least for now) parameters drive the synth engine. e.g.
<SynthPatch mode="Bass" synthMode="0" octave="255" osc1Multiplier="2" osc1Detune="0" osc1Mix="255" osc2Multiplier="3" osc2Detune="1" osc2Mix="170" ringMod="255" noiseMix="56" osc1Vibrato="1" osc2Vibrato="1" osc1Ramp1Start="108" osc1Ramp1End="207" osc1Ramp1Time="70" osc1Ramp2Start="162" osc1Ramp2End="255" osc1Ramp2Time="107" osc1Ramp3Start="192" osc1Ramp3End="131" osc1Ramp3Time="40" osc2Ramp1Start="120" osc2Ramp1End="0" osc2Ramp1Time="36" osc2Ramp2Start="108" osc2Ramp2End="255" osc2Ramp2Time="93" osc2Ramp3Start="37" osc2Ramp3End="0" osc2Ramp3Time="14" ampEnvAttack="1" ampEnvPeakVelocity="53" ampEnvDecay="95" ampEnvSustain="118" ampEnvSustainVelocity="65" ampEnvRelease="27" ampEnvReleaseVelocity="0" filterEnvAttack="1" filterEnvPeakVelocity="113" filterEnvDecay="83" filterEnvSustain="112" filterEnvSustainVelocity="147" filterEnvRelease="25" filterEnvReleaseVelocity="0" wgMode="0" wgPitch="1" wgRegeneration="203" wgDampOnHold="251" wgDampOnRelease="228" wgMixBack="0" wgMixForward="0" wgLFOMod="0" filterMode="0" filterCutoff="0" filterCutoffKey="0" filterCutoffEnv="49" filterResonance="67" lfoRate="156" outputLevel="10" reverbLevel="0" effectSelect="0" effectDepth="0" effectParam1="0" effectParam2="0" modSource1_1Destination="0" modSource1_1Weight="1" modSource1_2Destination="0" modSource1_2Weight="0" modSource1_3Destination="0" modSource1_3Weight="0" modSource2_1Destination="9" modSource2_1Weight="13" modSource2_2Destination="8" modSource2_2Weight="41" modSource2_3Destination="0" modSource2_3Weight="13" modSource3_1Destination="0" modSource3_1Weight="16" modSource3_2Destination="1" modSource3_2Weight="24" modSource3_3Destination="5" modSource3_3Weight="6" modSource4_1Destination="0" modSource4_1Weight="18" modSource4_2Destination="5" modSource4_2Weight="11" modSource4_3Destination="0" modSource4_3Weight="0" delayLevel="10"/>
Once created a copy of a default preset, you can fiddle with these parameters and create new sounds. [Try at your own risk. The function and the range of those parameters is unknown a priori, so try only if you really think you know what you are doing]
Documentation of the XML and/or a side App to allow us to export/import presets would be VERY NICE!
I wanted to give a shout-out to @AndreaMannoci, @QuadPlex and especially @BJG145!
I've had my Orba for about a month and immediately wanted to edit chords, which lead me to this forum. @BJG145 has made some major discoveries. Without these, I would never have built or figured out what I'm sharing with everyone. To summarize chord findings, @BJG145 made a series of important discoveries. First that a series of characters in the modifierData string affected notes in the chords in various unpredictable ways. Also noted was that each 5 characters in the string of 40 seemed to control pads 1-8 in sequence. And finally, another important finding that the next 40 characters seem to have an effect on the chords as well.
@BJG145 was right — mostly. I realized that to get to the bottom of what these values actually do, it was going to take tools. The process of changing the values and hearing that something had changed was not enough. On top of that the process of trial & error was very slow which involved lots of cutting & pasting, renaming files and switching between applications. So, I built some tools which I am sharing below. I had a Copernican moment after using these tools and discovered that the character ranges that @BJG145 outlined were mostly correct but actually offset by one. The sequence of characters actually starts one character earlier. I also came to realize that the second set of characters does indeed have an effect but not a combined effect as imagined. What I discovered is that the first set of characters define the Major chords and the next set of characters define the Minor chords.
I have built 3 tools:
All of these tools are in my repository located here:
You can scroll down to see a demo of the tools and download the repository by clicking the green 'Code' button and then choosing 'Download Zip'
@BJG145 these are extremely interesting findings! Especially on the part of how sending an 'incomplete' xml file will still allow the Orba to implement just those changes to whatever sound is currently loaded, basically only overwriting certain aspects in the synth engine, instead of the whole sound every single time. This could massively clean up my Presets, as I don't have to havw two of every e.g. Lead sound (penta- and diatonic), but just the base sounds in pentatonic, with one preset to switch any of them to diatonic.
On behalf of deciphering the structure of the chords, have you tried to interpret the string values using a Hex Editor? It might be that the String representation is misleading and the inherent info lies in the way that string is stored. Just food for thought.
@Artiphon, @Evan, if you're listening, p l e a s e give us documentation to modify sounds/chzords/tunings! The Orba would immediately be seen as a much more capable device, people would make more videos about it, there's nothing that could go wrong for you. As it stands, this device is barely using half of its potential
Preset images are loaded as Base64 encoding of the image; if you copy the string and paste it here (https://www.base64decode.net/base64-image-decoder), you'll get back your image.
So if you want to add a custom image, you need to follow the inverse process (https://www.base64encode.net/base64-image-encoder).
I have not tried yet though... not sure what's coverImageHash
When you copy a preset into Orba folders it will be loaded immediately and visualised in the Orba app.
However, once copied there, @Sam realised that it won't pick up any further change.
To force the app to reload the preset (and the latest changes), it suffice to rename the preset file.
One thing I think I have noted is that altering the "WG" parameters will alter the character of the sound in general as well as on Tilt. wgMixBack="0" wgMixForward="0"are places I have found some interesting effects.
What I want to get more info on and experiment with is the ModSource area. this seems doable but I have not gotten any useful results as of yet.
I've been tinkering with the drum presets and made a mix of the standard presets:
Orba (03 05), Bedroom (01 02), Boomy Booms (04), Cartridge (06 07), Eyes Closed (08 Bump).
Maybe it can already be read somewhere, if not you will find it here:
1 = DrumPatch 1 (index = "0")
2 = DrumPatch 2 (index = "1")
3 = CymbalPatch 1 (index = "0")
4 = CymbalPatch 2 (index = "1")
5 = DrumPatch 4 (index = "3")
6 = DrumPatch 5 (index = "4")
7 = CymbalPatch 3 (index = "2")
8 = ShakerPatch
Bump = DrumPatch 3 (index = "2")
I think the real question is why hasnt the app been changed to allow the addition of sounds by now. This could be a great controller. Currently its just a nice addon.
Thanks for the feedback. I like the idea of showing the notes, but the way the modifier actually works is a series of 4 relative offsets from the root note which comes from the scale notes (Major or Minor). For example, for Pad 1 in C Major the root note is C. Each chord has exactly 4 voices so the offsets for Chord/Pad 1 for the Major scale are [0,7,12,16] or [C,G,C,E]. For the C Minor chord they use [0,3,7,0] or [C,E♭,G,C]. Notice the 2 zeros in the Minor chord offsets. Two voices are playing the same note so it sounds like a 3 note chord.
I do have a dev version of the Chord Fiddler tool that allows to modify values outside of the Major/Minor character areas. I've messed with them and many of them cause the Orba to crash and have completely made the Chord Mode unusable. I elected not to release that since it could maybe brick someone's device. I was able to recover by loading a full song which appears to re-write all the required values back.
I would be careful with the Chord Fiddler that I've published. I've since learned that the way I change the characters is totally wrong. I am allowing the user to pick any ASCII values and this will lead to problems. Instead stick to the Base64 Character set which I now know is how it needs to be.
I'm planning to correct the Fiddler first as I think this might only need a few hours of work. But I have a good plan now for the Orba Virtual Piano which will include Chord buttons and will send the altered chord notes directly to the Orba so you can hear them as you adjust. This is going to take more work and may have to wait a bit.. My wife says I'm spending too much time with Orba :P
I also had another realization. If I change all the offsets to zeros (i.e. [0,0,0,0]), that will essentially play the same note four times. This could be used to set the scale of a regular sound like Bass or Lead. I tried this by dumping a Chord sound into the Bass Preset folder and it only plays one of the voices from the chords. Once I have the Fiddler updated, it could also work for regular voice scales! AND it would be able to be transposed not like the "percussion" hack that has been shared. I'll hopefully have some updates in the next week or two.
I don't know if someone has a use for this: Orba + Chill presets with fixed 32 bars instead of maximum 8 bars.
And I don't know if there is a maximum of fixed bars or if it hurts your Orba.
Open song in a texteditor. Search and replace the value after "nBars="
I've made updates to the git repo. The tool is working quite nicely now. I've done some testing this afternoon.