Start a new topic

Orba 2 Hacking Knowledge Base

image

This forum is intended to share Orba 2 hacking tips amongst the Orba 2 community. NOTE: Please post facts that are well understood & useful. If you have theories to discuss, please start another forum and link to it here.


2 people like this idea

Yes, I had been trying to make a chord preset which would emulate a mountain dulcimer which has two drone strings and two strings in unison for melodies and is fretted for a diatonic scale.  My attempts failed and I had thought this was either because I had settings for two notes the same or because the overall (or perhaps partial) range was over some limit (possibly two octaves). I discounted the first option, except that it seemed to result in the monophonic effect sometimes. 

I noted that some of the factory presets set two notes the same - so maybe you can get away with two notes set the same , but with three or more you get the error? The range issue I put down to a protection against having a setting that would try and play notes outside the range the Orba can handle.

I have one last idea to try and get what I was trying to achieve but if that fails I will abandon the plan. 


I reported the chords as a second lead preset effect because I felt it could be useful and fairly straightforward to implement.


BJG145 noted a similar sort of thing that made the lead behave like a chord preset. I confess I wasn't sure about that - it seemed unlikely to me that the seeker entry would do that. But I haven't experimented with it - it didn't seem to me to have an advantage to it.

Ah, I've just tried that last attempt I mentioned above. The result works (with lots of pairs of the same notes in the chordLists - it's not quite what I'd hoped but it works (hurray!) and sounds rather nice, but in a different way intended. (There were some compromises to avoid failure.)

My first attempt though sounded very different in the minor. I tried changing the audioEngineMinor parameter in the compatibility section in SynthPatch to match the major sound parameter and hey presto it worked - making them sound the same in tone. (I had not previously expected these parameters to do something like that.)


I will wait a bit and test this out a bit more - just to see if it behaves itself. If it stays good I will post it on the appropriate thread.


1 person likes this

@subskybox - when you made the Clarinet preset how did you determine the loop values? I now understand the concept of frames a bit and am comfortable about finding a value to avoid the first attack of the sound but I wonder if there is anything I need to know to get a clean sounding loop and set an appropriate end point?

I have it mind to make a set (or two) of flute sounds if I can.

From the technical perspective,  I can quote SF2 specification. It is a virtual sampled instruments format,   not the same as in  Orba, but I  had successfully used the same loop points as in original SF2 files and it sounded well, so I suppose the same rules apply.


"The loops are defined by “equivalent points” in the sample. This means that there are two sample data points which are logically equivalent, and a loop occurs when these points are spliced atop one another. "

....

"The eight data points (four on each side) surrounding the two equivalent loop points should also be forced to be identical. By forcing the data to be identical, all interpolation algorithms are guaranteed to properly reproduce an artifact-free loop."

Basically it means that amplitude data (wave "height") at the loop point is the same in the loopStart and loopEnd,  and surrounding frames are  similar as well between two points.


I guess it is mandatory to follow this rule to get a a loop without a click, but still does not guarantee a perfect sounding loop.


As for how exactly to achieve that - I am not sure, sorry, as I have no such experience, but keyword for googling the options would be "sample loop points", as "loop points"  seems to be a common term for this thing.


And, loop parameters in orba are defined in "frames" not "time",  as far as I can see you already got it correctly.

---

P.S.

You might try Polyphone editor for SF2 fonts,  I recall some tool for somewhat automate searching loop points in wav samples  in there, and loop points were shown in frames if I am not wrong. 

