private static void WriteSound(BinaryWriter writer, Sound sound)
 {
     writer.Write(sound.Name);
     writer.Write(sound.Approved);
     writer.Write(sound.Data.LongLength);
     writer.Write(sound.Data);
     writer.Write(sound.FilePath);
     writer.Write(sound.IsMuted);
     writer.Write(sound.Looped);
     writer.Write(sound.Instances.HasValue ? sound.Instances.Value : int.MinValue);
     writer.Write(sound.Pan.HasValue ? sound.Pan.Value : float.MinValue);
     writer.Write(sound.Pitch.HasValue ? sound.Pitch.Value : float.MinValue);
     writer.Write(sound.Volume.HasValue ? sound.Volume.Value : float.MinValue);
     writer.Write(sound.FileLastModified.ToBinary());
 }
        private static void ReadSound(BinaryReader reader, INode cue)
        {
            var name = reader.ReadString();
            var approved = reader.ReadBoolean();
            var dataLength = reader.ReadInt64();
            var data = new byte[dataLength];
            for (var j = 0; j < dataLength; j++)
            {
                data[j] = reader.ReadByte();
            }
            var filePath = reader.ReadString();
            var isMuted = reader.ReadBoolean();
            var looped = reader.ReadBoolean();
            var instances = reader.ReadInt32();
            var pan = reader.ReadSingle();
            var pitch = reader.ReadSingle();
            var volume = reader.ReadSingle();
            var fileLastModified = reader.ReadInt64();

            // Add parent first
            var sound = new Sound(data)
            {
                Parent = cue
            };
            cue.Children.Add(sound);

            sound.Approved = approved;
            sound.Name = name;
            sound.FilePath = filePath;
            sound.IsMuted = isMuted;
            sound.Looped = looped;
            sound.Instances = instances == int.MinValue ? (int?) null : instances;
            sound.Pan = pan == float.MinValue ? (float?) null : pan;
            sound.Pitch = pitch == float.MinValue ? (float?)null : pitch;
            sound.Volume = volume == float.MinValue ? (float?)null : volume;
            sound.FileLastModified = DateTime.FromBinary(fileLastModified);
        }