FIT CTU
Adam Vesecký
vesecky.adam@gmail.com
Lecture 6
Audio
Time Domain formats
Frequency Domain formats
Synth formats






Circuit abbreviations

Atari 800XL
IBM PC Speaker
Nintendo Entertainment System
Yamaha YM3812
Game boy Advance

Fast Tracker 2




Scales
Keys
Bassline

EastWest Symphonic Orchestra
Genre
Presentation
Usage
Monkey Island 2: LeChuck's Revenge (1991)
The Legend of Zelda: Ocarina of Time (1998)
F.E.A.R (2005)
League of Legends (2009)
Mass Effect 3 (2012)
Hellblade: Senua's Sacrifice (2017)

Tiles Hop

Guitar Hero

Dance Dance Revolution
Assets
Asset categories
Dynamics
Doom 2
Prince of Persia 2: Shadow and the flame


Features
Looped composition
Switching keys
Divided song
Mute the melody
Silence
Layered patterns
Cross-fade
Transition cue
Transition points

Monkey Island 2



Variability options

Ape Out (2019) - reactive music system
Types

Attenuation
Occlusion
Obstruction
Panning
HRTF
Ambisonics
Raytracing
Audio Engine
| 1 | OSStatus AudioDriverCoreAudio::output_callback(...) { |
| 2 | AudioDriverCoreAudio *ad = (AudioDriverCoreAudio *)inRefCon; |
| 3 | ... |
| 4 | for (unsigned int i = 0; i < ioData->mNumberBuffers; i++) { |
| 5 | AudioBuffer *abuf = &ioData->mBuffers[i]; |
| 6 | unsigned int frames_left = inNumberFrames; |
| 7 | int16_t *out = (int16_t *)abuf->mData; |
| 8 | |
| 9 | while (frames_left) { |
| 10 | unsigned int frames = MIN(frames_left, ad->buffer_frames); |
| 11 | ad->audio_server_process(frames, ad->samples_in.ptrw()); |
| 12 | |
| 13 | for (unsigned int j = 0; j < frames * ad->channels; j++) { |
| 14 | out[j] = ad->samples_in[j] >> 16; |
| 15 | } |
| 16 | |
| 17 | frames_left -= frames; |
| 18 | out += frames * ad->channels; |
| 19 | }; |
| 20 | }; |
| 21 | ... |
| 22 | return 0; |
| 23 | }; |
Audio engine pipeline
Node setup example

He who controls the past commands the future. He who commands the future conquers the past.Kane, C&C Red Alert