internal static AudioClip GetSound(Stinger sound) { if (!Instance.Stingers.Any(s => s.Type == sound)) { Debug.LogWarning("No sound for " + sound); return(null); } return(Rnd(Instance.Stingers.First(s => s.Type == sound).Audio)); }
public static MusicSegment ParseMusicSegment(byte[] data) { using (var reader = new BinaryReader(new MemoryStream(data))) { var musicSegment = new MusicSegment(data.Length); musicSegment.Id = reader.ReadUInt32(); musicSegment.MidiBehavior = (MidiInteractiveMusicBehavior)reader.ReadByte(); musicSegment.Properties = reader.ReadAudioProperties(); musicSegment.ChildCount = reader.ReadUInt32(); musicSegment.ChildIds = new uint[musicSegment.ChildCount]; for (var i = 0; i < musicSegment.ChildCount; i++) { musicSegment.ChildIds[i] = reader.ReadUInt32(); } musicSegment.GridPeriodTime = reader.ReadDouble(); musicSegment.GridOffsetTime = reader.ReadDouble(); musicSegment.Tempo = reader.ReadSingle(); musicSegment.TimeSignatureUpper = reader.ReadByte(); musicSegment.TimeSignatureLower = reader.ReadByte(); musicSegment.Unknown = reader.ReadByte(); musicSegment.StingerCount = reader.ReadUInt32(); musicSegment.Stingers = new Stinger[musicSegment.StingerCount]; for (var i = 0; i < musicSegment.StingerCount; i++) { Stinger stinger = default; stinger.TriggerId = reader.ReadUInt32(); stinger.SegmentId = reader.ReadUInt32(); stinger.PlayAt = (StingerKeyPoint)reader.ReadUInt32(); stinger.CueId = reader.ReadUInt32(); stinger.DoNotRepeatIn = reader.ReadUInt32(); stinger.AllowPlayingInNextSegment = reader.ReadUInt32() == 1; musicSegment.Stingers[i] = stinger; } musicSegment.EndTrimOffset = reader.ReadDouble(); musicSegment.MusicCueCount = reader.ReadUInt32(); musicSegment.MusicCues = new MusicCue[musicSegment.MusicCueCount]; for (var i = 0; i < musicSegment.MusicCueCount; i++) { MusicCue musicCue = default; musicCue.Id = reader.ReadUInt32(); musicCue.Time = reader.ReadDouble(); musicCue.CustomNameLength = reader.ReadUInt32(); if (musicCue.CustomNameLength > 0) { musicCue.CustomName = String.Concat(reader.ReadChars((int)musicCue.CustomNameLength - 1)); reader.BaseStream.Position++; // Skip null byte } musicSegment.MusicCues[i] = musicCue; } return(musicSegment); } }
public static MusicSwitchContainer ParseMusicSwitchContainer(byte[] data) { using (var reader = new BinaryReader(new MemoryStream(data))) { var musicSwitchContainer = new MusicSwitchContainer(data.Length); musicSwitchContainer.Id = reader.ReadUInt32(); musicSwitchContainer.MidiBehavior = (MidiInteractiveMusicBehavior)reader.ReadByte(); musicSwitchContainer.Properties = reader.ReadAudioProperties(); musicSwitchContainer.ChildCount = reader.ReadUInt32(); musicSwitchContainer.ChildIds = new uint[musicSwitchContainer.ChildCount]; for (var i = 0; i < musicSwitchContainer.ChildCount; i++) { musicSwitchContainer.ChildIds[i] = reader.ReadUInt32(); } musicSwitchContainer.GridPeriodTime = reader.ReadDouble(); musicSwitchContainer.GridOffsetTime = reader.ReadDouble(); musicSwitchContainer.Tempo = reader.ReadSingle(); musicSwitchContainer.TimeSignatureUpper = reader.ReadByte(); musicSwitchContainer.TimeSignatureLower = reader.ReadByte(); musicSwitchContainer.Unknown_1 = reader.ReadByte(); musicSwitchContainer.StingerCount = reader.ReadUInt32(); musicSwitchContainer.Stingers = new Stinger[musicSwitchContainer.StingerCount]; for (var i = 0; i < musicSwitchContainer.StingerCount; i++) { Stinger stinger = default; stinger.TriggerId = reader.ReadUInt32(); stinger.SegmentId = reader.ReadUInt32(); stinger.PlayAt = (StingerKeyPoint)reader.ReadUInt32(); stinger.CueId = reader.ReadUInt32(); stinger.DoNotRepeatIn = reader.ReadUInt32(); stinger.AllowPlayingInNextSegment = reader.ReadBoolean(); musicSwitchContainer.Stingers[i] = stinger; } musicSwitchContainer.TransitionCount = reader.ReadUInt32(); musicSwitchContainer.Transitions = new Transition[musicSwitchContainer.TransitionCount]; for (var i = 0; i < musicSwitchContainer.TransitionCount; i++) { Transition transition = default; transition.Unknown_1 = reader.ReadUInt32(); transition.SourceId = reader.ReadUInt32(); transition.Unknown_2 = reader.ReadUInt32(); transition.DestinationId = reader.ReadUInt32(); transition.FadeOutDuration = reader.ReadUInt32(); transition.FadeOutCurveShape = (BlendCurveShape)reader.ReadUInt32(); transition.FadeOutOffset = reader.ReadInt32(); transition.ExitSourceAt = (InteractiveMusicKeyPoint)reader.ReadUInt32(); transition.ExitSourceAtCueId = reader.ReadUInt32(); transition.PlayPostExit = reader.ReadByte() == 0xFF; transition.FadeInDuration = reader.ReadUInt32(); transition.FadeInCurveShape = (BlendCurveShape)reader.ReadUInt32(); transition.FadeInOffset = reader.ReadInt32(); transition.CustomCueFilterId = reader.ReadUInt32(); transition.JumpToPlaylistItemId = reader.ReadUInt32(); transition.DestinationSyncTo = (DestinationSyncTarget)reader.ReadUInt16(); transition.PlayPreEntry = reader.ReadByte() == 0xFF; transition.MatchSourceCueName = reader.ReadBoolean(); transition.UseTransitionSegment = reader.ReadBoolean(); if (transition.UseTransitionSegment) { transition.TransitionSegmentId = reader.ReadUInt32(); transition.TransitionFadeInDuration = reader.ReadUInt32(); transition.TransitionFadeInCurveShape = (BlendCurveShape)reader.ReadUInt32(); transition.TransitionFadeInOffset = reader.ReadInt32(); transition.TransitionFadeOutDuration = reader.ReadUInt32(); transition.TransitionFadeOutCurveShape = (BlendCurveShape)reader.ReadUInt32(); transition.TransitionFadeOutOffset = reader.ReadInt32(); transition.PlayTransitionPreEntry = reader.ReadByte() == 0xFF; transition.PlayTransitionPostExit = reader.ReadByte() == 0xFF; } musicSwitchContainer.Transitions[i] = transition; } musicSwitchContainer.ContinueOnSwitchChange = reader.ReadBoolean(); musicSwitchContainer.GroupCount = reader.ReadUInt32(); musicSwitchContainer.GroupIds = new uint[musicSwitchContainer.GroupCount]; for (var i = 0; i < musicSwitchContainer.GroupCount; i++) { musicSwitchContainer.GroupIds[i] = reader.ReadUInt32(); } musicSwitchContainer.GroupTypes = new GroupType[musicSwitchContainer.GroupCount]; for (var i = 0; i < musicSwitchContainer.GroupCount; i++) { musicSwitchContainer.GroupTypes[i] = (GroupType)reader.ReadByte(); } musicSwitchContainer.PathSectionLength = reader.ReadUInt32(); musicSwitchContainer.AssociationMode = (AssociationMode)reader.ReadByte(); musicSwitchContainer.Paths = reader.ReadPaths(musicSwitchContainer.PathSectionLength, musicSwitchContainer.ChildIds); return(musicSwitchContainer); } }