示例#1
0
 private void button1_Click(object sender, EventArgs e)
 {
     try
     {
         if (cboAcordes.Text != "")
         {
             LimparTudo();
             Acorde CRD = acrds.acordes.FirstOrDefault(r => r.acorde == cboAcordes.Text);
             foreach (CordaBracos CrdBra in CRD.corda_braco)
             {
                 string nm_nota = "lbl_" + CrdBra.corda_braco + "_" + CrdBra.posicao + "_";
                 foreach (System.Windows.Forms.Control Notas in BRACO.Controls)
                 {
                     if (Notas is Label)
                     {
                         Label btnNota = Notas as Label;
                         if (btnNota.Name.Contains(nm_nota))
                         {
                             btnNota.Visible = true;
                         }
                     }
                 }
             }
         }
     }
     catch (Exception ex)
     {
         MessageBox.Show(ex.Message);
     }
 }
示例#2
0
        public void Interpret(Acorde acorde)
        {
            Regex reg = new Regex(expQuinta);

            if (reg.IsMatch(acorde.Nome))
            {
                acorde.AddIntervalo(TipoIntervalo.QUINTA_JUSTA);
                acorde.TriadeFormadora = ModoDoAcorde.NaoDefinido;
                return;
            }

            reg = new Regex(expMenor);
            if (reg.IsMatch(acorde.Nome))
            {
                acorde.AddIntervalos(new List <TipoIntervalo> {
                    TipoIntervalo.TERCA_MENOR, TipoIntervalo.QUINTA_JUSTA
                });
                acorde.TriadeFormadora = ModoDoAcorde.PerfeitoMenor;
                return;
            }

            reg = new Regex(expMaior);
            if (reg.IsMatch(acorde.Nome))
            {
                acorde.AddIntervalos(new List <TipoIntervalo> {
                    TipoIntervalo.TERCA_MAIOR, TipoIntervalo.QUINTA_JUSTA
                });
                acorde.TriadeFormadora = ModoDoAcorde.PerfeitoMaior;
                return;
            }

            throw new ExpressaoInvalidaException("Modo do acorde não encontrado");
        }
示例#3
0
        public Acorde CriarAcorde(TipoNota tonica, TipoAcordeFormula tipoAcorde)
        {
            switch (tipoAcorde)
            {
            case TipoAcordeFormula.Maior:
                return(Acorde.CriarAcordeMaior(tonica));

            case TipoAcordeFormula.Menor:
                return(Acorde.CriarAcordeMenor(tonica));

            case TipoAcordeFormula.MaiorSetima:
                return(Acorde.CriarAcordePelosIntervalos(tonica, new List <TipoIntervalo>()
                {
                    TipoIntervalo.TERCA_MAIOR, TipoIntervalo.QUINTA_JUSTA, TipoIntervalo.SETIMA_MENOR
                }));

            case TipoAcordeFormula.MenorSetima:
                return(Acorde.CriarAcordePelosIntervalos(tonica, new List <TipoIntervalo>()
                {
                    TipoIntervalo.TERCA_MENOR, TipoIntervalo.QUINTA_JUSTA, TipoIntervalo.SETIMA_MENOR
                }));

            case TipoAcordeFormula.Diminuto:
                return(Acorde.CriarAcordeDiminuto(tonica));

            case TipoAcordeFormula.MeioDiminuto:
                return(Acorde.CriarAcordeMeioDiminuto(tonica));

            default:
                return(Acorde.CriarAcordeMaior(tonica));
            }
        }
        [InlineData("F11++")] //Dois sinais repetidos
        public void Interpret_Deve_Lancar_Erro_Formatos_Invalidos(string nome)
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();
            Acorde            acorde            = new Acorde(nome);


            Assert.Throws <ExpressaoInvalidaException>(() => interpreterAcorde.Interpret(acorde));
        }
        public void Interpret_Deve_Encontrar_Relativo(string nome, string relativa)
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();
            Acorde            acorde            = new Acorde(nome);

            interpreterAcorde.Interpret(acorde);

            Assert.Equal(relativa, acorde.Relativa.Nome);
        }
        public void Interpret_Deve_Encontrar_Baixo(string nome, TipoNota baixo)
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();
            Acorde            acorde            = new Acorde(nome);

            interpreterAcorde.Interpret(acorde);

            Assert.Equal(baixo, acorde.Baixo);
        }
示例#7
0
        public CampoHarmonico CriarCampoHarmonico(string nomeAcorde)
        {
            InterpreterAcorde interpreter = new InterpreterAcorde();
            Acorde            acorde      = new Acorde(nomeAcorde);

            interpreter.Interpret(acorde);
            CampoHarmonico campo = CriarCampoHarmonicoPelaFormula(acorde, ObterFormulaPorAcordeBase(acorde));

            return(campo);
        }
        public void Interpret_Deve_Lancar_Erro_Sustenidos_Bemois(string nome)
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();
            Acorde            acorde            = new Acorde
            {
                Nome = nome
            };

            Assert.Throws <ExpressaoInvalidaException>(() => interpreterAcorde.Interpret(acorde));
        }
 public void Interpret(Acorde acorde)
 {
     if (Test(acorde.Nome))
     {
         foreach (var intervalo in Intervalos)
         {
             acorde.AddIntervalo(intervalo);
         }
     }
 }
