laatste nieuws

NS ICNG nu te koop.

Kortingscodes

Wilt u meer dan één product kopen om uw collectie te beginnen of uit te breiden? Gebruik deze coupons voor de volgende kortingen:
GIMME2 = 10% korting op 2 producten
GIMME3 = 15% korting op 3 producten
GIMME4 = 20% korting op 4 of meer producten

Mailing lijst

U kunt zich abonneren op de nieuwsbrief op het mailing lijst voor af en toe updates en belangrijke aankondigingen.

Partnersites





DTG Train Simulator Technisch Artikel : Audio blueprints

De audio (geluid) blueprints voor Dovetail Games Train Simulator is een van de meer ingewikkelde aspecten van het creëren van content voor het spel. Ik zal hier de grondbeginselen van de audio blueprints voor een railvoertuig behandelen, maar het principe is hetzelfde voor scenery audio-objecten ook.

De audio blueprint bestanden

Voor bijna al de in het spel aanwezige geluiden zijn er twee blueprint bestanden. De audio blueprint en de audio-proxy blueprint. Heel belangrijk: Probeer nooit om één van deze blueprints direct te exporteren. De Blueprint editor heeft een aantal interessante bugs welke alle waarden kan vernietigen en als de blueprint opnieuw wordt opgeslagen na een export, het XML-bestanden corrupt zal raken.
De audio blueprint is eigenlijk alleen maar een placeholder die verwijst naar de proxy blueprint, maar het is de blueprint waarnaar uw locomotief, wagon of scenery object moet refereren. Het ziet er zo uit:


De basis structuur van de proxy blueprint

De proxy blueprint is waar al het werk wordt gedaan. Elk geluid dat in het spel wordt afgespeeld bestaat uit de in dit diagram getoonde elementen.
Elk geluid (de 'sample') wordt gespeeld of als een one-shot-geluid (het wordt één keer afgespeeld, getriggerd door een bepaalde gebeurtenis), of telkens herhaald ('loop') (het blijft herhaald afgespeeld worden op basis van een bepaalde voorwaarde). Het geluid kan worden gewijzigd door een 'modifier chain'(modificerende keten) die op zijn beurt een 'curve(n)' gebruikt om precies te bepalen hoe u het geluid te wijzigen. De curven zijn eenvoudige numerieke gegevens die worden gebruikt om een invoerwaarde op te zoeken en de daarbijhorende uitgangswaarde terug te geven. ZO kan bijvoorbeeld het ingangssignaal van een curve de snelheid van de trein zijn, en de uitkomstwaarde van de curve de toonhoogte (de 'pitch') van het geluid.

Voorbeeld herhalend geluid - motorgeluid afhankelijk van snelheid

Het eenvoudigste voorbeeld van hoe alle onderdelen samenwerken is een motorgeluid waarvan de toonhoogte afhankelijk van de snelheid van de trein verandert. Hiervoor zijn 5 elementen nodig:

  • Het basis geluid (hier: motorgeluid - Engine Loop)
  • Een pitch curve
  • Een volume curve
  • Een motor geluid modifier (Engels: engine sound modifier)
  • Een beschrijving van het herhalende geluid (looping sound)

Het geluid

Het motorgeluid (engine sound) moet een mono WAV-bestand zijn dat herhaald kan worden - lees: het geluidsfragment moet herhaaldelijk afgespeeld kunnen worden, zonder dat er een hoorbaar gat of verandering in het geluid optreedt op het punt vanaf waar het geluid herhaald gaat worden. De informatie over het geluid moet er in de blueprint editor ongeveer zo uitzien:


Merk op dat het selectievakje 'Is Looped' hier aangevinkt is. Zo wordt aangegeven dat wanneer dit geluid afgespeeld wordt, het continu herhaald moet worden. De rest van de parameters zijn gedocumenteerd in de online audio blueprint wiki, waar een en ander duidelijker wordt beschreven dan dat ik dat kan doen.
Belangrijk: Geef het geluid een zinvolle naam!

De curven

