Maris Tammik

Audio Programmer

Work

I work full time as an audio programmer at A Shell In The Pit Audio where I develop our audio tool chain. This is being accomplished in pure C# while I'm learning the C++ programming language for wider engine support and lower level control over audio rendering.

TAT

Unity audio extension (2016)

My first audio related programming project was TAT (Tammik AAudio Toolkit). Based on the Unity 3D audio engine's "AudioSource" it extended the engine's audio functionality immensely with "AudioClip", volume & pitch randomization, sequencing, 3D spatialization for VR & AR, cross-fading, layering/blending of sounds through real time parameter control & last but not least voice-management.

Moona

Unity 3D audio middleware tool (early 2017 - present)

Moona is the spiritual successor of TAT (see above) and is an evolution of the same concepts. The difference being that I have learned a lot about software architecture since I start programming and I am incorporating what I learn everyday into make the tool as stable and easy to use as possible. As proprietary audio tool for A Shell In The Pit Audio it is driving the sound experiences for our clients – on mobile, consoles and Virtual Reality.

Moona – like TAT before it – wraps the Unity 3D AudioSource class. Resources are pooled and a intricate voice management system ensure that the most important sounds are heard at any given moment.

Moona Inspector

Auditioning a container blend behaviour without entering PlayMode more screen shots

For Audio Artists

The tools I develop get used in a wide variety of projects across many versions of Unity. I supply in editor auditioning and all the creative freedom over audio behaviour our sound designer require to create compelling game audio.

For Programmers

Moonas API is designed to be simple – yet powerful. MObject are audio behaviours authored by the sound designer. It might be a single looping sound or a complex hierarchy of nested structures. All the programmer has to do is to invoke the Play() method and Moona will handle the rest. To control audio behaviour past the initial trigger Moona hands out MHandles which allow re-positioning or re-parenting, stopping as well as instance based parameter control (along side the global parameter system).