public void SerializeState(ProjectBuffer buffer) { buffer.Serialize(ref length); buffer.Serialize(ref loop); buffer.Serialize(ref release); buffer.Serialize(ref values); }
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(); } }
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); } }
public void SerializeState(ProjectBuffer buffer) { buffer.Serialize(ref selectedSong); buffer.Serialize(ref selectedInstrument); buffer.Serialize(ref scrollY); if (buffer.IsReading) { CancelDrag(); ClampScroll(); ConditionalInvalidate(); } }
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); } }
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); }
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); }
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); }
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(); } }
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(); } }
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); } }
// 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; } }
public static void SerializeState(ProjectBuffer buffer) { buffer.Serialize(ref nextColorIdx); }