Exemple #1
0
        public override ImageData Read(IBinaryStream file, ImageMetaData info)
        {
            var reader = new CgfDecoder(file, (CgfMetaData)info);
            var pixels = reader.Unpack();

            return(ImageData.Create(info, reader.Format, null, pixels));
        }
Exemple #2
0
        public override Stream OpenEntry(ArcFile arc, Entry entry)
        {
            if (!entry.Name.HasExtension(".snr") ||
                !arc.File.View.AsciiEqual(entry.Offset, "SNR\x1A"))
            {
                return(base.OpenEntry(arc, entry));
            }
            try
            {
                var data = arc.File.View.ReadBytes(entry.Offset + 12, entry.Size - 12);
                DecryptSnr(data);
                CgfDecoder.Decrypt(data, data.Length);
//                uint checksum = LittleEndian.ToUInt32 (data, 0);
//                uint crc = Crc32Normal.Compute (data, 4, data.Length-4);
                var input = new MemoryStream(data, 4, data.Length - 4);
                return(new ZLibStream(input, CompressionMode.Decompress));
            }
            catch
            {
                return(base.OpenEntry(arc, entry));
            }
        }
Exemple #3
0
        public override SoundInput TryOpen(IBinaryStream file)
        {
            var header       = file.ReadHeader(0x23);
            int bits1_length = header.ToInt32(0x13);
            int bits2_length = header.ToInt32(0x17);
            var data         = file.ReadBytes(bits1_length + bits2_length);

            CgfDecoder.Decrypt(data, bits1_length);

            int  unpacked_length = header.ToInt32(5);
            uint sample_rate     = header.ToUInt32(0xD);
            int  sample_count    = unpacked_length >> 1;
            var  bits1           = new byte[(sample_count + 7) >> 3];
            var  bits2           = new byte[sample_count >> 1];

            using (var mem = new MemoryStream(data, 4, bits1_length - 4))
                using (var input = new ZLibStream(mem, CompressionMode.Decompress))
                    input.Read(bits1, 0, bits1.Length);

            using (var mem = new MemoryStream(data, bits1_length + 4, bits2_length - 4))
                using (var input = new ZLibStream(mem, CompressionMode.Decompress))
                    input.Read(bits2, 0, bits2.Length);

            short init    = header.ToInt16(0x11);
            var   decoded = new short[sample_count];

            DecodeAdp(bits2, decoded, sample_count, init);

            var  output = new byte[unpacked_length];
            byte bit    = 0x80;
            int  src    = 0;
            int  dst    = 0;

            for (int i = 0; i < decoded.Length; ++i)
            {
                short sample = Math.Max(decoded[i], (short)0);
                if ((bit & bits1[src]) != 0)
                {
                    sample = (short)-sample;
                }
                LittleEndian.Pack(sample, output, dst);
                dst  += 2;
                bit >>= 1;
                if (0 == bit)
                {
                    ++src;
                    bit = 0x80;
                }
            }
            var format = new WaveFormat {
                FormatTag        = 1,
                Channels         = 1,
                SamplesPerSecond = sample_rate,
                BlockAlign       = 2,
                BitsPerSample    = 16,
            };

            format.SetBPS();
            var pcm = new MemoryStream(output);

            return(new RawPcmInput(pcm, format));
        }