Open Sound Control als brug tussen audio- en gamewereld

Binnen onze use cases werkten we een live show uit voor de bands WITT en Pothamus met immersief geluid en beeld. De twee domeinen hebben we op een dynamische, vaak geautomatiseerde wijze bijeengebracht.
Ook onze digital twin van d’Hane Steenhuyse en De Kreun verenigde de principes van een klassieke game audio engine met die van een audioproductie in een DAW.

OSC kwam duidelijk uit de bus als de beste manier om de verbinding tussen beide omgevingen te maken en data uit te wisselen.


Open Sound Control

Open Sound Control is ontstaan vanuit een heel simpel concept: er was een manier nodig om communicatie tussen systemen (computers, synthesisers, hardware) mogelijk te maken via netwerk, geïnspireerd door MIDI.
Het protocol werd uitgewerkt om simpel berichten uit te sturen tussen 1 zender en 1 of meerdere ontvangers. De zender stuurt een simpel tekstbericht uit over het netwerk, al dan niet gevolgd door 1 of meerdere waarden/parameters. Dat kan via een netwerkkabel, maar even goed draadloos.
Voorbeelden zijn /digitaltwin/room/1/enter of /digitaltwin/listener/position/x 0.25. De vormgeving van de berichten is afhankelijk van de omgeving en afspraken tussen omgevingen zijn belangrijk.

OSC is geen nieuwe technologie; de eerste versie dateert van 2002 en sinds 2009 is er niets meer aan veranderd. Waarom zetten we er dan zo op in?


OSC (‘oude tech’) vs MIDI (‘nog oudere tech’)

OSC biedt veel vrijheid en is heel laagdrempelig. Het schept een duidelijk contrast met MIDI, een essentiële bouwsteen voor muziekproductie. MIDI is alleen heel strikt, beperkt in zijn toepassingen en vooral niet leesbaar. Het haalde het uiterste uit de beperkingen die opgelegd waren op vlak van data-overdracht bij het ontstaan meer dan 40 jaar geleden.
Sindsdien is MIDI wel geëvolueerd, kunnen we veel gemakkelijker data versturen maar blijven die limitaties van 40 jaar geleden toch behouden, zoals het werken in blokken van 8-bit getallen. Dit is om compatibel te blijven met oudere toestellen, maar dat heeft zijn gevolgen.

Het is dan ook logisch dat sectoren waar MIDI niet essentieel is de alternatieven onderzoeken – en dan komen ze snel uit bij OSC. Het is misschien wel de meest gebruikte audiotechnologie buiten de audiowereld, waar het zelfs gebruikt wordt in touchscreen software, videomontage, het in kaart brengen van hersengolven en meer.
Dichter bij dit onderzoek vinden we OSC terug in game engines, VJ-software, immersive engines, headtrackers, audio plugins en meer.
Immersive audio breekt hiermee ook specifiek met de norm door MIDI grotendeels achterwege te laten en enkel voor OSC te kiezen. OSC-integratie zal in muziekproductie misschien nooit zo uitgebreid zijn als MIDI-ondersteuning, maar de toekomst voor immersive ligt duidelijk bij OSC.


Integratie tussen omgevingen

Open Sound Control heeft 2 voorname toepassingen:

  1. Remote control: je wil de huidige staat van een ontvanger veranderen, oftewel hem besturen. Hiermee richt je je specifiek op 1 ontvanger, vaak met berichten die bepaald zijn door of afgesproken met de ontvanger.
  2. Data-overdracht: de huidige staat van de zender verandert en die communiceert dat aan de ontvanger(s). Dit is eerder abstract; elke ontvanger kan gepast reageren zonder dat de zender weet wat dat inhoudt.

Het commando /digitaltwin/room/1/enter dient meer voor controle, want je wil dat de ontvanger overschakelt naar ruimte 1.
Het commando /digitaltwin/listener/position/x 0.25 dient voor data-overdracht; de luisteraar is verplaatst en het is aan de ontvanger om daarop te reageren.

Als je een zender en een ontvanger hebt die alletwee OSC ondersteunen, moet je enkel nog een netwerkpoort kiezen waarlangs je OSC-berichten wil ontvangen of versturen. Er zijn daar ook veel opties: je kan kiezen voor enkel luisteren of enkel versturen, je kan over meerdere poorten tegelijk sturen, je kan enkel naar een bepaald IP-adres sturen, enzovoort.

Voor oplijstingen van omgevingen die OSC ondersteunen kan je terecht op de website van Open Sound Control of de Wikipedia-pagina.


Voorbeeld: digital twin

De digital twin is uniek omdat we in 2 omgevingen een digital twin bouwen. De visuele kant is ontwikkeld in Unreal Engine en de auditieve kant in een combinatie van Max, eigen software en Ableton.

We steunden hierbij op de basisprincipes van een game: de game engine genereert de visuals en verwerkt real-time wat de luisteraar (of speler) in de virtuele ruimte doet. Via zogenaamde game calls wordt via OSC informatie doorgegeven aan de audio engine die ook real-time die informatie verwerkt en het geluid aanpast. Hierbij volgt eigenlijk geluid het beeld. We gebruikten 2 aparte computers die beide via een netwerkkabel verbonden waren met een netwerkswitch.

