public void ScheduleNextMusic(AudioGroup group, int curMusicTransLoc = 0, int startSampleOffset = 0, int lengthInSamples = 0, bool bReplaceIfExists = false) { // TODO: Warn if channels/frequency not matching! // TODO: Validate AudioGroup (!group.IsEmpty())! if (!group.IsReady()) { group.InitLayerData(); // Delay this? } if (curMusic == null) { // Just play now. curMusic = group; curMusicTime = startSampleOffset - 1; // -1 to get the initial sample. bus.PlayAudio(group, startSampleOffset, lengthInSamples, bReplaceIfExists); } else if (transMusic == null || bReplaceIfExists) { if (bus.IsNextSongScheduled()) { // Next song is already in, meaning we're likely waiting for curSong to transition in. Save until buffers clear enough // to allow scheduling. if (!transInfo.bValid || bReplaceIfExists) { // Override or just make sure there's nothing there. transMusic = null; transMusicTime = 0; // Set up info for another try later! transInfo.bValid = true; transInfo.group = group; transInfo.curMusicTransLoc = curMusicTransLoc; transInfo.startSampleOffset = startSampleOffset; transInfo.lengthInSamples = lengthInSamples; transInfo.bReplaceIfExists = bReplaceIfExists; } else { Debug.LogWarning("MusicPlayer::ScheduleNextMusic() - Transition music already scheduled!"); } } else { // Set up the transition. transMusic = group; transMusicTime = startSampleOffset; // Koreography registration occurs later. That way we don't double-up or trigger unwanted samples until later. bus.PlayAudioScheduled(group, curMusicTransLoc, startSampleOffset, lengthInSamples, bReplaceIfExists); } } // else - don't do anything - we already have music scheduled and we were told NOT to replace it. }
public void PlayMusic(AudioGroup group, int startSampleOffset = 0, int lengthInSamples = 0, bool bReplaceIfExists = false) { // TODO: Warn if channels/frequency not matching! // TODO: Validate AudioGroup (!group.IsEmpty())! if (!group.IsReady()) { group.InitLayerData(); } if (curMusic != null) { transMusic = group; transMusicTime = startSampleOffset; } else { curMusic = group; curMusicTime = startSampleOffset - 1; // -1 to get the initial sample. } group.RegisterKoreography(); if (!bus.PlayAudio(group, startSampleOffset, lengthInSamples, bReplaceIfExists)) { Debug.LogWarning("PlayMusic() failed with group: " + group + ", likely something already in the AudioBus?"); } }