Exemplo n.º 1
0
        public NoteRestPanel2(Settings.NoteRest settings, MMLStyle mmlStyle)
        {
            InitializeComponent();

            this.settings = settings;
            this.mmlStyle = mmlStyle;
        }
Exemplo n.º 2
0
        protected override string GenerateString(Settings settings, SoundModule module)
        {
            int    len = Length[0];
            string str = string.Empty;

            Settings.NoteRest nrSettings = settings.noteRest;

            if (nrSettings.UnuseTiedRest || nrSettings.TieStyle == 0 ||
                (!CommandRelation.HasFlag(MMLCommandRelation.TieBefore) || CommandRelation.HasFlag(MMLCommandRelation.PrevControl)))
            {
                str += "r";
            }
            str += len.ToString();

            int dotlen = 0;

            for (int i = 1; i < Length.Count; i++)
            {
                if (len * 2 == Length[i] && nrSettings.DotEnable &&
                    (nrSettings.DotLength == 0 || dotlen < nrSettings.DotLength))
                {
                    str += ".";
                    dotlen++;
                }
                else
                {
                    if (nrSettings.UnuseTiedRest)     // No Tie
                    {
                        str = str + "r" + Length[i];
                    }
                    else
                    {
                        if (nrSettings.TieStyle == 0)       // Tie and Name
                        {
                            str = str + "&" + "r" + Length[i];
                        }
                        else       // Tie only
                        {
                            str = str + "^" + Length[i];
                        }
                    }
                    dotlen = 0;
                }
                len = Length[i];
            }

            if (!nrSettings.UnuseTiedRest && CommandRelation.HasFlag(MMLCommandRelation.TieAfter) && !CommandRelation.HasFlag(MMLCommandRelation.NextControl))
            {
                if (nrSettings.TieStyle == 0)
                {
                    str += "&";
                }
                else
                {
                    str += "^";
                }
            }

            return(str);
        }
Exemplo n.º 3
0
        protected override string GenerateString(Settings settings, SoundModule module)
        {
            int    len = Length[0];
            string str = string.Empty;

            Settings.NoteRest nrSettings = settings.noteRest;

            if (nrSettings.TieStyle == 0 ||
                (!CommandRelation.HasFlag(MMLCommandRelation.TieBefore) || CommandRelation.HasFlag(MMLCommandRelation.PrevControl)))
            {
                str += Name;
            }
            str += len.ToString();

            int dotlen = 0;

            for (int i = 1; i < Length.Count; i++)
            {
                if (len * 2 == Length[i] && nrSettings.DotEnable &&
                    (nrSettings.DotLength == 0 || dotlen < nrSettings.DotLength))
                {
                    str += ".";
                    dotlen++;
                }
                else
                {
                    if (nrSettings.TieStyle == 0)       // Tie and Name
                    {
                        str = str + nrSettings.TieCommandCustom + Name + Length[i];
                    }
                    else       // Tie only
                    {
                        str = str + nrSettings.TieCommandCustom + Length[i];
                    }
                    dotlen = 0;
                }
                len = Length[i];
            }

            if (CommandRelation.HasFlag(MMLCommandRelation.TieAfter))
            {
                str += nrSettings.TieCommandCustom;
            }

            return(str);
        }
Exemplo n.º 4
0
        public int[] GetLength(Settings.NoteRest settings)
        {
            var list = new List <LengthElement>();

            if (settings.DotEnable)
            {
                var temp = new LinkedList <LengthElement>(length);
                list.Add(temp.First.Value);
                temp.RemoveFirst();

                while (temp.Count > 0)
                {
                    int prevlen = list[list.Count - 1].Length;
                    LinkedListNode <LengthElement> n = temp.First;
                    while (true)
                    {
                        if (n.Value.Length == prevlen / 2)
                        {
                            list.Add(n.Value);
                            temp.Remove(n);
                            break;
                        }

                        if (n.Next == null)
                        {
                            list.Add(temp.First.Value);
                            temp.RemoveFirst();
                            break;
                        }
                        else
                        {
                            n = n.Next;
                        }
                    }
                }
            }
            else
            {
                list = length;
            }

            return(list.Select(x => x.Length).ToArray());
        }
        private int[][] CreateLengthTable(uint countsPerWholeNote, Settings.NoteRest settings)
        {
            // Create length elements
            var elements = new List <LengthElement>();
            int div      = 1;
            int divtri;

            while (true)
            {
                if (countsPerWholeNote % div == 0)
                {
                    elements.Add(new LengthElement(div, ((int)countsPerWholeNote / div), false));
                    divtri = div * 3;
                    if (countsPerWholeNote % divtri == 0)
                    {
                        elements.Add(new LengthElement(divtri, ((int)countsPerWholeNote / divtri), true));
                    }
                    div <<= 1;
                }
                else
                {
                    break;
                }
            }
            elements = elements.OrderBy(x => x.Length).ToList();

            // Create length table
            var table = new LengthContainer[countsPerWholeNote];

            table[0] = new LengthContainer();
            table[0].AddLengthElement(elements.Find(x => x.Length == 1));
            elements.Remove(elements.Find(x => x.Length == 1));     // Remove whole note

            for (int i = 0; i < elements.Count; i++)
            {
                FillLengthTableLoop(table, elements, i, new LengthContainer(), settings);
            }

            return(table.Select(x => x.GetLength(settings)).ToArray());
        }
        private void FillLengthTableLoop(LengthContainer[] table, List <LengthElement> elements, int n, LengthContainer container, Settings.NoteRest settings)
        {
            if (elements.Count == n)
            {
                return;
            }

            LengthContainer newContainer = container.Clone();
            int             loopcnt      = (elements[n].TripletFlag ? 2 : 1);

            for (int i = 0; i < loopcnt; i++)
            {
                newContainer.AddLengthElement(elements[n]);
                if (newContainer.Gate >= table.Length)
                {
                    return;
                }

                if (table[newContainer.Gate] == null)
                {
                    table[newContainer.Gate] = newContainer;
                }
                else
                {
                    if (settings.LengthStyle == 0)
                    {
                        if (newContainer.Count < table[newContainer.Gate].Count)
                        {
                            table[newContainer.Gate] = newContainer;
                        }
                        else if (newContainer.Count == table[newContainer.Gate].Count)
                        {
                            if (newContainer.TripletCount < table[newContainer.Gate].TripletCount)
                            {
                                table[newContainer.Gate] = newContainer;
                            }
                        }
                    }
                    else
                    {
                        if (newContainer.TripletCount < table[newContainer.Gate].TripletCount)
                        {
                            table[newContainer.Gate] = newContainer;
                        }
                    }
                }

                for (int j = n + 1; j < elements.Count; j++)
                {
                    FillLengthTableLoop(table, elements, j, newContainer, settings);
                }

                if (elements[n].TripletFlag)
                {
                    newContainer = container.Clone();
                }
            }
        }
Exemplo n.º 7
0
        public NoteRestPanel1(Settings.NoteRest settings)
        {
            InitializeComponent();

            this.settings = settings;
        }