Voor dit voorbeeld zijn twee curven nodig. Één die de toonhoogte verandert op basis van de snelheid, en één die het geluidsvolume op basis van de snelheid verandert. De volume curve is nodig omdat anders het zich herhalende geluid ook als de locomotief stil staat zou blijven afspelen. Curves worden gedefinieerd als paren van punten, aangeduid met X-en Y-waarden. De curve zelf heeft geen eenheden - dat later komt.
Voor de toonhoogte (pitch) curve stellen we ons voor dat het motorgeluid afgespeeld wordt op de originele toonhoogte van het WAV-bestand bij lage snelheden, maar op 1,5x de toonhoogte bij een snelheid van 80 km/h. De pitch curve is niet echt een curve, maar een rechte lijn gedefinieerd door twee punten die er als volgt uitziet:


X-waarden zijn snelheid, Y-waarden zijn toonhoogte. Dus de twee punten (X = 0, Y = 1) en (X = 22.22, Y = 1.5). Merk op dat de snelheid niet in km/h is - alle snelheidswaarden voor de audio blueprints zijn in m/s. Dus 80 km/h = 22.22 m/s. Belangrijk: Geef de curve een zinvolle naam!
In de blueprint editor ziet de definitie van deze pitch curve er als volgt uit:


Voor de volume curve, nemen we aan dat het volume van het motorgeluid maximaal is vanaf 40 km/h en zo blijft to aan de 60 km/h, en vanaf dan weer wegvalt. In dit geval is een curve met minstens 4 punten nodig. Nogmaals, het is niet echt een curve, maar een reeks rechte lijnen die de punten met elkaar verbindt. X-waarde is nog steeds de snelheid, maar de Y-waarde is nu het volume:


De vier punten zijn (X = 0, Y = 0), (X = 11.11, J = 1), (X = 16.66, J = 1), (X = 22.22, Y = 0,8). In de blueprint ziet de definitie van deze volume curve er als volgt uit:


De 'modifier chain'

De 'modifier chain' is de functie die de curves gebruikt en deze hun input waarden geeft. De twee meest voorkomende modifier chains zijn de 'pitch curve modifier' en de 'volume curve modifier'. Belangrijk: Geef de 'modifier chain' een zinvolle naam!
Elke 'modifier chain' kan meerdere modifiers hebben. In dit voorbeeld zijn er twee nodig: één voor de toonhoogte van het geluid, en één om het volume te wijzigen. In dit geval is de snelheid van de locomotief de input voor zowel de pitch curve als de volume curve. De 'modifier chain' ziet er als volgt uit:


Hier zien we de reden waarom ik benadruk dat het belangrijk is om de geluiden en curves zinvolle namen te geven . In de bovenstaande afbeelding kunt u zien dat de toonhoogte curve modifier de curve gebruikt welke we eerder in de blueprint gedefinieerd hebben, namelijk de 'Engine pitch from speed' curve. De 'Controller Name' geeft de ingangswaarde voor de curve. In dit geval is dat 'AbsoluteSpeed', hetgeen betekent dat de absolute snelheid van de locomotief als X-waarde aan de curve wordt doorgegeven, en de curve de toonhoogte als Y-waarde teruggeeft.
De 'volume modifier" gebruikt de eerder gemaakte 'Engine volume from speed' curve, waarbij de absolute snelheid van de locomotief als X-waarde voor de curve fungeert, en deze het volume als Y-waarde teruggeeft.
De 'Controller Name' kan elk van de op de audio controle wiki pagina's opgesomde sleutelwoorden ('keywoord') zijn, of een van de controllers van de locomotief zelf . Voor cabine geluiden kan dit dus een bedieningselement (controller) van in de cabine zijn. Zo kunnen bijvoorbeeld een curve en een modifier aangemaakt worden welke de stand van de rijhendel koppelt aan het volume van een geluid. In dat geval zou de 'Controller Name' 'Regulator' zijn. De curve zou dan als X-waarden waarden van 0 tot 1 (overeenkomende met de stand van de rijhendel (Regulator) van 0% tractie tot 100% tractie ) moeten hebben en Y-waarden voor het geluidsvolume dat bij de diverse standen van de hendel hoort.

De 'controlled loop'

De 'controlled loop' is de plaatst het originele geluid wordt gekoppeld aan de 'modifier chain'. In dit voorbeeld ziet de 'controlled loop' er als volgt uit:


