예제 #1
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 !");
            }
        }
예제 #2
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;
        }
예제 #3
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;
        }
예제 #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 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;
        }
예제 #6
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));
        }
예제 #7
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));
            }
        }
예제 #8
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);
        }
예제 #9
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;
        }
예제 #10
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.
            }
        }
예제 #11
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;
        }
예제 #12
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;
        }
예제 #13
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
            }
        }
예제 #14
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;
        }