GAMS PRESENTATION

advertisement
AGATE
Adaptive, Generative Audio Tonal
Environment
Why do we want this?
• We want music because it can
support the emotional experience of
the player.
• But, repetitious or emotionally
inappropriate music can distract
the player from their actual
emotional experience.
The Nature of audio repetition
• Identical audio repetition =
bad (usually).
• The more traditionally
“composed” music is, the less
it bears repetition.
• Usual solutions?
– Buy MUCH music
– Hope no one notices until it is
too late
Money For Music
• Music = $1,500 / minute...
•Minimal coverage for 30-hour game:
30 minutes music = $45,000
MMO Money For Music
• MMO gameplay can easily exceed 1000
hours.
• Heavy usage: 7000 hours or more!
• Full coverage: all new music all
the time = 420,000 minutes of music
• 420,000 minutes of music =
$630,000,000.
Forget Games, Invade A Country!
ANSWER:
GENERATIVE MUSIC
• Think of it as wind chimes: Never
repeating but always familiar.
• Not good for highly-structured,
intensely-composed music
(“cinematic”).
• Very good at loosely-structured
static mood music (“ambient”).
• VERY well-suited to MMO game
environments.
Adaptive Generative Audio Tonal Environment
Composer
provides
Music
Sounds
provides
Music
Data
• Density
• Pitch
• Tempo
• Randomized
Sound selection
• etc.
informs
Game
Data
• Combat
• Time of day
• Weather
• Location
• Anything
Create
Audio
Output
plays
AGATE
controls
High-level
script from in-house
audio lead
What else?
•Sequences
•Keymapping
•Totally awesome lasers
•Etc.
AGATE = World Music
• Good for the background; the
primary voice and spirit of your
game world.
• Important: Vary the delivery of the
music:
– Fade your world music in and out.
– Bring in bits of more
traditionally-composed music to
accentuate specific things.
SO EASY AND LIGHT
• One programmer
• One audio designer
• Several weeks of less-than-100%
man-hours * two people, mostly
research and design-iteration
• System = < 10kbytes
• CPU usage is so small it is
difficult to measure
CHRISTOPHER MAYER
Contract Programmer
Adaptive Generative Audio Tonal Environment
Composer
provides
Music
Sounds
provides
Music
Data
• Density
• Pitch
• Tempo
• Randomized
Sound selection
• etc.
informs
Game
Data
• Combat
• Time of day
• Weather
• Location
• Anything
create
Audio
Output
plays
AGATE
controls
High-level
script from in-house
audio lead
WHERE DID THE TIME GO?
Edit Tool
AGATE
Game
hooks
1st - FMOD Events, AGATE 1, Game Hooks, Editor
2 months part time
2nd - XACT, AGATE 2, Editor
2 weeks part time
3rd - FMOD Ex, AGATE 3, Editor
5 hours
SAMPLE MOOD FILE
Soundbank: C:\Soundbanks\TestBank.fsb
Tempo:
360
Volume:
.5
GuitarG3
5
64
1
Seq
1
1
-1
1 -12
12 952
ViolaG3
20
16
2
Seq
.5
1
-1
1 -12
12 952
PianoG3
35
4
4 Chord .5
1
-1
1 -12
12 952
100
1
8 Chord .5
1
-1
1 -12
12 FFF
Snare
void main(int argc, char *argv[])
{
audioInit();
agateLoadMood(argv[1]);
while (!_kbhit())
{
agateLoop();
audioLoop();
}
agateUnloadMood();
audioExit();
}
void audioInit(void);
void audioLoop(void);
void audioExit(void);
void audioLoadSoundbank(const char *file);
void audioPlay(int index, float frequency, float volume, float
pan);
int audioGetIndex(const char *soundname);
typedef struct
{
int soundIndex;
int probability;
int nNotes;
int beat;
bool chord;
int nQueued;
float volMin, volMax;
float panMin, panMax;
int pitchMin, pitchMax;
int pitchScale;
int *pitchList;
int pitchListSize;
}
//
//
//
//
//
//
//
//
//
//
0 to 100
0 to ?
1 to ?
chord or sequence
0 to nNotes
0.0 to +1.0
-1.0 to +1.0
-12 to +12
12 bits
cents
AGATE_SOUND;
void agateLoadMood(const char *filename);
void agateUnloadMood(void);
void agateLoop(void);
void agatePlay(int i)
{
float
frequency = (float)_mood[i].pitchList[rand() %
_mood[i].pitchListSize];
float
volume = randFloat(_mood[i].volMin,
_mood[i].volMax);
float
pan = randFloat(_mood[i].panMin, _mood[i].panMax);
audioPlay(_mood[i].soundIndex, frequency, volume, pan);
}
void agateLoop(void) {
for (unsigned int i=0; i<_mood.size(); i++) {
if (_beat % _mood[i].beat) continue;
if (rand()%100 < _mood[i].probability)
if (_mood[i].chord)
for (int j=0; j<(rand()%_mood[i].nNotes)+1; j++)
agatePlay(i);
else if (_mood[i].nQueued == 0)
for (int j=0; j<(rand()%_mood[i].nNotes)+1; j++)
_mood[i].nQueued++;
if (_mood[i].nQueued) {
_mood[i].nQueued--;
agatePlay(i);
}
}
_beat++;
Sleep(60000/_tempo);
}
Who would compose music with this?
• Composer should be:
– Comfortable with non-linear, nontraditional music and methods
– Technically savvy (?)
– Games-oriented
– Familiar with ambient music
– Familiar with generative music
– Enjoys helping to design new
technology
JIM HEDGES
Independent Composer
and sound-designer
San Francisco, CA
How is this different from other
forms of adaptive music?




