# Virtual & Augmented Acoustics

# Wat is Virtual & Augmented Acoustics

# echotope Templates

<span>Download voorbeeld uitwerkingen voor de </span>**echotope** Virtual &amp; Augmented Accoustics systemen bij HKU.  
  
Deze zijn gericht op gebruikers die de omgevingen (zoals Unreal, Unity, Touch Designer, etc.) al goed genoeg kennen om met het voorbeeld uit de voeten te kunnen, en maken een directe mapping op een specifiek echotope **protocol versie** (deze zit in de naam, controleer of de template up-to-date is voordat je in de werkplaatsen aan de slag gaat).  
  
Als je een verouderde template zelf kan updaten, dan ontvangen we die update ook graag!

<span>We ontwikkelen momenteel nog aan </span>**Unity &amp; Isadora**. Heb je nog wensen voor specifieke templates, of heb je er zelf eentje uitgewerkt? Laat het weten!

[Download hier de laatste versie van de echotope Templates](https://nextcloud.hku.nl/s/mt8d4eqFYHNNtfd)

# echotope met TouchDesigner

### Overzicht

Er zijn een drie-tal COMPs gebouwd die voor elk van de soorten objecten waar echotope op gericht is zijn uitgewerkt: **Sources, Rooms &amp; Acoustics**.  
  
[![td_echotope_1.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/td-echotope-1.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/td-echotope-1.png)

Elke COMP richt zich op **één** van deze, dus als je meerdere sources, rooms of acoustics wilt aanspreken, moet je ze dupliceren en de output ook weer routen zoals de voorbeelden. Er is één **va\_osc\_out** DAT die de data van de CHOPs ontvangt, en het systeem instuurt. Dat kan je ook anders aanpakken met eigen OSC Outs.

Je zal het **Network Address** en **Port** van de server moeten aanpassen zodat de informatie kan aankomen.  
[![td_echotope_2.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/td-echotope-2.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/td-echotope-2.png)

Als je de Room / Source / Acoustic COMP selecteert kan je via de **Parameters** direct waardes aanpassen die **On Value Change** worden doorgestuurd naar het systeem. De aangeraden workflow is om de rest van je TouchDesigner werk op deze parameters in te haken.

[![td_echotope_3.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/td-echotope-3.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/td-echotope-3.png)

### De COMPs meer in detail

Als je de COMPs open doet dan kan je zien hoe ze zijn opgebouwd. In essentie zijn het grotendeel **Constant CHOPs** (met uitzondering van wat invul-velden &amp; de MUTE knop), die de waardes outputten. Deze zijn in groepjes verdeeld omdat niet alle waardes dezelve **range** hebben (0-100%, of -90 tot +90 graden, etc.)

[![td_echotope_4.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/td-echotope-4.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/td-echotope-4.png)

Vanaf hier worden ze naar een **rename** node gestuurd, die op basis van de **ID** en type (room/acoustic/source) uitzoekt wat het **OSC Adres** van het berichtje moet zijn zodat het echotope systeem snapt wat het ermee moet doen. Hier kan je meer te weten komen over OSC: [OSC Open Sound Control | HKU Bookstack](https://bookstack.hku.nl/books/osc-open-sound-control)

[![td_echotope_5.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/td-echotope-5.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/td-echotope-5.png)

De **MUTE** is een soortgelijke setup, maar dan met een knop. En de **Preset** is apart uitgewerkt met een *CHOP Execute* en praat direct met de *va\_osc\_out* DAT in de parent layer. Dit kan je terugvinden in de scripts door deze te openen met de *edit* knop.

# echotope met Unreal Engine

De Unreal Engine template is specifiek gemaakt in versie **5.7.4**, maar zou ook moeten werken in nieuwere 5.7 varianten, en wellicht ook wel in nieuwere 5.x varianten. In oudere versies gaat het importeren van de *Blueprints* wel goed, maar zijn de *Maps* leeg / corrupt.

### Import &amp; Check

1. Zorg dat je een bestaand Unreal project hebt, of maak een nieuw project aan in de juiste versie.
2. Pak de template ZIP file uit zodat de *VA\_Sample* folder in de *Content* folder van je project zit *(\[PROJECT\_FOLDER\]/Content/VA\_Sample)*

Vervolgens zou je 4 maps moeten hebben in de VA\_Sample folder, en een aantal extra mappen.  
  
[![ue5_echotope_1.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-1.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-1.png)

Elke Map bevat een klein voorbeeldje wat gemaakt is met Blueprints die je kunt vinden in de Blueprints folder.

> **Als je de 4 Maps (hier rechts zichtbaar) niet kunt zien, of niet kan openen (of ze zijn leeg), dan is de Unreal Versie wellicht niet compatible, of is er iets fout gegaan bij het uitpakken.**

De overige mappen zijn:

- <span style="text-decoration: underline;">CoreTypes</span>
    - Deze map bevat alle basis types voor het opslaan &amp; communiceren met het echotope Systeem. 
        1. Accoustic / Room / Source **Setting**: een *enum* die het handiger maakt om een parameter naam te kunnen selecteren (met een drop-down)
        2. Accoustic / Room / Source **Settings**: de *Data Asset* class die alle parameters definieert, en ook een functie bevat om ze individueel aan te spreken (Break).
- <span style="text-decoration: underline;">Accoustic / Room / Source Presets</span>
    - Deze folders bevatten *Data Assets* die zijn gebaseerd op de corresponderende class in CoreTypes, zodat het makkelijker wordt om te wisselen tussen zelf-ingestelde sets van alle waardes van een source / room / accoustic.
- <span style="text-decoration: underline;">Audio</span>
    - Bevat wat voorbeeld audio (uit de standard assets van Unreal)
- <span style="text-decoration: underline;">Materials</span>
    - Bevat wat voorbeeld materials die gebruikt worden in de Maps.

### Workflow

De manier waarop je dit in je eigen Maps kan integreren, is door de **VA\_OSC** Blueprint in je scene te plaatsen, en dan in je eigen Blueprints (of door gebruik te maken van een van de voorbeelden) functies van *VA\_OSC* aanroept om informatie naar echotope te sturen.

Zorg ervoor dat de juiste **Send IP** &amp; **Send Port** van het echotope systeem zijn ingevuld. Je kan hier ook een **Receive Port** instellen (de Receive IP moet meestal 0.0.0.0 blijven) om ook dingen te kunnen ontvangen, en die berichten worden dan geprint op het scherm (bijv. om te testen of je wel de juiste informatie stuurt)

[![ue5_echotope_2.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-2.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-2.png)

Om echt effectief te kunnen werken met echotope zal je wel wat kennis moeten hebben van *Blueprints*, dus overweeg daar ook wat starter-tutorials voor te bekijken. Hier zijn enorm veel bronnen vool, die ook constant veranderen, dus voegen we hier niet allemaal in. Hier is een voorbeeld van een preview van een uitgewerkte Udemy course ([Blueprints for Beginners in Unreal Engine 5.6 - Learn Blueprints in 30 Minutes](https://www.youtube.com/watch?v=2Txaey3BuhQ)).

#### VA\_OSC Functies

De VA\_OSC Blueprint bevat functies die met het echotope systeem praten. Deze zijn opgedeeld zodat het zo makkelijk mogelijk wordt om specifieke dingen te doen: *enkele waardes aanpassen* (Set...Setting), *alle waardes aanpassen* (Set...Settings), *mute/unmute* (Mute...), &amp; *preset switching* (Set...Preset). Zie het *echotope protocol* voor meer informatie over wat elke parameter precies doet met het geluid / systeem.

De *Helpers* worden de andere categorieën gebruikt. Als je precies wil weten wat er gebeurd kan je elke functie openen en kijken hoe deze is uitgewerkt.

[![ue5_echotope_6.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-6.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-6.png)

### Voorbeeld Maps


#### FollowObjectSample

Deze Map is een voorbeeld van hoe je een object de richting waar een Source / Room / Accoustic vandaan komt kan bepalen. Dit bestaat dus uit een **AccousticTargetPanner**, die in het midden van de Map staat, en een **ControllableSphere** die je met instelbare toetsen kunt besturen om het te testen. Dit kan natuurlijk ook een object zijn dat op basis van andere informatie beweegt (zoals gameplay!)

[![ue5_echotope_3.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-3.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-3.png)

Het *TargetObject* is waar naar gekeken wordt. De *Spread* waarde bepaald hoe breed het geluid moet zijn (dit is een specifieke echotope parameter), de *ID* is de identifier van de source / room / accoustic. De *OSCClient* is de *VA\_OSC* blueprint in de scene (zodat de communicatie kan plaatsvinden). *Distance* bepaald hoe ver weg het geluid moet klinken (dat is momenteel in echotope 1.6 nog niet actief, en staat dus nog op 0). En de *Type* kan "room", "accoustic" of "source" zijn zodat het Blueprint Script (*FollowTargetPanner*) weet wat voor soort bericht het moet sturen.

Je kan de *FollowTargetPanner* blueprint openen, en van links naar rechts de *Event Tick* volgen om dit te bevestigen.

[![ue5_echotope_5-1.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-5-1.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-5-1.png)*Rekent de richting uit waar het TargetObject is in **polar coordinates** waar echotope mee werkt.*

[![ue5_echotope_5-2.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-5-2.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-5-2.png)  
*Voert een ander pad uit op basis van het geluidstype dat we aansturen (source / accoustic / room).*

![ue5_echotope_5-3.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-5-3.png)*Stuurt de relevante waardes voor het Room-pad door, door de functies van de VA\_OSC Blueprint aan te roepen. De overige paden zijn zeer vergelijkbaar.*

#### ManualPresetSwitch

Deze Map is een heel simpele opzet, waarmee via de *PresetSwitcher* Blueprint specifieke knoppen kunnen worden gekoppeld aan een preset waarde.

Hieronder zie je de PresetSwitcher in de Outliner geselecteerd, en daaronder zichtbaar de *VA\_OSC* instance die is gelinked. Overige informatie is de *ID* (welke source / accoustic / room spreken we aan?), *Muted* (moet je het horen ja/nee?), en de *InputMap* die een knop koppeld aan een preset nummer (1-15). Dit is nu een directe mapping van de knoppen 1-5, naar de presets 1-5. Als laatste is er nog de *Type* waarde die bepaald wat er wordt aangesproken (source / accoustic / room).

[![ue5_echotope_7.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-7.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-7.png)

Als je de *PresetSwitcher* Blueprint opent kan je dit ook bevestigen:

[![ue5_echotope_8-1.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-8-1.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-8-1.png)  
*Gaat door elke knop/preset koppeling in de InputMap heen, en kijkt of deze knoppen nu net zijn ingedrukt door de speler (index: 0). Zo ja: stuurt dit via VA\_OSC functies door naar echotope voor de relevante types (room / accoustic)*

*[![ue5_echotope_8-2.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-8-2.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-8-2.png)  
Kijkt of de M toets is ingedrukt, en zo ja zet het de Mute functie aan/uit voor de relevante Type (room/accoustic). Hiervoor gebruikt het wederom VA\_OSC functies.*

#### SourceSettingContinuesSample

Deze Map doet eigenlijk wat er in de ietwat lange naam al wordt geïnsinueerd: *stuurt continu de settings van een source aan.*

Dit gebeurd via de *SourceSetter* blueprint, die maar 3 variabelen bevat:

1. VA OSC: de VA\_OSC instance om de informatie te kunnen sturen
2. Source ID: de ID van de source die we aanpassen in het echotype systeem
3. Source Settings: een verwijzing naar een *Data Asset* waar de op te sturen settings in staan.

[![ue5_echotope_9.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-9.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-9.png)

> De situatie waar dit voor bedacht is, is als je vanuit de *Data Asset* live wilt kunnen editen, en deze waardes wil opslaan tussen speelsessies. Op die manier kan je bijv. makkelijk eigen presets maken, door die Data Asset vervolgens te dupliceren en een herkenbare naam te geven.

Als je de Blueprint van de *SourceSetter* opent kan je dit gedrag bevestigen:

[![ue5_echotope_10.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-10.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-10.png)  
*Stelt elke Tick de Source Settings in op de Source met ID "Source ID", via een functie van VA\_OSC*

#### TriggerSample

Deze Map bevat een vier-tal doorzichte kubussen die een Preset instellen op een room, accoustic of source wanneer je met een object (in dit geval de speler) binnen het volume van de kubus terecht komt. Dit kan je bevestigen door er in Play-mode doorheen te vliegen. De kubussen printen dan "BUMP" op het scherm.

[![ue5_echotope_11.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-11.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-11.png)

> Dit voorbeeld is gericht op een veel voorkomende situatie in games: dat je op het moment van verplaatsing naar een specifiek gebied iets wilt laten gebeuren. In het geval van dit systeem: de akoestiek veranderen (bijvoorbeeld binnen/buiten, verschillende soorten omgevingen, etc.)

De Blueprint bevat variabelen voor de VA\_OSC instance, het Type (room, accoustic, source), de ID van de room/accoustic/source, en naar welke Preset (1-15) er moet worden gewisseld (zie het echotope protocol voor meer informatie over wat elke preset voorstelt).

Als je de Blueprint opent kan je dit gedrag ook bevestigen:

[![ue5_echotope_12.png](https://bookstack.hku.nl/uploads/images/gallery/2026-07/scaled-1680-/ue5-echotope-12.png)](https://bookstack.hku.nl/uploads/images/gallery/2026-07/ue5-echotope-12.png)  
*Als er een andere Actor overlapt met dit object: voor het relevante type stelt het de ingestelde Preset in via een functie van VA\_OSC.*

Om te zorgen dat Actors elkaar kunnen overlappen moeten er wel twee zaken samenkomen:

1. Het object moet een component hebben dat collision toestaat (bijv. de StaticMeshComponent van de kubussen)
2. De "Collision Preset" instellingen moeten zo ingesteld staan dat er een OverlapEvent wordt uitgevoerd. In dit geval: 
    1. Generate Overlap Events **AAN**
    2. Collision Presets: **OverlapAll**

> Het object dat naar binnen vliegt moet mogelijk ook Collision hebben. Dat is in dit geval de "SimplePawn" Blueprint in de VA\_Sample/Blueprints map, die via de "MyGameMode" wordt ingesteld als "Default Pawn Class" (waar je mee begint te spelen als je op Play drukt)