Hier wat links over Unity en audio.
Hoe maak ik een metronoom?
Met AudioSettings.dspTime kun je de tijd op audiorate opvragen. Let op: dit is de tijd die is verstreken sinds je computer is opgestart, dus werk altijd met relatieve tijd.
https://docs.unity3d.com/ScriptReference/AudioSettings-dspTime.html
(Voorbeelden voor JS en C#).
Hoe speel ik audio af zonder latency?
Met dspTime kun je het moment bepalen waarop de audio afgespeeld zou moeten worden. Met audio.PlayScheduled zet je het even klaar en wordt het op de juiste tijd getriggerd.
https://docs.unity3d.com/ScriptReference/AudioSource.PlayScheduled.html
Hier kun je een project downloaden waarin je dit meteen kunt testen.
http://sid.hku.nl/downloads/?dir=lesmateriaal%2Fsid-blok3%2Ffiles%2F2016
Het wapengeluid onderbreekt. Dat is lelijk.
Kijk naar het AutoFire script en kijk eens naar:
function OnStartFire ()
Hier zie je het euvel: het is volgens mij een loop die aan en uit gezet wordt als je de muisknop indrukt cq loslaat.
PlayOneShot is hetzelfde als PlayClipAtPoint alleen geef je bij de laatste een 3d-positie mee (dus dat is wel handig). Unity maakt het object aan, en verwijdert het als het klaar is met afspelen.
Handige Unity Functies
FindObject(s)OfType
Met deze functies kun je alle instances van een bepaald script selecteren en dan een functie laten uitvoeren. Les op de s: alle objecten of 1 object.
https://docs.unity3d.com/ScriptReference/Object.FindObjectOfType.html
https://docs.unity3d.com/ScriptReference/Object.FindObjectsOfType.html
Andere gameobjecten benaderen
Zo kun je andere gameobjecten linken en iets doorgeven:
[LINK]
PlayClipAtPoint
Speelt een clip in de wereld af, en ruimt het object weer op als het klaar is met afspelen. Handig…
Code is:
AudioSource.PlayClipAtPoint(clip, new Vector3 (5, 1, 2));
Maar je kunt natuurlijk ook de positie van het ‘parent’-object gebruiken (bv. de speler). Je kunt ook nog het volume instellen.
AudioSource.PlayClipAtPoint(clip, transform.position); AudioSource.PlayClipAtPoint(clip, transform.position, volume);
Ik ben Sid. Hoe maak ik een synth voor livesynthese?
Met de Native Audio Plugin SDK, zie https://docs.unity3d.com/Manual/AudioMixerNativeAudioPlugin.html
Hoe maak ik Editor Extensies (Ruben)?
Zie https://docs.unity3d.com/Manual/ExtendingTheEditor.html
De FMOD integration is vernieuwd?
Sinds versie Ja, de oude code is bv.
FMOD_StudioSystem.instance.PlayOneShot(endOfTurbo, transform.position);
Vervang die door:
FMODUnity.RuntimeManager.PlayOneShot(endOfTurbo, transform.position);
of door het event direct aan te roepen:
MODUnity.RuntimeManager.PlayOneShot(“event:/endOfTurbo”, transform.position);
Als je geen OneShot afspeelt maar een studiosystem:
SlitScore = FMODUnity.RuntimeManager.CreateInstance(“{ba0fe66d-901b-415b-b672-e360a8b6cddc}”);
Het komt dus neer op een simpele find replace van de code!
Zie ook de migration guide (http://www.fmod.org/documentation/#content/generated/engine_new_unity/migration.html) maar let op: die beschrijft alleen C# en Angry Bots is in JS. Het editorscript dat belooft je code automatisch te updaten werkt alleen bij C#. JavaScript moet je zelf – handmatig – doen, maar Unity geeft met de errors precies aan waar de problemen zitten.