private void HandlePlayRequest(TracklistEntry entry, float timeSkip) { float fadeTime = entry.GetEntranceFadeTime(); ITrack nextTrack = entry.GetTrack(); currentOutput.FadeOut(fadeTime); // This even fires as the track is fading out, not strictly as it ends. Good enough for our purposes. // if (TrackEndsEvent != null) { // TrackEndsEvent (currentOutput.GetTrack ()); // } currentOutput = GetOutputForNewEntry(entry); currentOutput.SetTrack(nextTrack); // safety LoadTrackIfNeeded(nextTrack); currentOutput.FadeIn(fadeTime); if (NewTrackBeginsEvent != null) { NewTrackBeginsEvent(nextTrack); } if (timeSkip != 0) { Diglbug.Log("TracklistPlayer Skipping to catch up with signal delay: " + timeSkip, PrintStream.AUDIO_PLAYBACK); currentOutput.SetTrackTime(timeSkip); } else { Diglbug.Log("TracklistPlayer timeSkip neglibile", PrintStream.AUDIO_PLAYBACK); } }
private int IndexOfEntryInTracklist(TracklistEntry entry) { for (int k = 0; k < tracklist.entries.Length; k++) { if (entry == tracklist.entries [k]) { return(k); } } return(-1); }
private TrackOutput GetOutputForNewEntry(TracklistEntry entry) { if (entry is VideoTracklistEntry) { return(videoSystem); } else { multiPlayer.SwitchTracks(); return(multiPlayer); } }
private void PlayTrackEntryAtIndex(int index, float timeSkip) { if (index < tracklist.entries.Length) { trackIndex = index; TracklistEntry entry = tracklist.GetTrackEntryAtIndex(index); HandlePlayRequest(entry, timeSkip); } else { Diglbug.Log("Refused to play track at invalid index: " + index); } }
// public for rehearsal controls scrub. public void PlayTrackEntry(TracklistEntry entry, float timeSkip) { int requestedIndex = IndexOfEntryInTracklist(entry); if (requestedIndex != -1) { if (!IsExpectedIndex(requestedIndex)) { Diglbug.Log("Detected unorthodox track request (" + requestedIndex + ") - unloading previously loaded tracks", PrintStream.MEDIA_LOAD); UnloadAllTracksExcept(entry.GetTrack()); } PlayTrackEntryAtIndex(requestedIndex, timeSkip); } else { Diglbug.LogError("Requested play of TrackEntry failed - entry not initialised in the Tracklist player's Tracklist"); } }
public void Rehearse_SkipToProgress(float p) { float destTime = totalActingLength * p; for (int k = 0; k < acts.Length; k++) { if (destTime - acts [k].GetActingLength() < 0f) { TracklistEntry entry = acts [k].GetEntryAtActTime(destTime); float delay = acts [k].GetSpecificEntryTimeAtActTime(entry, destTime); player.PlayTrackEntry(entry, delay); return; } else { destTime -= acts [k].GetActingLength(); } } }
private IEnumerator PlayActWhenLoaded(ActSignalBundle asb) { Act a = asb.act; Signal s = asb.signal; int timeToSkip = SignalUtils.GetSignalTimeOffset(s.GetSignalTime()); TracklistEntry toPlay = a.GetEntryAtActTime(timeToSkip); LoadTrackIfNeeded(toPlay.GetTrack()); while (!toPlay.GetTrack().IsLoaded()) { yield return(null); } // RecoveryManager.Instance.RecoveryComplete ();// TODO: Move this somewhere nicer. Maybe sub. int postLoadTimeToSkip = SignalUtils.GetSignalTimeOffset(s.GetSignalTime()); float timeToPlayFrom = a.GetSpecificEntryTimeAtActTime(toPlay, postLoadTimeToSkip); PlayTrackEntry(toPlay, timeToPlayFrom); }
public float GetSpecificEntryTimeAtActTime(TracklistEntry entry, float time) { float totalTime = time; TracklistEntry te; for (int k = 0; k < trackEntries.Length; k++) { te = trackEntries [k]; if (te == entry) { return(Mathf.Min(totalTime, te.GetTrackLength() - 0.1f)); } else { totalTime -= te.GetTrackLength(); } } // else, we mustn't have found the track here :( Diglbug.LogError("GetSpecificEntryTimeAtActTime request in " + name + " track not present " + entry.name); return(-1f); }
private IEnumerator SendWhenLoaded(ActBoolBundle abb) { Act a = abb.act; bool forced = abb.b; TracklistEntry toPlay = a.GetFirstTracklistEntry(); // SetTrack (toPlay.GetTrack ()); LoadTrackIfNeeded(toPlay.GetTrack()); while (!toPlay.GetTrack().IsLoaded()) { yield return(null); } if (forced) { Payload toSend = actSet.GetPayloadForDefinedAct(a.definedAct); Diglbug.Log("Forcing Payload Send from TracklistPlayer " + toSend); BLE.Instance.Manager.ForceSendPayload(toSend); } else { Diglbug.Log("Sending Expected from TracklistPlayer "); BLE.Instance.Manager.SendExpectedPayload(); } }
public void PlayTrackEntry(TracklistEntry entry) { PlayTrackEntry(entry, 0f); }
public void TracklistItemChosen(int i) { TracklistEntry toPlay = GetEntryAtIndex(i); player.PlayTrackEntry(toPlay); }