Exemplo n.º 1
0
    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));
    }
Exemplo n.º 2
0
        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);
            }
        }
Exemplo n.º 3
0
        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);
            }
        }