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.


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).

Hi @upratathlau,

The online workshop is confirmed for tomorow 6:30pm CET.
Please refer to https://gitter.im/OSSIA/score
for the jitsi link

Hope to see you there !

Hi, thank you. Have bit busy schedule tomorrow, but will definitely try to fit it in there! so hopefully see you tomorrow.

Perfect, the workshop will be recorded anyway.
Other attendees actually prefer 6pm rather than 6:30. is this ok for you too ?

For me it would be better to start at 6.30, but if most people prefer 6 then start at 6 - there is slight chance I won’t make it even at 6.30. But since it would be recorded I can send you questions I have, in case I’m late? would it be ok for you?

Sure ! that would be helpful actually if you can send me questions in advance.
We’ll start at 6pm then.

Great, so:

  • How should i set up internal looper process to be controllable by MIDI CC? Or specifically to be able to control play, rec, overdub and stop independently with different MIDI CC. I see, in the looper settings, you can set address for some of its control elements, but it seems like you can control only one of the play, stop, rec, overdub buttons at a time. Or maybe I don’t understand how it works, again :slight_smile:
  • Is it possible to control the looper with step sequencer process? It seems it’s possible to connect them together, but it doesn’t seem to do anything.
  • Better yet, if time allows, could you create a simple MIDI controllable audio looper in ossia? Just something basic I (or anyone interested) could start from.
  • Also, if time allows, could you make something like typical project? Something that shows what the usual workflow in ossia is (with conditions and triggers) - to me it’s quite new software with quite unusual paradigm, so i have just a vague idea how it is used, or how to make some interactive setup with it.
  • Is it possible to manually position playhead at some specific place? I tried to drag it with mouse, click on timeline, or use keyboard arrows, but none of them worked.
  • Do you or would you support Raspberry Pi?

Thank you very much.

Please find the link for the workshop at https://gitter.im/OSSIA/score

HI, thanks, so i’ll be there. But where exactly can i find the link? In the chat? Should i register there to see it?

Just posted it on https://gitter.im/OSSIA/score
no registration necessary

Thanks a lot again for the workshop and that you included the looper example - it was helpful, now i have the basics to start from. The process to create midi controllable looper isn’t that straightforward as i thought it will be, but that’s probably because things are done differently in ossia than in other sequencers. But ossia seems to be really powerful piece of software, that’s why i said i like it and am bit surprised i came across it just recently.

With pleasure, thanks for taking part !

Yes, great efforts are on being made at the moment to improve that support, especially following @iain 's posts : Help building Score on Pi 3 and Controlling LED strips with Score and a Raspberry Pi

Today, @jcelerier posted this milestone


Here is the relevant part of the online workshop dealing with the audio looper :

and the one dealing with conditions :