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