Ejemplo n.º 1
0
 public void SerializeState(ProjectBuffer buffer)
 {
     buffer.Serialize(ref length);
     buffer.Serialize(ref loop);
     buffer.Serialize(ref release);
     buffer.Serialize(ref values);
 }
Ejemplo n.º 2
0
        public void SerializeState(ProjectBuffer buffer)
        {
            if (buffer.IsWriting)
            {
                DeleteUnusedPatterns();
            }

            int patternCount = patterns.Count;

            buffer.Serialize(ref song);
            buffer.Serialize(ref patternCount);

            // At version 4 (FamiStudio 1.4.0) we added basic expansion audio.
            if (buffer.Version >= 4)
            {
                buffer.Serialize(ref type);
            }

            buffer.InitializeList(ref patterns, patternCount);
            foreach (var pattern in patterns)
            {
                pattern.SerializeState(buffer);
            }

            for (int i = 0; i < patternInstances.Length; i++)
            {
                buffer.Serialize(ref patternInstances[i], this);
            }

            if (buffer.IsReading && !buffer.IsForUndoRedo)
            {
                ClearPatternsInstancesPastSongLength();
            }
        }
Ejemplo n.º 3
0
        public void SerializeState(ProjectBuffer buffer)
        {
            buffer.Serialize(ref Value);
            buffer.Serialize(ref Flags);
            buffer.Serialize(ref Slide);
            buffer.Serialize(ref Instrument);
            buffer.Serialize(ref EffectMask);

            if ((EffectMask & EffectVolumeMask) != 0)
            {
                buffer.Serialize(ref FxVolume);
            }
            if ((EffectMask & EffectVibratoMask) != 0)
            {
                buffer.Serialize(ref FxVibrato);
            }
            if ((EffectMask & EffectSpeedMask) != 0)
            {
                buffer.Serialize(ref FxSpeed);
            }
            if ((EffectMask & EffectFinePitchMask) != 0)
            {
                buffer.Serialize(ref FxFinePitch);
            }
            if ((EffectMask & EffectFdsModSpeedMask) != 0)
            {
                buffer.Serialize(ref FxFdsModSpeed);
            }
            if ((EffectMask & EffectFdsModDepthMask) != 0)
            {
                buffer.Serialize(ref FxFdsModDepth);
            }
        }
Ejemplo n.º 4
0
        public void SerializeState(ProjectBuffer buffer)
        {
            buffer.Serialize(ref selectedSong);
            buffer.Serialize(ref selectedInstrument);
            buffer.Serialize(ref scrollY);

            if (buffer.IsReading)
            {
                CancelDrag();
                ClampScroll();
                ConditionalInvalidate();
            }
        }
Ejemplo n.º 5
0
        public void SerializeState(ProjectBuffer buffer)
        {
            buffer.Serialize(ref Value);
            buffer.Serialize(ref Flags);
            buffer.Serialize(ref Slide);
            buffer.Serialize(ref Instrument);
            buffer.Serialize(ref EffectMask);

            if ((EffectMask & EffectVolumeMask) != 0)
            {
                buffer.Serialize(ref FxVolume);
            }
            if ((EffectMask & EffectVibratoMask) != 0)
            {
                buffer.Serialize(ref FxVibrato);
            }
            if ((EffectMask & EffectSpeedMask) != 0)
            {
                buffer.Serialize(ref FxSpeed);
            }
            if ((EffectMask & EffectFinePitchMask) != 0)
            {
                buffer.Serialize(ref FxFinePitch);
            }
            if ((EffectMask & EffectFdsModSpeedMask) != 0)
            {
                buffer.Serialize(ref FxFdsModSpeed);
            }
            if ((EffectMask & EffectFdsModDepthMask) != 0)
            {
                buffer.Serialize(ref FxFdsModDepth);
            }
            if (buffer.Version >= 8 && (EffectMask & EffectDutyCycleMask) != 0)
            {
                buffer.Serialize(ref FxDutyCycle);
            }
            if (buffer.Version >= 8 && (EffectMask & EffectNoteDelayMask) != 0)
            {
                buffer.Serialize(ref FxNoteDelay);
            }
            if (buffer.Version >= 8 && (EffectMask & EffectCutDelayMask) != 0)
            {
                buffer.Serialize(ref FxCutDelay);
            }

            // At version 7 (FamiStudio 2.2.0) we added support for arpeggios.
            if (buffer.Version >= 7)
            {
                buffer.Serialize(ref Arpeggio);
            }
        }
Ejemplo n.º 6
0
 public void SerializeState(ProjectBuffer buffer)
 {
     buffer.Serialize(ref length);
     buffer.Serialize(ref loop);
     if (buffer.Version >= 3)
     {
         buffer.Serialize(ref release);
     }
     if (buffer.Version >= 4)
     {
         buffer.Serialize(ref relative);
     }
     buffer.Serialize(ref values);
 }
