How to do adaptive music

Here's how to change BGM track volumes dynamically in response to gameplay. call bgm_set_track_volumes with the music player (probably 0) and an enum MusicTrackVols, which maps to data in snd_song_get_track_volumes_set the specified tracks will fade to the specified volumes over 48 ticks use snd_song_clear_track_volumes with the same arguments to undo to use a custom struct without modifying the enum and snd func, you can call this private func directly au_bgm_set_track_volumes(bgmPlayer, trackVols, FALSE) example: jan_02_1_music.c calls an api func that eventually uses the following track volume data
u8 D_80078DB8[] = {
// track, volume
2, 94,
3, 80,
4, 100,
5, 84,
0 // terminator
};
u8 D_80078DB8[] = {
// track, volume
2, 94,
3, 80,
4, 100,
5, 84,
0 // terminator
};
ShyBlookster137
ShyBlookster137143d ago
random alex tech I dig it
bates64
bates64143d ago
more directly
// get a bgm player
s32 songName = ASCII_TO_U32('1', '0', '3', ' '); // internal song name in bgm header
BGMPlayer* player;
BGMHeader* file;
AuResult = snd_song_get_playing_info(songName, &file, &player);
ASSERT(status == AU_RESULT_OK);

// manually fade a track volume
BGMPlayerTrack* track = &player->tracks[i - 1];
player->seqCmdArgs.TrackVolumeFade.time = 48;
player->seqCmdArgs.TrackVolumeFade.value = 100;
if (track->bgmReadPos != 0) {
au_BGMCmd_F6_TrackVolumeFade(player, track);
}
// get a bgm player
s32 songName = ASCII_TO_U32('1', '0', '3', ' '); // internal song name in bgm header
BGMPlayer* player;
BGMHeader* file;
AuResult = snd_song_get_playing_info(songName, &file, &player);
ASSERT(status == AU_RESULT_OK);

// manually fade a track volume
BGMPlayerTrack* track = &player->tracks[i - 1];
player->seqCmdArgs.TrackVolumeFade.time = 48;
player->seqCmdArgs.TrackVolumeFade.value = 100;
if (track->bgmReadPos != 0) {
au_BGMCmd_F6_TrackVolumeFade(player, track);
}