Пример #1
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                var signature = Encoding.ASCII.GetString(reader.ReadBytes(33));
                var reserved  = reader.ReadBytes(2);
                var tag       = reader.ReadByte();
                var version   = reader.ReadByte();

                var PC        = reader.ReadUInt16();
                var A         = reader.ReadByte();
                var X         = reader.ReadByte();
                var Y         = reader.ReadByte();
                var PSW       = reader.ReadByte();
                var SP        = reader.ReadByte();
                var reserved2 = reader.ReadBytes(2);

                return(new
                {
                    Signature = signature,
                    Reserved = reserved,
                    Tag = tag,
                    Version = version,
                    PC,
                    A,
                    X,
                    Y,
                    PSW,
                    SP,
                    Reserved2 = reserved2
                });
            }
        }
Пример #2
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = Offset;

                var tag     = reader.ReadBytes(3);
                var version = reader.ReadBytes(2);
                var flags   = reader.ReadByte();
                var size    = reader.ReadBytes(4);

                var length = size[0] << 21 | size[1] << 14 | size[2] << 7 | size[3];

                var tags = reader.ReadBytes(length);

                return(new
                {
                    Position = Offset,
                    Tag = tag,
                    Version = version,
                    Flags = flags,
                    Size = length
                });
            }
        }
Пример #3
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = 14;

                var length               = reader.ReadUInt32();
                var width                = reader.ReadInt32();
                var height               = reader.ReadInt32();
                var planeCount           = reader.ReadUInt16();
                var bitsPerPixel         = reader.ReadUInt16();
                var compression          = reader.ReadUInt32();
                var dataLength           = reader.ReadUInt32();
                var horizontalResolution = reader.ReadUInt32();
                var verticalResolution   = reader.ReadUInt32();
                var paletteEntryCount    = reader.ReadUInt32();
                var importantColors      = reader.ReadUInt32();

                return(new
                {
                    Length = length,
                    Width = width,
                    Height = height,
                    PlaneCount = planeCount,
                    BitsPerPixel = bitsPerPixel,
                    Compression = compression,
                    DataLength = dataLength,
                    HorizontalResolution = horizontalResolution,
                    VerticalResolution = verticalResolution,
                    PaletteEntryCount = paletteEntryCount,
                    ImportantColors = importantColors
                });
            }
        }
Пример #4
0
        public override void Reload()
        {
            Nodes.Clear();

            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = 0x100 + Start;

                var block = 0;

                while (true)
                {
                    var header = reader.ReadByte();

                    var range  = header >> 4;
                    var filter = (header >> 2) & 0x3;
                    var loop   = (header & 0x2) != 0;
                    var end    = (header & 0x1) != 0;

                    var data    = reader.ReadBytes(8);
                    var samples = data.SelectMany(x => new int[] { SignedNibbleToInt(x >> 4), SignedNibbleToInt(x & 0xf) }).ToArray();

                    Nodes.Add(new SpcCompressedAudioBlock {
                        Text = block.ToString(), Range = range, Filter = filter, Loop = loop, End = end, Samples = samples
                    });

                    block++;

                    if (end)
                    {
                        break;
                    }
                }
            }
        }
Пример #5
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = Position;

                var groupID = Encoding.ASCII.GetString(reader.ReadBytes(4));
                var length  = reader.ReadUInt32();

                var format                = reader.ReadUInt16();
                var channelCount          = reader.ReadUInt16();
                var samplesPerSecond      = reader.ReadUInt32();
                var averageBytesPerSecond = reader.ReadUInt32();
                var blockAlignment        = reader.ReadUInt16();
                var bitsPerSample         = reader.ReadUInt16();

                return(new
                {
                    Format = format,
                    ChannelCount = channelCount,
                    SamplesPerSecond = samplesPerSecond,
                    AverageBytesPerSecond = averageBytesPerSecond,
                    BlockAlignment = blockAlignment,
                    BitsPerSample = bitsPerSample
                });
            }
        }
