示例#1
0
        public SongProperties(byte[] file)
        {
            numberOfIniStrings = EOFUtility.bytesToInt16(file.Skip(25).Take(2).ToArray());
            nextByteindex     += 2;

            if (numberOfIniStrings != 0)
            {
                // TODO : iniStrings data extraction
                // iniStrings = getIniStrings(file.Skip(25).Take(2).ToArray(), ref nextByteindex);
            }

            numberOfIniBoolean = EOFUtility.bytesToInt16(file.Skip(nextByteindex).Take(2).ToArray());
            nextByteindex     += 2;
            if (numberOfIniBoolean != 0)
            {
                // TODO : iniBooleans data extraction
                // iniBooleans = getIniBooleans(file.Skip(nextByteindex).Take(2).ToArray(), ref nextByteindex);
            }

            numberOfIniNumber = EOFUtility.bytesToInt16(file.Skip(nextByteindex).Take(2).ToArray());
            nextByteindex    += 2;

            if (numberOfIniNumber != 0)
            {
                iniNumbers = getIniNumbers(file, ref nextByteindex, numberOfIniNumber);
            }

            endByteIndex = nextByteindex;
        }
示例#2
0
        public OGGProfil(byte[] file, ref int nextByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            name           = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;

            // Not used by EOF the moment, always 0
            int filenameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            int oggProfileDescriptionLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            description    = String.Join("", (from character in file.Skip(nextByteIndex).Take(oggProfileDescriptionLength) select((char)character).ToString()).ToArray());
            nextByteIndex += oggProfileDescriptionLength;

            delay          = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            flags          = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;
        }
示例#3
0
        public LegacyNote(byte[] file, ref int nextByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            chordName      = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;

            difficulty     = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            bitFlag        = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            position       = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            length         = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            flags          = file.Skip(nextByteIndex).Take(4).ToArray();
            nextByteIndex += 4;

            if (flags[0] == 2)
            {
                Debug.Log("STAR POWER !");
            }
        }
示例#4
0
        public Track(byte[] file, ref int nextByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            name           = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;

            format         = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            behavior       = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            type           = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            difficulty     = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            flags          = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            int trackComplianceFlag = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            getTrackData(file, ref nextByteIndex);

            sections = getSections(file, ref nextByteIndex);

            getCustomDataBlocks(file, ref nextByteIndex);
        }
示例#5
0
        public IniNumber(byte[] section)
        {
            // type = Convert.ToString(section.Take(1).ToArray());
            type = String.Join("", (from header in section.Take(1) select Convert.ToString(header)).ToArray());

            // type = EOFUtility.bytesToChar(section.Take(1).ToArray());
            value = EOFUtility.bytesToInt32(section.Skip(1).Take(4).ToArray());
        }
示例#6
0
        public int timeDivision = 0; // Unused for the moment in EOF

        public ChartProperties(byte[] file)
        {
            // Get project revision number
            // Get 4 bytes that describe the number and join them into a string with a comprehension list
            projectRevisionNumber = String.Join(".", (from header in file.Skip(16).Take(4) select Convert.ToString(header)).ToArray());

            timingFormat = Convert.ToBoolean(file.Skip(20).Take(1).First());

            timeDivision = EOFUtility.bytesToInt32(file.Skip(21).Take(4).ToArray());
        }
示例#7
0
        public IniString(byte[] file, ref int nextByteIndex)
        {
            nextByteIndex += 1;

            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            // string name = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select ((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;
        }
示例#8
0
        string getTrackFormat(byte[] file, int startByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(startByteIndex).Take(2).ToArray());

            startByteIndex += 2;

            startByteIndex += nameLength;
            byte format = file.Skip(startByteIndex).Take(1).First();

            startByteIndex += 1;
            return(Convert.ToString(format));
        }
示例#9
0
        public CustomDataBlock(byte[] file, ref int nextByteIndex)
        {
            int numberOfBytes = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());

            nextByteIndex += 4;

            id             = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            data           = file.Skip(nextByteIndex).Take(numberOfBytes - 4).ToArray();
            nextByteIndex += numberOfBytes - 4;
        }