示例#10
0
        public void Acorde_Deve_Criar_Acorde_Maior()
        {
            Acorde acorde = Acorde.CriarAcordeMaior(TipoNota.DO);

            Assert.Equal(new List <TipoIntervalo>()
            {
                TipoIntervalo.TONICA, TipoIntervalo.TERCA_MAIOR, TipoIntervalo.QUINTA_JUSTA
            },
                         acorde.GetIntervalos());
        }
示例#11
0
        public void GetNotas_Deve_Retornar_Notas_Dos_Acordes(TipoIntervalo intervalo, TipoNota nota)
        {
            Acorde acorde = new Acorde
            {
                Tonica = TipoNota.DO
            };

            acorde.AddIntervalo(intervalo);
            Assert.Contains(nota, acorde.GetNotas());
        }
示例#12
0
 public Tuple <int, TipoAcordeFormula>[] ObterFormulaPorAcordeBase(Acorde acorde)
 {
     if (acorde.TriadeFormadora == ModoDoAcorde.PerfeitoMaior)
     {
         return(FormulaCampoHarmonicoMaior);
     }
     else
     {
         return(FormulaCampoHarmonicoMenor);
     }
 }
示例#13
0
 public void Interpret(Acorde acorde)
 {
     if (acorde.TriadeFormadora == ModoDoAcorde.PerfeitoMaior)
     {
         acorde.Relativa = Acorde.CriarAcordeMenor(acorde.Tonica.Add(9));
     }
     else if (acorde.TriadeFormadora == ModoDoAcorde.PerfeitoMenor)
     {
         acorde.Relativa = Acorde.CriarAcordeMaior(acorde.Tonica.Add(3));
     }
 }
        public void Interpret(Acorde acorde)
        {
            TipoNota?nota = acorde.Nome.ToUpper()[0].ToString().GetEnumFromCifra();

            if (!nota.HasValue)
            {
                throw new ExpressaoInvalidaException("Tônica não encontrada.");
            }

            acorde.Tonica = nota.Value;
        }
        public void Interpret_Deve_Adicionar_Setima(string nome)
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();
            Acorde            acorde            = new Acorde
            {
                Nome = nome
            };

            interpreterAcorde.Interpret(acorde);

            Assert.Contains(TipoIntervalo.SETIMA_MENOR, acorde.GetIntervalos());
        }
        public void Interpret_Deve_Adicionar_Quarta(string nome)
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();
            Acorde            acorde            = new Acorde
            {
                Nome = nome
            };

            interpreterAcorde.Interpret(acorde);

            Assert.Contains(TipoIntervalo.QUARTA_JUSTA, acorde.GetIntervalos());
        }
        public void Interpret_Deve_Adicionar_DecimaTerceira(string nome)
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();
            Acorde            acorde            = new Acorde
            {
                Nome = nome
            };

            interpreterAcorde.Interpret(acorde);

            Assert.Contains(TipoIntervalo.SEXTA_MAIOR, acorde.GetIntervalos());
        }
示例#18
0
        protected static void Main(string[] args)
        {
            string            nomeAcorde = args[0];
            InterpreterAcorde cAcorde    = new InterpreterAcorde();
            Acorde            acorde     = new Acorde(nomeAcorde);

            cAcorde.Interpret(acorde);

            foreach (TipoNota nota in acorde.GetNotas())
            {
                Console.WriteLine(nota);
            }
        }
示例#19
0
        public void Interpret_Deve_Reconhecer_Acordes_Menores(string nome)
        {
            Acorde acorde = new Acorde(nome);

            InterpreterAcorde cAcorde = new InterpreterAcorde();

            cAcorde.Interpret(acorde);

            Assert.Equal(
                new List <TipoIntervalo> {
                TipoIntervalo.TONICA, TipoIntervalo.TERCA_MENOR, TipoIntervalo.QUINTA_JUSTA
            },
                acorde.GetIntervalos());
        }
示例#20
0
        public void Interpret(Acorde acorde)
        {
            Regex reg        = new Regex("/([A-G])$");
            Match matchBaixo = reg.Match(acorde.Nome);

            if (matchBaixo.Success)
            {
                acorde.Baixo = matchBaixo.Groups[1].Value.GetEnumFromCifra() ?? acorde.Tonica;
            }
            else
            {
                acorde.Baixo = acorde.Tonica;
            }
        }
示例#21
0
        public void Interpret(Acorde acorde)
        {
            List <IAcordeExpression> listInterpreters = new List <IAcordeExpression>()
            {
                new AcordeQuartaExpression(),
                new AcordeSextaExpression(),
                new AcordeSetimaExpression(),
                new AcordeNonaExpression(),
                new AcordeAumentadosDiminutos(),
            };

            foreach (IAcordeExpression interpreter in listInterpreters)
            {
                interpreter.Interpret(acorde);
            }
        }