Ejemplo n.º 7
0
        public void SerializeState(ProjectBuffer buffer)
        {
            buffer.Serialize(ref Value);

            // At version 4(FamiStudio 1.4.0), we refactored the notes, added slide notes, vibrato and no-attack notes (flags).
            if (buffer.Version >= 4)
            {
                buffer.Serialize(ref Jump);
                buffer.Serialize(ref Skip);
                buffer.Serialize(ref Speed);
                buffer.Serialize(ref Vibrato);
                buffer.Serialize(ref Flags);
                buffer.Serialize(ref Slide);
            }
            else
            {
                byte effect      = 0;
                byte effectParam = 255;
                buffer.Serialize(ref effect);
                buffer.Serialize(ref effectParam);

                HasVibrato = false;
                HasJump    = false;
                HasSkip    = false;
                HasSpeed   = false;

                switch (effect)
                {
                case 1: Jump = effectParam; break;

                case 2: Skip = effectParam; break;

                case 3: Speed = effectParam; break;
                }
            }

            // At version 3 (FamiStudio 1.2.0), we added a volume track.
            if (buffer.Version >= 3)
            {
                buffer.Serialize(ref Volume);
            }
            else
            {
                Volume = Note.VolumeInvalid;
            }

            buffer.Serialize(ref Instrument);
        }
Ejemplo n.º 8
0
        public void SerializeState(ProjectBuffer buffer)
        {
            buffer.Serialize(ref Value);
            buffer.Serialize(ref Effect);
            buffer.Serialize(ref EffectParam);

            // At version 3 (FamiStudio 1.2.0), we added a volume track.
            if (buffer.Version >= 3)
            {
                buffer.Serialize(ref Volume);
            }
            else
            {
                Volume = Note.VolumeInvalid;
            }

            buffer.Serialize(ref Instrument);
        }
Ejemplo n.º 9
0
        public void SerializeState(ProjectBuffer buffer)
        {
            buffer.Serialize(ref selectedChannel);
            buffer.Serialize(ref scrollX);
            buffer.Serialize(ref zoomLevel);
            buffer.Serialize(ref minSelectedChannelIdx);
            buffer.Serialize(ref maxSelectedChannelIdx);
            buffer.Serialize(ref minSelectedPatternIdx);
            buffer.Serialize(ref maxSelectedPatternIdx);

            if (buffer.IsReading)
            {
                // TODO: This is overly aggressive. We should have the
                // scope on the transaction on the buffer and filter by that.
                InvalidatePatternCache();
                CancelDragSelection();
                ConditionalInvalidate();
            }
        }
Ejemplo n.º 10
0
        public void SerializeState(ProjectBuffer buffer)
        {
            buffer.Serialize(ref length);
            buffer.Serialize(ref loop);
            if (buffer.Version >= 3)
            {
                buffer.Serialize(ref release);
            }
            if (buffer.Version >= 4)
            {
                buffer.Serialize(ref relative);
            }
            buffer.Serialize(ref values);

            if (buffer.IsReading && !buffer.IsForUndoRedo)
            {
                FixBadEnvelopeLength();
            }
        }
Ejemplo n.º 11
0
        public void SerializeState(ProjectBuffer buffer)
        {
            if (buffer.IsWriting)
            {
                CleanupUnusedPatterns();
            }

            int patternCount = patterns.Count;

            buffer.Serialize(ref song);
            buffer.Serialize(ref patternCount);
            buffer.InitializeList(ref patterns, patternCount);

            foreach (var pattern in patterns)
            {
                pattern.SerializeState(buffer);
            }

            for (int i = 0; i < patternInstances.Length; i++)
            {
                buffer.Serialize(ref patternInstances[i], this);
            }
        }
Ejemplo n.º 12
0
        // Serialization for notes before version 5 (before FamiStudio 2.0.0)
        public void SerializeStatePreVer5(ProjectBuffer buffer)
        {
            buffer.Serialize(ref Value);

            // At version 5 (FamiStudio 2.0.0) we refactored the note effects.
            const int SpeedInvalid   = 0xff;
            const int VolumeInvalid  = 0xff;
            const int VibratoInvalid = 0xf0;

            // At version 5 (FamiStudio 2.0.0), we changed the numerical value of the release note.
            if (Value == 0xf7)
            {
                Value = Note.NoteRelease;
            }

            // At version 4 (FamiStudio 1.4.0), we refactored the notes, added slide notes, vibrato and no-attack notes (flags).
            if (buffer.Version >= 4)
            {
                buffer.Serialize(ref FxJump);
                buffer.Serialize(ref FxSkip);
                buffer.Serialize(ref FxSpeed);
                buffer.Serialize(ref FxVibrato);
                buffer.Serialize(ref Flags);
                buffer.Serialize(ref Slide);
            }
            else
            {
                byte effect      = 0;
                byte effectParam = 255;
                buffer.Serialize(ref effect);
                buffer.Serialize(ref effectParam);

                FxVolume  = VolumeInvalid;
                FxVibrato = VibratoInvalid;
                FxSpeed   = SpeedInvalid;

                switch (effect)
                {
                case 1: FxJump = effectParam; break;

                case 2: FxSkip = effectParam; break;

                case 3: FxSpeed = effectParam; break;
                }
            }

            // At version 3 (FamiStudio 1.2.0), we added a volume track.
            if (buffer.Version >= 3)
            {
                buffer.Serialize(ref FxVolume);
            }

            buffer.Serialize(ref Instrument);

            if (FxVolume != VolumeInvalid)
            {
                EffectMask |= EffectVolumeMask;
            }
            if (FxSpeed != SpeedInvalid)
            {
                EffectMask |= EffectSpeedMask;
            }
            if (FxVibrato != VibratoInvalid)
            {
                EffectMask |= EffectVibratoMask;
            }
        }
Ejemplo n.º 13
0
 public static void SerializeState(ProjectBuffer buffer)
 {
     buffer.Serialize(ref nextColorIdx);
 }