示例#10
0
        override protected void getTrackData(byte[] file, ref int nextByteIndex)
        {
            numberOfLanes  = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            numberOfNotes  = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            for (int i = 0; i < numberOfNotes; i++)
            {
                notes.Add(new LegacyNote(file, ref nextByteIndex));
            }
        }
示例#11
0
        override protected void getTrackData(byte[] file, ref int nextByteIndex)
        {
            toneSet        = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            int numberOfLyrics = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());

            nextByteIndex += 4;

            for (int i = 0; i < numberOfLyrics; i++)
            {
                lyrics.Add(new LyricChunk(file, ref nextByteIndex));
            }
        }
示例#12
0
        public Section(byte[] file, ref int nextByteIndex)
        {
            type           = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());
            nextByteIndex += 2;

            int numberOfSectionChunk = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());

            nextByteIndex += 4;

            for (int i = 0; i < numberOfSectionChunk; i++)
            {
                sections.Add(new SectionChunk(file, ref nextByteIndex));
            }
        }
示例#13
0
        public Beat(byte[] file, ref int nextByteIndex)
        {
            ppqn           = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            position       = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            flags          = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            key            = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;
        }
示例#14
0
        public TrackData(byte[] file, int startByteIndex)
        {
            nextByteIndex = startByteIndex;

            int numberOfTracks = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());

            nextByteIndex += 4;

            for (int i = 0; i < numberOfTracks; i++)
            {
                string format = getTrackFormat(file, nextByteIndex);

                // Available formats in EOF file description
                // 0=Global,1=Legacy,2=Vocal,3=Pro Keys,4=Pro Guitar/Bass,5=Variable Lane Legacy,...
                switch (format)
                {
                case "0":
                    GeneralTrack generalTrack = new GeneralTrack(file, ref nextByteIndex);
                    tracks.Add(generalTrack);
                    break;

                case "1":
                    LegacyTrack legacyTrack = new LegacyTrack(file, ref nextByteIndex);
                    tracks.Add(legacyTrack);
                    break;

                case "2":
                    VocalTrack vocalTrack = new VocalTrack(file, ref nextByteIndex);
                    tracks.Add(vocalTrack);
                    break;

                case "3":
                    ProKeysTrack proKeysTrack = new ProKeysTrack(file, ref nextByteIndex);
                    tracks.Add(proKeysTrack);
                    break;

                case "4":
                    ProGuitarTrack proGuitarTrack = new ProGuitarTrack(file, ref nextByteIndex);
                    tracks.Add(proGuitarTrack);
                    break;

                case "5":
                    LaneLegacyTrack laneLegacyTrack = new LaneLegacyTrack(file, ref nextByteIndex);
                    tracks.Add(laneLegacyTrack);
                    break;
                }
            }

            endByteIndex = nextByteIndex;
        }
示例#15
0
        protected List <Section> getSections(byte[] file, ref int nextByteIndex)
        {
            List <Section> sections = new List <Section>();

            int numberOfSection = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            for (int i = 0; i < numberOfSection; i++)
            {
                sections.Add(new Section(file, ref nextByteIndex));
            }

            return(sections);
        }
示例#16
0
        protected void getCustomDataBlocks(byte[] file, ref int nextByteIndex)
        {
            int numberOfCustomDataBlock = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());

            nextByteIndex += 4;

            for (int i = 0; i < numberOfCustomDataBlock; i++)
            {
                // TODO : Manage custom data block
                int tmp = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
                nextByteIndex += 4;

                nextByteIndex += 4;

                nextByteIndex += tmp - 4;
            }
        }
示例#17
0
        public TextEvent(byte[] file, ref int nextByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            description    = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;

            beat           = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            trackNumber    = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());
            nextByteIndex += 2;

            flags          = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());
            nextByteIndex += 2;
        }