示例#22
0
        private CampoHarmonico CriarCampoHarmonicoPelaFormula(Acorde acorde, Tuple <int, TipoAcordeFormula>[] formula)
        {
            CampoHarmonico campoHarmonico = new CampoHarmonico();
            FactoryAcorde  factory        = new FactoryAcorde();
            TipoNota       tonicaBase     = acorde.Tonica;

            campoHarmonico.Graus.Add(acorde);
            foreach (var item in formula)
            {
                tonicaBase = tonicaBase.Add(item.Item1);
                campoHarmonico.
                Graus.Add(factory.CriarAcorde(tonicaBase, item.Item2));
            }

            return(campoHarmonico);
        }
示例#23
0
        public void Interpret_Deve_Reconhecer_Tonica()
        {
            InterpreterAcorde interpreterAcorde = new InterpreterAcorde();

            foreach (TipoNota item in Enum.GetValues(typeof(TipoNota)))
            {
                Acorde acorde = new Acorde
                {
                    Nome = item.GetCifraFromEnum()
                };

                interpreterAcorde.Interpret(acorde);

                Assert.Equal(item, acorde.Tonica);
            }
        }
示例#24
0
        public void Interpret(Acorde acorde)
        {
            List <IAcordeExpression> listInterpreters = new List <IAcordeExpression>()
            {
                new AcordeValidaFormato(),
                new AcordeTonicaExpression(),
                new AcordeBemolSustenidoExpression(),
                new AcordeMaiorMenorQuintaExpression(),
                new AcordeAdicionadoExpression(),
                new AcordeDiminutoExpression(),
                new AcordeComInversao(),
                new AcordeRelativo(),
            };

            foreach (IAcordeExpression interpreter in listInterpreters)
            {
                interpreter.Interpret(acorde);
            }
        }
示例#25
0
        public void Interpret(Acorde acorde)
        {
            if (acorde.Nome.StartsWith("E#") || acorde.Nome.StartsWith("B#") ||
                acorde.Nome.StartsWith("Cb") || acorde.Nome.StartsWith("Fb"))
            {
                throw new ExpressaoInvalidaException("Acorde inválido.");
            }

            if (acorde.Nome.Length > 1)
            {
                if (acorde.Nome[1] == '#')
                {
                    acorde.Tonica += 1;
                }

                if (acorde.Nome[1] == 'b')
                {
                    acorde.Tonica -= 1;
                }
            }
        }
        public void Interpret(Acorde acorde)
        {
            Regex regexSinais = new Regex(@"([^0-9])([+-])");

            if (regexSinais.IsMatch(acorde.Nome))
            {
                throw new ExpressaoInvalidaException("O sinais para aumentar e diminuir devem ser precedidos pelo valor do intervalo.");
            }

            Regex           regexIntervalos = new Regex(@"(\d+)");
            MatchCollection matches         = regexIntervalos.Matches(acorde.Nome);

            foreach (Match item in matches)
            {
                if (item.Groups[1].Value.Length > 2)
                {
                    throw new ExpressaoInvalidaException("Os intervalos devem estar separados por / ou ()");
                }

                int           valorIntervalo = int.Parse(item.Groups[1].Value);
                TipoIntervalo?intervalo      = valorIntervalo.GetIntervaloPorValor();
                if (intervalo == null)
                {
                    throw new ExpressaoInvalidaException(
                              $"O valor {valorIntervalo} não representa um intervalo válido. " +
                              $"Intervalos aceitos: 4, 11, 2, 9, 7, 6 e 13. ");
                }
            }

            Regex           regexBaixo   = new Regex(@"/[A-G]");
            MatchCollection matchesBaixo = regexBaixo.Matches(acorde.Nome);

            if (matchesBaixo.Count > 1)
            {
                throw new ExpressaoInvalidaException("O acorde só pode ser representado com uma inversão.");
            }
        }
示例#27
0
        public void Interpret(Acorde acorde)
        {
            Regex           reg   = new Regex(@"(\d+)([+\-#b])");
            MatchCollection match = reg.Matches(acorde.Nome);


            foreach (Match item in match)
            {
                int           valor     = int.Parse(item.Groups[1].Value);
                TipoIntervalo?intervalo = valor.GetIntervaloPorValor();
                string        sinal     = item.Groups[2].Value;
                if (intervalo != null)
                {
                    if (sinal.In("+", "#"))
                    {
                        acorde.AumentarIntervalo(intervalo);
                    }
                    else
                    {
                        acorde.DiminuirIntervalo(intervalo);
                    }
                }
            }
        }
示例#28
0
        public CampoHarmonico CriarCampoHarmonico(Acorde acorde)
        {
            CampoHarmonico campo = CriarCampoHarmonicoPelaFormula(acorde, ObterFormulaPorAcordeBase(acorde));

            return(campo);
        }