Пример #6
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = Offset;

                var header = reader.ReadBytes(4);

                var version = (header[1] >> 3) & 0x03;
                var layer   = (header[1] >> 1) & 0x03;
                var noCrc   = header[1] & 0x01;

                var bitRate     = (header[2] >> 4) & 0x0f;
                var sampleRate  = (header[2] >> 2) & 0x03;
                var padding     = (header[2] >> 1) & 0x01;
                var privateFlag = header[2] & 0x01;

                var channelMode     = (header[3] >> 6) & 0x02;
                var msStereo        = (header[3] >> 4) & 0x01;
                var intensityStereo = (header[3] >> 3) & 0x01;
                var copyright       = (header[3] >> 2) & 0x01;
                var original        = (header[3] >> 1) & 0x01;
                var emphasis        = (header[3] >> 0) & 0x01;

                var bitRates    = new int[] { 0, 8000, 16000, 24000, 32000, 40000, 48000, 56000, 64000, 80000, 96000, 112000, 128000, 144000, 160000 };
                var sampleRates = new int[] { 22050, 24000, 16000 };

                if (bitRate < bitRates.Length &&
                    sampleRate < sampleRates.Length &&
                    bitRates[bitRate] != 0)
                {
                    bitRate    = bitRates[bitRate];
                    sampleRate = sampleRates[sampleRate];
                }

                return(new
                {
                    Version = version,
                    Layer = layer,
                    NoCRC = noCrc,
                    BitRate = bitRate,
                    SampleRate = sampleRate,
                    Padding = padding,
                    Private = privateFlag,
                    ChannelMode = channelMode,
                    MSStereo = msStereo,
                    IntensityStereo = intensityStereo,
                    Copyright = copyright,
                    Original = original,
                    Emphasis = emphasis,
                    Position = Offset
                });
            }
        }
Пример #7
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = 0x10100;

                var dspRegisters = reader.ReadBytes(128);

                return(new
                {
                    DspRegisters = dspRegisters
                });
            }
        }
Пример #8
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = Position;

                var groupID = Encoding.ASCII.GetString(reader.ReadBytes(4));
                var length  = reader.ReadUInt32();

                return(new
                {
                    Data = reader.ReadBytes((int)length)
                });
            }
        }
Пример #9
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                var groupID    = Encoding.ASCII.GetString(reader.ReadBytes(4));
                var fileLength = reader.ReadUInt32();
                var type       = Encoding.ASCII.GetString(reader.ReadBytes(4));

                return(new
                {
                    GroupID = groupID,
                    FileLength = fileLength,
                    Type = type
                });
            }
        }
Пример #10
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = 0;

                var signature  = Encoding.ASCII.GetString(reader.ReadBytes(2));
                var length     = reader.ReadUInt32();
                var reserved   = reader.ReadBytes(4);
                var dataOffset = reader.ReadUInt32();

                return(new
                {
                    Signature = signature,
                    Length = length,
                    Reserved = reserved,
                    DataOffset = dataOffset
                });
            }
        }
Пример #11
0
        public override void Reload()
        {
            Nodes.Clear();

            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = 0x1015d;

                var sourceDirectory = reader.ReadByte() * 0x100;

                reader.BaseStream.Position = 0x100 + sourceDirectory;

                for (var entry = 0; entry < 256; entry++)
                {
                    var start = reader.ReadUInt16();
                    var loop  = reader.ReadUInt16();

                    Nodes.Add(new SpcDirectoryEntry {
                        Text = entry.ToString("X2") + ((loop - start) < 0 ? " (Invalid)" : string.Empty), Start = start, Loop = loop, Source = Source
                    });
                }
            }
        }
Пример #12
0
        public override object GetProperties()
        {
            using (var reader = new BinaryReader(Source.GetStream()))
            {
                reader.BaseStream.Position = 10;

                var dataOffset           = reader.ReadUInt32();
                var length               = reader.ReadUInt32();
                var width                = reader.ReadInt32();
                var height               = reader.ReadInt32();
                var planeCount           = reader.ReadUInt16();
                var bitsPerPixel         = reader.ReadUInt16();
                var compression          = reader.ReadUInt32();
                var dataLength           = reader.ReadUInt32();
                var horizontalResolution = reader.ReadUInt32();
                var verticalResolution   = reader.ReadUInt32();
                var paletteEntryCount    = reader.ReadUInt32();
                var importantColors      = reader.ReadUInt32();

                reader.BaseStream.Position = dataOffset;

                var flip = false;

                if (height < 0)
                {
                    height = -height;
                    flip   = true;
                }

                var pixels = new Color[width * height];

                for (var y = 0; y < height; y++)
                {
                    for (var x = 0; x < width; x++)
                    {
                        Color pixel;

                        switch (bitsPerPixel)
                        {
                        case 24:
                            var values = reader.ReadBytes(3);

                            pixel = Color.FromArgb(values[2], values[1], values[0]);
                            break;

                        default:
                            pixel = Color.Black;
                            break;
                        }

                        if (flip)
                        {
                            pixels[(y * width) + x] = pixel;
                        }
                        else
                        {
                            pixels[((height - y - 1) * width) + x] = pixel;
                        }
                    }
                }

                return(new
                {
                    Pixels = pixels
                });
            }
        }