示例#18
0
        public LegacyNote(byte[] file, ref int nextByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            chordName      = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;

            difficulty     = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            bitFlag = file.Skip(nextByteIndex).Take(1).First();

            var stringLanes = new string(Convert.ToString(bitFlag, 2).Reverse().ToArray()).PadRight(2, '0');

            for (int i = 0; i < 2; i++)
            {
                if (stringLanes[i] == '0')
                {
                    lanes[i] = false;
                }
                else
                {
                    lanes[i] = true;
                }
            }
            nextByteIndex += 1;

            position       = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            length         = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            flags          = file.Skip(nextByteIndex).Take(4).ToArray();
            nextByteIndex += 4;

            if (flags[0] == 2)
            {
                // TODO : Use Star Power, maybe.
            }
        }
示例#19
0
        public ChartData(byte[] file, int startByteIndex)
        {
            nextByteIndex = startByteIndex;

            // OGG data extraction
            numberOfOGGProfiles = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());
            nextByteIndex      += 2;

            for (int i = 0; i < numberOfOGGProfiles; i++)
            {
                OGGProfiles.Add(new OGGProfil(file, ref nextByteIndex));
            }

            // Beat data extraction
            numberOfBeats  = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());;
            nextByteIndex += 4;

            for (int i = 0; i < numberOfBeats; i++)
            {
                beats.Add(new Beat(file, ref nextByteIndex));
            }

            // Text event data extraction
            numberOfTextEvents = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());;
            nextByteIndex     += 4;

            for (int i = 0; i < numberOfTextEvents; i++)
            {
                textEvents.Add(new TextEvent(file, ref nextByteIndex));
            }

            // Custom data block extraction
            numberOfCustomDataBlock = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());;
            nextByteIndex          += 4;

            for (int i = 0; i < numberOfCustomDataBlock; i++)
            {
                customDataBlocks.Add(new CustomDataBlock(file, ref nextByteIndex));
            }

            endByteIndex = nextByteIndex;
        }
示例#20
0
        public SectionChunk(byte[] file, ref int nextByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            name           = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;

            difficulty     = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            startPosition  = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            endPosition    = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            flags          = file.Skip(nextByteIndex).Take(4).ToArray();
            nextByteIndex += 4;
        }
示例#21
0
        override protected void getTrackData(byte[] file, ref int nextByteIndex)
        {
            nextByteIndex += 1;
            byte numberOfStrings = file.Skip(nextByteIndex).Take(1).First();

            nextByteIndex += 1;

            for (int i = 0; i < numberOfStrings; i++)
            {
                nextByteIndex += 1;
            }

            int numberOfNotes = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());

            nextByteIndex += 4;

            for (int i = 0; i < numberOfNotes; i++)
            {
                int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());
                nextByteIndex += 2;
                nextByteIndex += nameLength;
                nextByteIndex += 1; // Chord number
                nextByteIndex += 1; // Difficulty
                nextByteIndex += 1; // Note bitflag
                Debug.Log(nextByteIndex);
                nextByteIndex += 1; // Ghost bitflag

                /*
                 * for (int i = 0; i < bitInGhostBitflag; i++) {
                 *
                 * }
                 */

                nextByteIndex += 1; // Legacy bitflag
                nextByteIndex += 4; // Note position
                nextByteIndex += 4; // Note length
                nextByteIndex += 4; // Note flags
            }
        }
示例#22
0
        public LyricChunk(byte[] file, ref int nextByteIndex)
        {
            int nameLength = EOFUtility.bytesToInt16(file.Skip(nextByteIndex).Take(2).ToArray());

            nextByteIndex += 2;

            name           = String.Join("", (from character in file.Skip(nextByteIndex).Take(nameLength) select((char)character).ToString()).ToArray());
            nextByteIndex += nameLength;

            lyricSet       = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            notePitch      = file.Skip(nextByteIndex).Take(1).First();
            nextByteIndex += 1;

            position       = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            length         = EOFUtility.bytesToInt32(file.Skip(nextByteIndex).Take(4).ToArray());
            nextByteIndex += 4;

            flags          = file.Skip(nextByteIndex).Take(2).ToArray();
            nextByteIndex += 2;
        }