コード例 #1
0
        private int ReadNoteLength(int DefaultTick, int MasterTick, MmlFileReader m)
        {
            int Tick = DefaultTick;

            if (m.IsNextLine())
            {
                return(Tick);
            }
            var ch = m.FetchCharacter();

            if (ch == '%')
            {
                m.StepNextCharacter();
                Tick = ReadNumber(m);
            }
            else
            {
                if (char.IsDigit(ch))
                {
                    int Len = ReadNumber(m, Default: -1);
                    if (Len <= 0)
                    {
                        Error.Add(ErrorData.Type.NoteLengthIsWrong);
                    }
                    else
                    {
                        Tick = MasterTick / Len;
                    }
                }
                ch = m.FetchCharacter();
                int AddTick = Tick;
                while (ch == '.')
                {
                    AddTick /= 2;
                    Tick    += AddTick;
                    m.StepNextCharacter();
                    ch = m.FetchCharacter();
                }
            }
            return(Tick);
        }
コード例 #2
0
        private void ReadItem(MmlFileReader m)
        {
            char ch = m.FetchCharacter();

            switch (ch)
            {
            case '#': ReadHeader(m); break;

            case '%': ReadEffect(m); break;

            case '@': ReadTone(m); break;

            case '$': ReadMacro(m); break;

            default: ReadTrack(m); break;
            }
        }
コード例 #3
0
        private void Note(SongData Song, TrackData Track, Command Command, MmlFileReader m)
        {
            var NoteNumber = NoteToNumber[Command.Name];
            var cmd        = Track.AddCommand(CommandType.Note);

            Track.SetLastNote(cmd);
            var ct = m.FetchType();

            if (m.IsNextLine())
            {
                cmd.Value = NoteNumber;
                cmd.Tick  = Track.DefaultTick;
                return;
            }

            var  ch    = m.FetchCharacter();
            bool Shift = false;

            if (ch == '-')
            {
                Shift = true; NoteNumber++;
            }
            if (ch == '+')
            {
                Shift = true; NoteNumber++;
            }
            if (Shift)
            {
                m.StepNextCharacter();
            }

            cmd.Value = NoteNumber;
            var Tick = ReadNoteLength(Track.DefaultTick, Song.MasterTick, m);

            cmd.Tick = Tick;
        }