13static void au_bgm_stop_player(
BGMPlayer* player);
101 if (
bgmData->instruments != 0) {
110 if (player->
unk_58 != 0) {
115 au_bgm_stop_player(player);
145 songName =
event->songName;
146 variation =
event->variation;
149 if (player !=
NULL) {
151 duration =
event->duration;
228 if (player !=
NULL) {
230 au_bgm_stop_player(player);
247static void au_bgm_stop_player(
BGMPlayer* player) {
262 if (player !=
NULL) {
263 result = (songName == player->
songName);
293 if (player !=
NULL) {
341 variation =
update->variation;
350 if (songName ==
playerA->songName) {
354 if (
track->bgmReadPos != 0) {
361 playerA->globals->unk_globals_6C[variation].unk_5 =
playerA->priority;
362 playerA->globals->unk_globals_6C[variation].unk_4 = 1;
373 if (songName ==
playerA->songName) {
400 variation =
update->variation;
411 duration =
update->duration;
437 playerB->globals->unkSongName = songName;
438 playerB->globals->unkFadeTime = duration;
454 if (songName ==
playerB->songName) {
503 if (
update->songName != 0) {
505 if (player !=
NULL) {
547 player->
busId = busId;
566 temp->subTrackCoarseTune = 0;
567 temp->subTrackFineTune = 0;
568 temp->subTrackPan = 0;
569 temp->subTrackReverb = 0;
572 temp->segTrackVolume = 0x7F;
584 note->adjustedPitch = 0;
585 note->noteLength = 0;
587 note->noteVelocity = 0;
588 note->unk_note_17 = 0;
625 player->
fadeInfo.onCompleteCallback();
631 au_bgm_stop_player(player);
638 u16
mult = (
arg0->fadeInfo.curVolume.u16 *
arg0->fadeInfo.volScale.u16) >> 15;
642 s8 busId =
arg0->effectIndices[i];
701 track->subTrackVolume = 0x7FFF0000;
702 track->subTrackPan = 0x40;
703 track->subTrackReverb = 0;
705 track->subTrackCoarseTune = 0;
706 track->subTrackFineTune = 0;
707 track->segTrackVolume = 0x7F;
709 track->unkVolume = 0x7FFF0000;
712 track->detourLength = 0;
713 track->segTrackTune = 0;
714 track->trackTremoloTime = 0;
715 track->trackTremoloAmount = 0;
716 track->trackTremoloSpeed = 0;
717 track->subTrackVolumeStep = 0;
718 track->subTrackVolumeTarget = 0;
719 track->subTrackVolumeTime = 0;
720 track->unkVolumeStep = 0;
721 track->unkVolumeTarget = 0;
722 track->unkVolumeTime = 0;
728 track->polyphonicIdx = 0;
731 track->parentTrackIdx = 0;
740 note->pitchRatio = 2.0f;
742 note->noteVelocity = 0;
743 note->noteLength = 0;
744 note->tremoloTime = 0;
812 for (i = 0; i < 9; i++) {
825 }
else if (
A < 80000) {
903 }
else if (
depth < 4) {
940 track->parentTrackIdx = 0;
949 track->delayTime = 1;
961 track->unk_51 = count;
967 track->delayTime = 1;
996#define POST_BGM_READ() \
997if (track->detourLength != 0) {\
998 track->detourLength--;\
999 if (track->detourLength == 0) {\
1000 track->bgmReadPos = track->savedPos;\
1062 if (
track->bgmReadPos != 0) {
1079 if (
track->bgmReadPos != 0) {
1092 track->changed.volume = 1;
1094 track->changed.volume = 0;
1096 if (
track->subTrackVolumeTime != 0) {
1097 track->subTrackVolumeTime--;
1098 if (
track->subTrackVolumeTime == 0) {
1099 track->subTrackVolume =
track->subTrackVolumeTarget;
1101 track->subTrackVolume +=
track->subTrackVolumeStep;
1103 track->changed.volume = 1;
1105 if (
track->unkVolumeTime != 0) {
1106 track->unkVolumeTime--;
1107 if (
track->unkVolumeTime == 0) {
1108 track->unkVolume =
track->unkVolumeTarget << 0x10;
1112 track->changed.volume = 1;
1115 if (
track->delayTime <= 0) {
1117 while (
track->delayTime == 0) {
1123 if (
track->prevReadPos != 0) {
1125 track->prevReadPos = 0;
1145 noteVelocity = *(
track->bgmReadPos++);
1147 noteLength = *(
track->bgmReadPos++);
1149 if (!(noteLength < 0xC0)) {
1150 noteLength = (((
u8)noteLength & ~0xC0) << 8) + *(
track->bgmReadPos++) + 0xC0;
1154 if (
track->unk_5A == 0) {
1166 if (
track->polyphonicIdx >= 5) {
1182 if (
note->noteLength == 0) {
1210 note->noteLength = 0;
1230 if (noteVelocity > 0) {
1231 note->noteVelocity = noteVelocity + 1;
1233 note->noteVelocity = 0;
1235 note->noteLength = noteLength;
1236 if (
track->isDrumTrack) {
1248 voice->clientVolume = ((
1250 * (
track->segTrackVolume *
note->volume)) >> 0x10;
1251 note->adjustedPitch =
1253 +
track->subTrackCoarseTune
1254 +
track->subTrackFineTune
1255 -
note->ins->keyBase;
1275 * (
track->segTrackVolume *
note->noteVelocity)) >> 9;
1278 note->adjustedPitch =
1280 +
track->subTrackCoarseTune
1282 +
track->subTrackFineTune
1283 -
note->ins->keyBase;
1286 +
track->segTrackTune
1288 *
track->instrument->pitchRatio;
1290 if (
track->unk_57 != 0) {
1291 voice->pan = au_bgm_get_random_pan(player,
track->subTrackPan,
track->unk_57);
1297 if (
track->unk_4C != 0) {
1300 voice->envelope.cmdListPress =
track->envelope.cmdListPress;
1302 voice->envelope.cmdListRelease =
track->envelope.cmdListRelease;
1307 if (
note->noteLength >= 2) {
1308 note->unk_note_17 = 1;
1309 note->tremoloTime =
track->trackTremoloTime;
1311 note->tremoloAmount =
track->trackTremoloAmount;
1351 if (
track->unk_5A == 0) {
1355 if (
note->unk_note_17 == 0) {
1356 if (
note->noteLength > 0) {
1358 if (
note->noteLength == 0) {
1362 if (
track->isDrumTrack) {
1363 if (
track->changed.tune || (player->
detune != 0)) {
1365 if (
voice->pitchRatio !=
note->pitchRatio) {
1370 if (
track->changed.volume) {
1371 voice->clientVolume = (
1373 * (
track->subTrackVolume >> 0x15))
1374 * (
track->unkVolume >> 0x15)) >> 0x14)
1375 * (
track->segTrackVolume *
note->volume)) >> 0x10;
1379 if (
note->tremoloTime != 0) {
1380 if (
note->tremoloAmount != 0) {
1381 note->tremoloAmount--;
1385 note->unk_13 +=
track->trackTremoloSpeed;
1403 if (
voice->pitchRatio !=
note->pitchRatio) {
1408 }
else if (
track->changed.tune || (player->
detune != 0)) {
1411 if (
voice->pitchRatio !=
note->pitchRatio) {
1416 if (
track->changed.volume) {
1423 }
else if (
track->changed.pan ||
track->changed.reverb) {
1430 note->unk_note_17 = 0;
1442static const f32 padding[] = {0.0f};
1449 tempo = snd_bpm_to_tempo(player,
bpm);
1463 if (maxTempo <
ret) {
1465 }
else if (
ret == 0) {
1476 volume = volume << 0x18;
1500 if ((index < 4) && (busId < 0x80)) {
1527 volume = volume << 0x18;
1545 u32 volume =
arg0->seqCmdArgs.SubTrackVolume.value & 0x7F;
1548 volume = volume << 0x18;
1551 track->subTrackVolume = volume;
1560 volume = volume << 0x18;
1563 if (volume !=
track->subTrackVolume) {
1568 track->subTrackVolumeTime = time;
1569 track->subTrackVolumeTarget = volume;
1570 track->subTrackVolumeStep = (volume -
track->subTrackVolume) / time;
1618 track->trackTremoloTime = 0;
1650 volume = instrument->
volume & 0x7F;
1651 track->patch = patch;
1656 track->subTrackVolume = volume;
1657 track->subTrackPan = instrument->
pan & 0x7F;
1658 track->subTrackReverb = instrument->
reverb & 0x7F;
1661 track->changed.all |= 0x10101;
1668 if ((index < 4) && (busId >= 0)) {
1669 track->subtrackBusId = busId;
1685 track->bgmReadPos = readPos;
1701 track->isDrumTrack = args[2];
1703 if (
track->unk_4D != 0) {
1705 track->unkVolume = 0;
1706 for (i =
track->unk_52; i <
track->unk_53; i++) {
1713 if (
track->unk_4E != 0) {
1717 track->subTrackCoarseTune = 0;
1718 track->subTrackFineTune = 0;
1720 track->segTrackTune = 0;
1721 track->trackTremoloTime = 0;
1722 track->subTrackVolumeTime = 0;
1800 if (
track->unk_4E != 0) {
1838 s32
lo = (
seed >> 8) & 0x3F;
1839 s32
hi = (
seed << 4) & 0xC0;
1851 }
else if (
retPan >= 0x80) {
1866 s32
lo = (
seed >> 6) & 0xF;
1867 s32
hi = (
seed << 2) & 0xF0;
1885 s32
lo = (
seed >> 8) & 0x1F;
1898 s32
lo = (
seed >> 7) & 7;
1899 s32
hi = (
seed << 3) & 0xF8;
1908 s32 changed =
FALSE;
1912 if (songName != 0) {
1935 }
else if (rate < 0.25) {
1948 if (detune > 1200) {
1950 }
else if (detune < -2400) {
1960 if (
track->bgmReadPos != 0) {
1976 if (duration <= 0) {
1978 }
else if (duration > 1000) {
1982 track->unkVolumeTime = 0;
1985 track->unkVolumeTime = duration;
2010 s32 songName =
update->songName;
2011 s32 variation =
update->variation;
2014 if (songName != 0) {
2016 if (player !=
NULL) {
2020 if (
track->parentTrackIdx != 0) {
2022 if (variation != 0) {
2023 if (
track->unk_5A != 0) {
2041 if (
track->unk_5A == 0) {
void au_BGMCmd_EB_SubTrackReverb(BGMPlayer *player, BGMPlayerTrack *track)
void func_8004E880(BGMPlayer *player, s32 sampleRate, s32 divisor)
void au_BGMCmd_F6_TrackVolumeFade(BGMPlayer *player, BGMPlayerTrack *track)
void au_bgm_player_update_stop(BGMPlayer *player)
void au_BGMCmd_F4(BGMPlayer *player, BGMPlayerTrack *track)
void au_bgm_set_proximity_mix(s32 songName, u32 mix)
AuResult au_bgm_dispatch_player_event(SongUpdateEvent *event)
void au_BGMCmd_FD_EventTrigger(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F7_SubTrackReverbType(BGMPlayer *player, BGMPlayerTrack *track)
void func_80050900(BGMPlayer *player)
void au_BGMCmd_FC_Jump(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EE_SubTrackFineTune(BGMPlayer *player, BGMPlayerTrack *track)
BGMPlayer * au_bgm_get_player_with_song_name(s32 songString)
AuResult au_bgm_is_song_playing(s32 songName)
void au_BGMCmd_FE_Detour(BGMPlayer *player, BGMPlayerTrack *track)
AuResult func_8004DC80(s32 songName)
void(* SefCmdHandlers[])(SoundManager *, SoundPlayer *)
void au_BGMCmd_E3(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EA_SubTrackPan(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F2_TrackTremoloTime(BGMPlayer *player, BGMPlayerTrack *track)
u8 EnvelopeReleaseDefaultFast[]
void au_bgm_load_subsegment(BGMPlayer *player, u32 cmd)
void func_8004DFD4(AuGlobals *globals)
void au_bgm_update_main(BGMPlayer *player)
void au_BGMCmd_E5_MasterVolumeFade(BGMPlayer *player, BGMPlayerTrack *track)
void func_8004E844(BGMPlayer *player, s32 arg1)
void au_bgm_change_track_volume(BGMPlayer *player, s32 trackIdx, s16 time, u8 volume)
void func_8004E444(BGMPlayer *arg0)
AuResult func_8004DCB8(SongUpdateEvent *update, s32 clearChanged)
AuResult func_8004E0F4(SongUpdateEvent *update)
void au_bgm_player_read_segment(BGMPlayer *player)
void au_bgm_player_update_playing(BGMPlayer *player)
void au_bgm_set_track_volumes(BGMPlayer *player, u8 *trackVols, s32 mode)
void au_BGMCmd_F1_TrackTremoloSpeed(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E0_MasterTempo(BGMPlayer *player, BGMPlayerTrack *track)
BSS void(* CurrentSeqCmdHandler)(BGMPlayer *, BGMPlayerTrack *)
void au_bgm_set_effect_indices(BGMPlayer *player, u8 *list)
AuResult au_bgm_stop_song(s32 songName)
void au_bgm_update_fade(BGMPlayer *player)
void au_BGMCmd_E8_TrackOverridePatch(BGMPlayer *player, BGMPlayerTrack *track)
void au_bgm_player_initialize(BGMPlayer *player)
void au_BGMCmd_F0_TrackTremolo(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EC_SegTrackVolume(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E9_SubTrackVolume(BGMPlayer *arg0, BGMPlayerTrack *track)
void au_BGMCmd_NOP(BGMPlayer *player, BGMPlayerTrack *track)
AuResult func_8004DB4C(SongUpdateEvent *s)
AuResult func_8004DE2C(SongUpdateEvent *update)
void au_bgm_stop_all(void)
void au_BGMCmd_E2_MasterPitchShift(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F5_TrackVoice(BGMPlayer *player, BGMPlayerTrack *track)
void au_bgm_end_segment_loop(BGMPlayer *player, u32 cmd)
void au_BGMCmd_E6_MasterEffect(BGMPlayer *player, BGMPlayerTrack *track)
AuResult func_80050970(SongUpdateEvent *update)
void au_BGMCmd_FF(BGMPlayer *player, BGMPlayerTrack *track)
s32 func_8004DB28(BGMPlayer *player)
void au_bgm_set_playback_rate(BGMPlayer *player, f32 rate)
s32 au_bgm_player_update_main(BGMPlayer *player)
void(* SeqCmdHandlers[])(BGMPlayer *, BGMPlayerTrack *)
void au_BGMCmd_ED_SubTrackCoarseTune(BGMPlayer *player, BGMPlayerTrack *track)
void func_80050888(BGMPlayer *player, BGMPlayerTrack *track, s32 target, s32 duration)
void au_bgm_player_set_detune(BGMPlayer *player, s32 detune)
void au_bgm_player_init(BGMPlayer *player, s32 priority, s32 busId, AuGlobals *globals)
void au_BGMCmd_E1_MasterVolume(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_F3_TrackTremoloStop(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_E4_MasterTempoFade(BGMPlayer *player, BGMPlayerTrack *track)
void au_BGMCmd_EF_SegTrackTune(BGMPlayer *player, BGMPlayerTrack *track)
void au_reset_voice(AuVoice *voice, u8 voiceIdx)
Instrument * au_get_instrument(AuGlobals *globals, u32 bank, u32 patch, EnvelopeData *envData)
void func_80053B04(Fade *fade, u32 arg1, s32 target)
AuResult func_80053E58(s32 songID, BGMHeader *bgmFile)
void au_fade_set_volume(u8 busId, u16 volume, s32 busVolume)
f32 au_compute_pitch_ratio(s32 pitch)
BGMPlayer * func_80053F64(s32 arg0)
BGMPlayer * func_80054248(u8 arg0)
void au_fade_init(Fade *fade, s32 time, s32 startValue, s32 endValue)
void au_copy_words(void *src, void *dst, s32 size)
void au_fade_clear(Fade *fade)
void au_fade_set_vol_scale(Fade *fade, s16 value)
void func_80055110(BGMPlayer *player)
void bgm_trigger_music_event(s32 playerID, s32 trackIndex, s32 eventInfo)
BSS s32 PopupMenu_SelectedIndex
struct SeqArgs::@80 SubTrackReverbType
BGMInstrumentInfo * instrumentsInfo
struct BGMHeader * bgmFile
struct SeqArgs::@64 MasterVolumeFade
SoundManager * soundManager
struct SeqArgs::@82 EventTrigger
struct SeqArgs::@61 MasterPitchShift
struct SeqArgs::@66 TrackOverridePatch
struct SeqArgs::@74 TrackTremolo
#define BGM_DEFAULT_TEMPO
struct SeqArgs::@68 SubTrackPan
struct SeqArgs::@75 TrackTremoloSpeed
struct SeqArgs::@71 SubTrackCoarseTune
struct SeqArgs::@70 SegTrackVolume
SoundManager90 bgmSounds[4]
struct SeqArgs::@73 SegTrackTune
struct SeqArgs::@59 MasterTempo
#define AU_FILE_RELATIVE(base, offset)
SegData * subSegmentStartPos
BGMInstrumentInfo * dataPRG
struct BGMPlayer * unk_74
struct SeqArgs::@69 SubTrackReverb
@ AU_VOICE_SYNC_FLAG_PAN_FXMIX
@ AU_VOICE_SYNC_FLAG_PITCH
@ BGM_PLAY_STATE_NEXT_SUBSEG
struct SeqArgs::@79 TrackVolumeFade
#define BGM_SEGMENT_LABEL
struct SeqArgs::@83 Detour
struct SeqArgs::@84 UnkCmdFF
struct BGMHeader * dataBGM[2]
BGMInstrumentInfo defaultPRGEntry
struct BGMPlayer * unk_78
struct SeqArgs::@77 UnkCmdF4
struct SeqArgs::@65 MasterEffect
struct SeqArgs::@62 UnkCmdE3
SegData * segActiveLoopEndPos[4]
BGMPlayerTrack tracks[16]
struct SeqArgs::@76 TrackTremoloTime
SegData * segmentStartPos
AuEffectChange effectChanges[4]
struct SeqArgs::@60 MasterVolume
@ AU_VOICE_ENV_FLAG_KEY_RELEASED
@ AU_VOICE_ENV_FLAG_VOL_CHANGED
SegData * segLoopStartLabels[32]
struct SeqArgs::@78 SetTrackVoice
struct SeqArgs::@63 MasterTempoFade
struct SeqArgs::@72 SubTrackFineTune
@ AU_ERROR_NULL_SONG_NAME
@ AU_ERROR_SONG_NOT_PLAYING
@ AU_ERROR_INVALID_SONG_DURATION