protected MixTableChange ReadMixTableChange()
        {
            int[] pos = new int[8];
            int   i;
            int   n;
            int   aux;

            MixTableChange mtc = new MixTableChange();

            // For easier processing, creates an array
            MixTableElement[] elements = new MixTableElement[8];

            for (i = 0; i < 8; i++)
            {
                elements[i] = new MixTableElement();
            }

            n = 0;
            for (i = 0; i < 7; i++)
            {
                aux = ReadByte();
                if ((i != 0) && (aux != 255))
                {
                    pos[n] = i;
                    n++;
                }
                elements[i].NewValue = aux;
            }
            // The tempo field is different (needs an integer)
            aux = ReadInt();
            if (aux != -1)
            {
                pos[n] = i;
                n++;
            }

            elements[7].NewValue = aux;

            // Skip the instrument field

            for (i = 0; i < n; i++)
            {
                aux = ReadByte();
                if (elements[pos[i]].NewValue != 255)
                {
                    elements[pos[i]].ChangeDuration = aux;
                }
            }

            int applyToAllTracks = ReadByte();

            // The instrument and the tempo are not affected
            for (i = 0; i < 6; i++)
            {
                if ((applyToAllTracks & (1 << i)) != 0)
                {
                    elements[i + 1].ApplyToAllTracks = true;
                }
            }
            // The tempo always applies to all the tracks.
            elements[7].ApplyToAllTracks = true;

            // Sets all the values
            mtc.Instrument = elements[0];
            mtc.Volume     = elements[1];
            mtc.Balance    = elements[2];
            mtc.Chorus     = elements[3];
            mtc.Reverb     = elements[4];
            mtc.Phaser     = elements[5];
            mtc.Tremolo    = elements[6];
            mtc.Tempo      = elements[7];

            return(mtc);
        }
        protected MixTableChange ReadMixTableChange()
        {
            int[] pos = new int[8];
            int i;
            int n;
            int aux;

            MixTableChange mtc = new MixTableChange();

            // For easier processing, creates an array
            MixTableElement[] elements = new MixTableElement[8];

            for (i = 0; i < 8; i++)
                elements[i] = new MixTableElement();

            n = 0;
            for (i = 0; i < 7; i++)
            {
                aux = ReadByte();
                if ((i != 0) && (aux != 255))
                {
                    pos[n] = i;
                    n++;
                }
                elements[i].NewValue = aux;
            }
            // The tempo field is different (needs an integer)
            aux = ReadInt();
            if (aux != -1)
            {
                pos[n] = i;
                n++;
            }

            elements[7].NewValue = aux;

            // Skip the instrument field

            for (i = 0; i < n; i++)
            {
                aux = ReadByte();
                if (elements[pos[i]].NewValue != 255)
                {
                    elements[pos[i]].ChangeDuration = aux;
                }
            }

            int applyToAllTracks = ReadByte();

            // The instrument and the tempo are not affected
            for (i = 0; i < 6; i++)
            {
                if ((applyToAllTracks & (1 << i)) != 0)
                {
                    elements[i + 1].ApplyToAllTracks = true;
                }
            }
            // The tempo always applies to all the tracks.
            elements[7].ApplyToAllTracks = true;

            // Sets all the values
            mtc.Instrument = elements[0];
            mtc.Volume = elements[1];
            mtc.Balance = elements[2];
            mtc.Chorus = elements[3];
            mtc.Reverb = elements[4];
            mtc.Phaser = elements[5];
            mtc.Tremolo = elements[6];
            mtc.Tempo = elements[7];

            return mtc;
        }