De reeds vermelde OSC-commando’s hierboven zijn echte berichten die we gebruiken om het geluid te laten matchen met het beeld. De vormgeving van de berichten hebben we onderling afgesproken.
Concreet wordt de volgende informatie via OSC meegedeeld:

  • De positie van de luisteraar in 3 dimensies (x/y/z), telkens gevolgd door een floating point getal tussen -1 en 1:
    • /digitaltwin/listener/pos/x
    • /digitaltwin/listener/pos/y
    • /digitaltwin/listener/pos/z
  • De oriëntatie van de luisteraar (rotatie naar links-rechts/boven-onder) + float:
    • /digitaltwin/listener/rot/yaw
    • /digitaltwin/listener/rot/pitch
  • De positie van de piano waarop gespeeld wordt, in 3 dimensies (x/y/z):
    • /digitaltwin/source/pos/x
    • /digitaltwin/source/pos/y
    • /digitaltwin/source/pos/z
  • De orientatie van de piano (rotatie oftewel hoe het instrument gedraaid is).
    • /digitaltwin/source/rot/yaw
  • Het binnen- en buitengaan in een bepaalde ruimte.
    • /digitaltwin/room/0/enter
    • /digitaltwin/room/0/exit
    • /digitaltwin/room/1/enter
    • /digitaltwin/room/1/exit
  • Wanneer de performance start en stopt:
    • /digitaltwin/transport/start
    • /digitaltwin/transport/stop

Om niet continu OSC-berichten te moeten verwerken, is beslist enkel berichten uit te sturen wanneer een waarde wijzigt. Het heeft bijvoorbeeld geen zin om heel de tijd de positie van de luisteraar door te sturen als die gewoon stilstaat. Berichten werden ook enkel 1-op-1 naar het IP-adres van de audio engine computer gestuurd.
Op deze manier beperken we dataverkeer over het netwerk en kan alles real-time verwerkt worden.


Voorbeeld: immersive concert WITT

Voor de show van WITT maakten we gebruik van QLab. Dat is software voor show control, waarmee je shows (muziek, theater, musical, …) kan automatiseren. Concreet bouw je lijsten op met cues die je op een bepaald punt kan triggeren – individueel of in groep, van volledig manueel tot een geautomatiseerde tijdlijn.
Achter een cue kunnen allerlei handelingen zitten, zoals het starten van tijdcode, het versturen van OSC- en MIDI-berichten, licht aansturen, audio- en video afspelen en meer.

Tijdens de show was het belangrijk dat een aantal omgevingen op hetzelfde moment gestart werden en/of overschakelden. QLab was dus een zeer bewust keuze. Concreet werd per nummer de volgende keten gestart:

  1. OSC – naar SPAT Revolution: verander naar de snapshot van het nummer in de immersive engine. Dit is belangrijk, want de positionering van muzikanten in de immersive mix varieerde sterk.
  2. MTC – naar Pro Tools: start en stop afspelen via MIDI Timecode. Eerst start de click track voor muzikanten (waar relevant), dan de immersive backing track.
  3. OSC – naar Unreal Engine: schakel over naar het effect voorzien voor dit nummer, zoals het manipuleren van AI visuals via audio-analyse, real-time AI-beelden, …
  4. OSC – naar Unreal Engine: start het visuele effect in Unreal Engine.
  5. OSC – naar Resolume: verbind met de AI-gegenereerde visuals voor dit nummer. Op deze manier is de clip bestuurbaar vanop afstand.
  6. OSC – naar Resolume: selecteer de clip in de Resolume tijdlijn, waardoor hij start.

De volgorde is hier zeer bewust. De snapshot van de mix moet veranderd zijn voordat het geluid start. Muzikanten kregen ook voor de start van de meeste nummers een click track te horen vanuit Pro Tools, zodat ze juist konden invallen met de backing track en video.
De timing van de click track was ook exact getimed ten opzichte van het einde van het vorige nummer zodat er niet teveel stilte zou vallen tussen het applaus en de start van het volgend nummer. Na een exact aantal seconden (anders per nummer) werden dan de visuals gestart. Dankzij QLab en OSC konden we tijdens de repetitie die timing vastleggen en tijdens de show bij wijze van spreken op Play drukken.

We merken ook duidelijk op dat het precies besturen van Resolume mogelijk is dankzij de flexibiliteit en vrijheid van OSC.
VJ Nele Fack had visuals voorzien die tussen de nummers bleven doorlopen. We waren van plan Resolume te synchroniseren met de tijdcode van Pro Tools, maar dan waren er enkel visuals als er tijdcode liep (enkel tijdens de nummers). Ook werkten overgangen tussen de beelden niet.
Het OSC-bericht om clips te selecteren in de Resolume simuleert het klikken met de muis op een clip in de tijdlijn. Speelt er nog een video bij het klikken, dan zullen geprogrammeerde effecten zoals crossfades toegepast worden. Is de video gedaan, dan gaat Resolume verder op de tijdlijn en krijg je de overgangsvisual tussen 2 nummers.
Als we geen OSC gebruikten, had het meer zin om met de hand Resolume te besturen dan te synchroniseren op tijdcode. Er was minder garantie op synchronisatie dan met tijdcode, maar elke overgang zou met tijdcode toch manueel gedaan moeten worden.