(https://youtu.be/keCSodUsj2k?t=166)


@Ignis32 - yes, I had thought loop points might have been time based - but I have learnt better since!

I don't want to use existing sound fonts - I was planning on making my own, and I'm not too keen on the idea of having to figure out about them first.

What you say partly supports what I might have first tried which would be to calculate a start point and try an end point by adding a number that would be a multiple of 16 - that should tie in with what you have suggested. So thanks for that.

I have tried looking at Juce documentation for hints about things like this - but it hasn't really helped much! (And I barely understand most of it.)

It will take a bit of time for me to get round to making the samples so I'll see what else I can find in the meantime.


I almost fell into the trap that bricked your Orba, if I recall correctly. I was trying to make a lead preset from a chord preset - I found the eventSource="Modifier 0 0" caused the Orba to crash and reboot. Luckily it didn't do more than that. I deleted the preset, and edited out that entry before restoring it and all was well.


1 person likes this

@DavidBenton: For the Clarinet, I used Audacity to find the loop points. The start and end points are the Sample#, not Time (as you figured out). You can set Audacity to show the selection range in samples rather than time:

image

What you need to do is just guess roughly the area you want to loop and then press 'Z'. This will move the edges of your selection to the nearest 0 crossings.


image


Next, set Loop to Selection and then play the loop to make sure it sounds clean. You will likely have to repeat this process 4-5 times until you find a clean looping point. Once you do, immediately type these numbers into your .artipreset file for the given sample. It's tedious but it worked for me.



1 person likes this

@Subskybox - Many thanks for that indeed. I use Audacity -  what I was going to try, but haven't tested out yet, was to choose an area then zoom in to see the wave shape and adjust it's start and end to a matching point of the wave shape then take the times and multiply them by 48000 - but I had no expectation that his would actually work properly, or at all!

Your explanation is just what I was looking for and I can certainly give that a go.


I just did a quick try of this in Audacity. On first try pressing Z found  zero crossings - but not in a similar part of the shape. Zooming in even more I found I could correct that by hand and get a smooth loop. But on another attempt Audacity did get equivalent points first time and got a smooth loop.


Just a note for others reading this - it's better if you have a good length of carefully chosen loop area - my sample had some vibrato, so I had to try and pick parts and points with as even amplitude as I could.


I made a small set of samples just to try it out on the orba - if that seems to work well enough I will start again with a better set.


1 person likes this

Well I got impatient and tried loading my experimental flute preset. There was only a single octave of samples and I had found audacity wasn't too happy about the frequencies - one sample it identified in the wrong octave.

So the results - it sounds much breathier on the Orba than the sample did on the computer. Second, the loop (only on the lowest note sample) pulsed a bit, but worked. I guess I need a longer loop area.

I tried playing with octave settings - sometimes I can get three octaves, sometimes only two.

Finally, and I've seen this before, but it has disappeared later, is that in the lower octave the scale jumps down an octave from key five onwards.

If I can get it working a bit better it's usable, at least.

I get the feeling that the Orba 2 sometimes gets funny ideas in it's pretty little head and needs to take a nap to get it's head together again.

I say that in jest but I wonder whether there may be some data that gets onto volatile memory and it requires some down time for it to get cleared away.


1 person likes this

I tried @Subskybox's method for making loops for samples - it worked well. I have a couple of hints to get a good result. I guess these would apply to any loops.

When choosing an overall area look for similar amplitude for start and finish points. My samples also had some vibrato which could be seen on the overall view as rises and falls in amplitude. Try to find two points at similar points of those cycles -  at least two or three cycles at least,  more is better. This avoids a pulsing effect in the loop.

Zooming in until I could see the individual wave shapes I found Audacity will not always pick a good place for the zero crossing points. Choosing a place where the wave shape has a long line of lower gradient and choose the crossing point on that, then find the equivalent line for the other point. I did this by hand, but since I only had 8 samples to work on it wasn't too tiresome. But this did pretty much guarantee a good result.

I hope this will help in making your samples work well.


1 person likes this

I'd like to report that I finally got around to trying my stereo samples experiment. Unfortunately, it did not work.


What I created was a sound that repeated the word "left" for about 5 seconds on the left channel and repeated the word "right" on the right channel for the same duration. I then created a simple preset using this sample. The result was that I could hear "left" & "right" at the same time. The "left" and "right" may have been coming from separate sides of Orba 2 but I can't confirm. I'm not sure if there are two separate speakers in there or not. I believe @BJG145 showed there was only one speaker in his teardown of Orba 1. I tried with headphones and the channels were merged (branched mono).


I then wired the Tilt gesture to Controller# 8 & 10 (which are typically the MIDI controller numbers associated with Pan/Balance). I had hoped I could hear only "left" to start and only "right" when I titled Orba. Booo! This had zero effect. 

I think we've experimented with everything we've seen in the xml: SynthPatch, ModifierChain, SeekerList, BezierCurvesEntry, etc...


The last frontier appears to be PatternList. My interpretation of this is looped MIDI patterns. I've seen an old Orba 1 promo video where someone held down a pad and it looped some type of arpeggio. This would appear to be the MIDI equivalent of a Stem. I have no idea if these are currently active but I assume they are (otherwise why do these nodes appear in a .artipreset file?). I read in the old release notes for Orba 1 something about them.. I'm thinking maybe if I download some of the very early versions of the Orba 1 App, that maybe there are some presets with patterns defined. Based on the attributes however, I assume that patternData is MIDI data similar to how it is defined in a song LoopData->eventData. And that patternDuration is the same as nBars. I doubt I'll be successful, but I'm going to give it a try next.

 

Turns out old versions of the App had a folder structure like this:


├───Loops

│ ├───Bass

│ ├───Chords

│ ├───Drums

│ └───Lead

├───Patterns

│ ├───percussion

│ └───tonal

├───Presets

│ ├───Bass

│ ├───Chords

│ ├───Drums

│ ├───Lead

│ └───Mixer

├───Songs

├───Sounds

│ ├───Bass

│ ├───Chords

│ ├───Drums

│ └───Lead

└───UpdateUtilities

    ├───artiphon_esp32_programmer

    ├───capsense

    └───dfu-util-win


No presets included PatternLists which I assume is the same as Loops. I was able to save a empty Loop which generated an xml structure like this:

<?xml version="1.0" encoding="UTF-8"?>

<LoopEntry name="Test" tempo="120.0" length="0.0" timeSignature="4/4" key="C"
           tagList="Test" coverImage="" description="Test">
  <MidiSequenceEntry name="" midiSequenceData=""/>
</LoopEntry> 

  

@Subskybox - I had wondered about PatternList but assumed they were not used - until I noticed there was something there in a particular drum preset - but I can't recall which one, and it looked specifically drum related. Since percussion is something I don't do (friends keep me well away from drums etc.), I didn't pay much attention to it.

Login or Signup to post a comment