Nogmaals, het maken van deze 'controlled loop' gaat veel makkelijker als er zinvolle namen zijn gegeven aan de geluiden en modifiers. In dit voorbeeld zal het geluid zowel intern als extern afgespeeld worden, gebruik makend van het 'Engine' geluid, waar de 'Engine loop modifier' modifier chain op toegepast wordt. Er is een belangrijk verschil hier. De 'Controller name' in 'controlled loop' hoeft niet per se dezelfde te zijn als de gebruikte 'controller name' in de modifier chain. In dit geval is dit wel zo omdat het motorgeluid afgespeeld moet worden als de snelheid van de locomotief tussen 0 en 33 m/s ligt (nogmaals: snelheidswaarden zijn altijd in m/s).

Voorbeeld One-shot geluid - klikgeluid cabine bedieningselement

'Loop' geluiden zijn vrij complex, maar one-shot geluiden zijn aanzienlijk eenvoudiger. Deze geluiden zijn meestal zeer korte samples die worden gespeeld zodra aan een bepaalde voorwaarde wordt voldaan.

Het geluid

Het one-shot geluid is in principe hetzelfde als een 'loop' geluid met het enige echte verschil dat het selectievakje 'IsLooped' niet aangevinkt is.


Curves en modifier chains

Het gebruik van 'modifier curves' en 'modifier chains' is zeer ongebruikelijk voor one-shot geluiden, omdat ze in het algemeen hiervoor niet nodig zijn.

Het 'triggered one-shot' geluid

Net als de 'controlled loop', heeft het 'triggered one-shot' (triggerd one-shot) referenties naar het geluid en (indien gemaakt) een modifier chain:


In dit voorbeeld zal het klikgeluid telkens afgespeeld worden als TrainBrakeControl de waarde 0.5 passeert (Trigger value = trigger waarde). Het maakt hierbij niet uit of de waarde van het bedieningselement (hier: TrainBrakeControl) toe- of afneemt - het geluid wordt bij elke passage van 0.5 opnieuw afgespeeld.
Er zijn andere opties voor 'Trigger type' (type trigger) - zo kan het geluid ook alleen afgespeeld worden als de waarde toeneemt en de 0.5 overschrijdt.

Loop geluid samples in combinatie met 'triggerd one-shots'

Aangezien bij de definitie van het geluid 'IsLooped' aangevinkt kan worden, is het mogelijk om een 'loop' geluid te laten starten zodra aan de one-shot voorwaarde is voldoen. Zo kan bijvoorbeeld een alarm geluid worden gemaakt dat zich blijft herhalen, en dat geactiveerd wordt door middel van een 'one shot trigger" welk kijkt of de 'Controller name' Alarm is toegenomen tot een waarde boven 0.25. Het probleem bij het maken van dergelijke 'loop' geluiden is dat het geluid met geen mogelijkheid meer uitgezet kan worden. Zodra het geluid getriggered wordt, blijkt het eindeloos afspelen. Kortom, dit is geen goede manier om 'loop' geluiden te maken.

'Single samples' versus 'random samples'

Bij het definieren van het sound sample (geluid sample) bovenin de blueprint, zijn er eigenlijk twee mogelijk types samples mogelijk: een 'Single sample' of een 'random samples'. Op deze pagina is er alleen gesproken over het type 'single sample' (één enkel geluid), maar 'random samples' (willekeurige geluiden) is dus ook mogelijk. Dit laatst type is hetzelfde als 'single sample' geluiden, alleen in plaats van één enkele WAV-bestand, moet in dit geval een serie geluidsbestanden worden opgegeven samen met de kans dat het geluid wordt afgespeeld (Likelihood). Het zou bijvoorbeeld erg onrealistisch zijn als voor het geluid van de luchtremmen, telkens hetzelfde geluid zou klinken. Het 'random sound' sample zou als volgt er uit kunnen zien. In dit geval heeft het geluid ('sound') twee samples om uit te kiezen, beide met een kans van 50% dat ze afgespeeld worden. Dit betekent dat elke keer als het 'Air Brake C' geluid wordt aangeroepen door een one-shot trigger, er 50% kans is dat NS airbrakes1.wav afgespeeld wordt en 50% kans dat NS airbrakes2.wav afgespeeld wordt:


Samenvatting

Wat heb ik hier aan bod heb laten komen zijn de basisprincipes om geluid in een locomotief of scenery object te krijgen. Het principe is hetzelfde voor bijna elk type object dat voor het spel gemaakt kan worden. Experimenteer met de blueprints en je zult ontdekken dat ze zeer krachtig zijn.