“Vertical” approach: Layering and cross
fading tracks
“Horizontal” approach: Starting and
stopping cues
Often the two are combined
Both approaches tend to rely on through
composed, long “stems”
How is this different from other
forms of adaptive music?



AGATE uses smaller elements, from short
clips to individual notes
It combines these elements both
horizontally and vertically i.e it starts/stops
and layers elements
It combines pre-determined elements with
probability and randomization
Why use middleware intended
for sound design?




This kind of music has much in common with
sound design approaches and practices
Avoiding repetition and producing variety while
retaining a recognizable identity
Collections of small elements, recombined at
run time using randomization and probability
AGATE leverages these strengths of sound
design middleware for creating music
Musical examples: Interlocking rhythm
Musical examples: Interlocking rhythm
Musical examples: Interlocking rhythm
Musical examples: Interlocking rhythm
Musical examples: Interlocking rhythm
Musical Examples: Timbre
Musical Examples: Melody
Prime
Musical Examples: Melody
Musical Examples: Melody
Prime
Musical Examples: Melody
Up
4
Prime
Musical Examples: Melody
Up
4
Prime
Down 4
Musical Examples: Melody
Up
4
Prime
Down 4
Musical Examples: Stingers
Conclusion: Impressions




Forces composer to think primarily in terms
of timbre, density and orchestration
A more “sound design” approach to
composition
Learn how to work with semi-randomness
Be comfortable adapting one's approach
during the compositional process
Conclusion: Impressions
• “Each thing you add modifies the whole set
of things that went before and you suddenly
find yourself at a place that you couldn't
possibly have conceived of, a place that's
strange and curious to you. That sense of
mystery, learning to live with it and make
use of it, is extremely important.”
- Brian Eno
HOW TO GET APPROVAL:
EXPLAIN WHAT PROBLEMS YOUR
AUDIO TECH WILL SOLVE
What this can do for the player and
for your company:
• It will make your players much less
likely to turn off the music or
even all the sound.
– Informal poll: Everquest guild of
100+ people: 92% said they had
music turned off, 74% said they
had ALL sound off!
What this can do for the player and
for your company:
• It will make the game directly,
viscerally pleasurable to play
– Better reviews
– Better word-of-mouth
• Infinite minutes of music in finite
storage and RAM
• Large coverage with very reasonable
amount of work from composer
What this can do for the player and
for your company:
• Increased sales for games with ingame purchase model. See Julian
Treasure’s “Sound Business” for
extensive research references.
AGATE: YOU LIKE IT
HERE
Or perhaps, “You like it hear”
Download