Ossia basics - looping, conditions, keyboard shortcuts

Hello everyone, new here. First of, ossia seems to be really interesting piece of software. I’m looking for something that can be used for live looping (of live recorded audio and/or midi loops) and, at the same time controling some other device (e. g. hardware guitar looper) via midi CC - is that possible with ossia?

Second question is regarding the basics of ossia functionality - for example i can’t really wrap my head around the conditions and branching in ossia. I understand how ifs, switches, etc. are used in programming, but can’t figure out how it is supposed to work in ossia. When i create an interval, which then branches and the condition is set to the (default) {true == true}, i see the “signal” goes to both upper and lower branch (as they are colored yellow and also when i attach some sound files to the branches, they are played). The same happens with any expression that evaluates to true (like 1 == 1, 5 > 1, or false == false). And when it evaluates to false, the branches are colored in red and attached sound files don’t play. What i would expect is, that when the expression evaluates to true, the signal goes to only one of the branches and when false, it goes to the other. Am i missing something? Or is there some tutorial about this? I think i looked through all of your documentation, videos and this forum, but didn’t find anything except some mentions that it’s one of the features of ossia, but nothing that explained how to use it.

And third question - are there keyboard shortcuts for playback stopping and/or returning to the beginning of timeline? I tried several key combinations but none worked. And like to use more keyboard then trackpad/mouse.

I’m using ossia 3 from arch’s aur repo.

Thanks.

OK, so i probably figured the conditions out with friend - as usually, trying to explain something to someone else helps you understand the thing :slight_smile:

So, my current understanding is, that the “branching” doesn’t mean to be like in programming - one branch when condition is true, the other when it’s false, but the condition visualization simply tells you that everything after is gonna be processed when the condition is true and vice versa. And the branching is simply the same branching you can use without conditions. And when you want to reproduce something like if/else, then you have to use two conditions (one for true and one for false). Is that correct? Now it looks almost obvious, but the branching made me confused :slight_smile:

But the rest of the questions are still actual, thank you.

Hi @upratathlau
Welcome !

Midi recording and looping, as well as with audio and automation, are features that we want to include very soon, but the current way of doing it isn’t suited to live performance : either “record automation from here” or “record messages from here” (select parameters in the device explorer and right click in the scenario).

For conditions, glad to hear that you figured it out. If you have a suggestion on how it can be laid in a clearer way, or better explained in the doc, we are all ears !

If you want to stop and return to the bieinig, simply use Enter. If you also want to evaluate the initial state at the very top of the score, use Ctl+Enter.

Hope this helps !

@thibaudk thank you for the quick reply!

Regarding conditions - maybe a simple tutorial, howto us them would help, if there isn’t one. Just steps, how to create conditions, how to write conditional expressions, and what it is all good for - doesn’t have to be anything fancy, just something that illustrates this concept and that hints what one can do with it. Btw. is there documentation for the syntax used in conditions? Especially some list of variables you can use in the expressions.

And also, when i click on condition, settings for this condition appear on the right panel and under the “Condition” i see something (“Always” button and “+” button) that looks like a way to chain (with & and |) conditional expressions - am i right? Or what is it used for?

And thanks for the shortcuts - now i found out they are under Play submenu.

Will take look at the looping later.

Yes, we need to fill this article in the website

Yes that is exactly it, altho it has been somewhat retired, pending a refactor and potentially a new interface. TBC

If you wish to loop audio, there is a “Looper (audio)” process. This one is tailored for live performance.

Thank you for reply. New interface would be great, cause I still don’t understand how it works :slight_smile: say I choose “=” instead of “Always” in the dropdwon menu and set the condition as follows: “:/@[time.second] = 5” - what does it exactly mean? I mean, what seconds does it refer to - on the timeline? Cause it doesn’t seem to have any effect when i create conditon followed by some sample - no matter whether i leave it to the default setting ({true == true} and Allways) or change it to the above, the sample is payed. The problem also is that when i set the condition to something else than default (Allways), then unfocus the condition in scenario editor panel and focus it back, it resets back to Allways as if it doesn’t save the changed condition. And also, how is the {true == true} condition related to this type of condition. If it’s Always, then i gues the {true == true} is always evaluated. But how should i read it, if it’s something like the above (second = 5)? Like this: if time == 5 seconds and {true == true}, then the whole condition == true? And what do the other units mean - say if i set it to “:/@[distance.m] = 5”? What distance? And what does the “/!” symbol and offset behavior mean?

Sorry for so many questions, but it’s really confusing to me :slight_smile: And am also surprised i didn’t find any question regarding this on the forum - am i so stupid or people just don’t use it? :smiley:

And yeah, i found the looper, but didn’t have time to play with it properly.

The way control strucures are set up, whether for conditions or triggers objects (T), is really more dependent on external devices than internal events.
If what you wish for is an event to trigger at second 5, I would recommend creating an interval of 5 second from the start.

The reason conditions resets to “Always” is because “:/@[time.second]” is not a valid address.
“:/” can not be left as is.
it should look like “myDevice:/myNode/myParameter@[time.second] = 5”, if the parameter represents in fact seconds or can be converted to seconds.

If you wish the parameter in question to be a parameter of score itself and not a parameter of an external Device , you need to add the “local” Device to the Device explorer.

This will provide an “address” based representation of your score and all it’s objects.
For each interval you will have access to a “percentage” parameter, tracking in real time
the progress through time, witch you can then use for triggering event or evaluating conditions.

This is indeed a more “advanced” use of the software.

I hope to give an online workshop next week to go over these features and practices.
Would the 2nd of March suits you ?

Hi, thank you for the explanation, now it makes more sense :slight_smile: Will try it when i get back to it again. And actually, i wasn’t trying to do anything specific - just fiddling with stuff and trying to understand how conditions work.

Regarding workshop - sounds good if it’s gonna be in the evening (CET).