Ayuda con una aplicación web de armonía

#1 por Javi Arce el 02/12/2015
Hola,

Por simple entretenimiento y curiosidad, y como herramienta de ayuda en la composición para cualquier músico, llevo un tiempo desarrollando una aplicación web libre (Creative Commons) muy sencillita que permita obtener de forma rápida notas de escalas, acordes que pueden componerse con dichas notas, etc. La gracia de la aplicación es que genera la información que ve el usuario de forma matemática y procedural, es decir, no tiene una base de datos detrás con filas y filas de escalas y acordes posibles, si no que la aplicación "calcula" los resultados "on the fly", en base a patrones de escala por semitonos, círculos de quintas, intervalos de acordes, etc.

Las matemáticas, e incluso la lógica, que hay detrás de todo esto es bastante simple y accesible para cualquier programador, pero por desgracia no tengo mucho nivel teórico musical y me temo que la aplicación estará llena de auténticas burradas, y posiblemente en altas cantidades. He ido ampliando las funcionalidades poco a poco, hasta llegar a algunos conceptos en los que patino algo o bastante, como la armonía extendida o las escalas modales.

Por eso, me gustaría que entre todos pudiéramos echarle un vistazo, para ver qué errores detectáis, qué fallos de concepto hay, qué cosas echáis en falta, que opinión tenéis de la herramienta, etc. Tened en cuenta que la idea detrás de la aplicación es que sirva de referencia rápida, no que sea un compendio teórico que cubra todas las posibilidades habidas y por haber. Es decir, su objetivo es que resulte práctico, especialmente al compositor novel y estudiante.

Muchas gracias de antemano, también me gustaría incluir en los créditos de la página a quien colabore (y quiera figurar).

Ésta es la dirección:
http://coda.eu.pn/

Ésta es mi música:
https://corona-borealis.bandcamp.com/releases
Y ésta es mi aplicación web de teoría musical (beta):
http://codamusica.com/

Subir
3
#2 por Emilio Galsán el 02/12/2015
Encuentro muy práctica y útil esta aplicación. Me parece una herramienta valiosa. Yo no puedo aportar nada porque no tengo muchos conocimientos, pero a la primera ojeada he visto que puede servirme como guía en determinados momentos de dudas sobre escalas y armonía y la utilizaré a menudo.

Gran aporte. Un 10 para Javi :ook:
Subir
#3 por supertorpe el 02/12/2015
Muy chula la herramienta. Un par de ideas:
1) Incluir algún botón para hacer sonar cada elemento que aparece. Puedes utilizar alguna librerías javascript para ello (p.e. https://github.com/mudcube/MIDI.js)
2) representarlo en partitura con http://www.vexflow.com

Estudiando piano desde 01/03/2010 hasta 2015.
Mis cosillas
https://www.diigo.com/user/supertorpe

Subir
#4 por kakasle el 02/12/2015
Me parece una herramienta genial para gente como yo, principiantes, también para músicos experimentados como guia y como bien dices para estudiantes, genial y el título es muy apropiado.
No te puedo aportar conocimientos pero si el uso y promoción de esta herramienta.
Gracias por compartir.

Sólo los peces muertos siguen la corriente...........

Hay dos tipos de música, la que me toca el corazón y la que me toca los coj****
Salvador dixit.

Subir
#5 por kakasle el 02/12/2015
He estado mirando el js un poco por encima y menuda currada te has pegado, yo soy sólo aficionado a la programación y hace tiempo que no la toco.
Quizás para ser más legible en algunas partes podrías sustituir sentencias "if" por "case" en algunos casos, e incluso aislar código en más funciones, esto en plan pijotero porque está de madre y al final si el que lo hace lo entiende a la perfección sobran las cosas.
Admirable trabajo, con el tiempo estudiaré el código por si se me ocurre algo que te ayude, un saludo.

Sólo los peces muertos siguen la corriente...........

Hay dos tipos de música, la que me toca el corazón y la que me toca los coj****
Salvador dixit.

Subir
#6 por Epiphone el 02/12/2015
Muy utíl, voy a hablar de ella en el foro hermano guitarristas.info
Subir
#7 por Elkick Demitrack Detrap el 02/12/2015
kakasle escribió:
aislar código en más funciones,
Eso es esencial para facilitar el trabajo colaborativo y la evolución futura del código. Por lo demás chapeau, Javi. En la sección de e-monigotes falta el icono de quitarse el sombrero así que voy a buscar uno en Google images:

leonard-cohen11-266x400.jpg

Ideas, sugerencias (y desvaríos) a bote pronto:

1. Publicar el código en Github para que otros programadores se sumen al proyecto.
2. Poder escuchar las escalas y acordes (y arpegios generados a partir de los mismos).
3. Algún algoritmo generativo que cree una pequeña secuencia de acordes o melodía de demostración.

El dedico en la llaguica

Subir
#8 por Javi Arce el 02/12/2015
#2 #4 #6

Gracias, me alegro que os haya parecido útil. De todas maneras, sed conscientes de que puede tener fallos de concepto, especialmente en la parte de armonía extendida. Ya he detectado algún fallo en la nomenclatura de los grados que corregiré para la siguiente versión beta.

#3

Eso sería genial, sobretodo la reproducción en MIDI, más que el tema de las partituras ya que realmente es un gestor de acordes y no tiene demasiada utilidad exportar una partitura con simples ristras de acordes... me apunto lo del MIDI como objetivo principal. Hace dos o tres años estuve indagando cuando salió HTML5 pero la reproducción MIDI vía DOM estaba todavía verde. Esta API tiene buena pinta, aunque ya hay alguna cosa que yo extendería, por ejemplo los eventos chordOn y chordOff sólo admiten triadas, estaría bien poderles pasar un array de longitud variable para poder construir cuatriadas o acordes con tensiones. Investigaré en el tema, muchas gracias.

#5

Gracias kakasle, intento hacer el código lo más legible que pueda. JavaScript es un lenguaje muy malo para la integridad y para la legibilidad. En el caso de los ifs y los cases, intento basarme (cuando me acuerdo) en una vieja regla de C: si las condiciones a analizar son más de 5, utilizo un switch case porque es más eficiente ya que la mayoría de lenguajes utilizan por debajo una hashlist o vector asociativo (lookup table, jump table, branch table,...) para realizar las comparaciones tanto de case como de if. En caso de ser menos de 5, cuando no hay apenas diferencias de eficiencia utilizo if - elseif, simplemente porque ocupan menos bytes de espacio de fichero y porque me resultan algo más legibles y más apegados a la lógica tradicional que se estudiaba en filosofía, pero para gustos colores, hay quien ve los switch case más comprensibles.

Ésta es mi música:
https://corona-borealis.bandcamp.com/releases
Y ésta es mi aplicación web de teoría musical (beta):
http://codamusica.com/

Subir
#9 por Endika el 02/12/2015
Muy interesante la iniciativa! aupa ahi!
Subir
#10 por Javi Arce el 02/12/2015
#7

He intentado separar las funciones según su utilidad (funciones de obtener escala, obtener acorde, etc por un lado, generar diapasón, generar piano, generar tablas por otro,...) y su reutilización. Mi idea básica es que, si no hay reutilización directa e implementada, no hay justificación para convertir un cacho de código secuencial en una función, pero tienes razón en que si quiero un código más comprensible y reutilizable por otros programadores tendré que atomizar más algunos churros de varios cientos de líneas. Lo de Github es buena idea, pero tiene la pega de que la mayoría de programadores de la plataforma son angloparlantes y la aplicación está en castellano de pe a pa, desde los comentarios del código hasta el nombre de los acordes. Pero bueno, la estandarizaré y la subiré, hay un porcentaje de hispanohablantes que podría colaborar.

Lo de las secuencias de acordes has dado en el clavo, para la nueva beta incluiré algún ejemplo de cadencias típicas y muy usadas para las tonalidades... a ver si le doy unas cuantas vueltas más sobre cómo podría quedar bien. Muchas gracias por los consejos.

Ésta es mi música:
https://corona-borealis.bandcamp.com/releases
Y ésta es mi aplicación web de teoría musical (beta):
http://codamusica.com/

Subir
#11 por kakasle el 02/12/2015
#8 Lo entiendo perfectamente, lo primero que me ha llamado la atención es lo escrupuloso que eres en los comentarios, parece una bobada pero poca gente lo hace, yo incluido, cuando lo vuelves a cojer al de un tiempo no sabes por dónde te da el aire, síntomas de buen programador y ordenado.
A eso me refería con aislar funciones, están perfectamente pero si deséas más claridad, sabiendo que el código va a crecer un poco, creo que va a ser más fácil de seguir el hilo para las personas que quieran colaborar, y lo de los if son manías :desdentado: .

Yo suelo utilizar esta página http://www.scales-chords.com/chord-finder-guitar-piano.php quizás saques alguna idéa válida, por ejemplo el buscador de acordes con tres notas mínimo está muy bien cuando nos encontramos con acordes que desconocemos, es muy básica pero viene bien, para futuras versiones, un saludo.

Sólo los peces muertos siguen la corriente...........

Hay dos tipos de música, la que me toca el corazón y la que me toca los coj****
Salvador dixit.

Subir
#12 por Epiphone el 02/12/2015
Las aplicaciones derivadas de Web-Audio y Web-Midi podrían ser de utilidad para la audición de notas que forman parte de los acordes

http://www.hispasonic.com/foros/foro-sobre-web-midi-web-audio/488362
Subir
#13 por Javi Arce el 03/12/2015
kakasle escribió:
Yo suelo utilizar esta página http://www.scales-chords.com/chord-finder-guitar-piano.php quizás saques alguna idéa válida, por ejemplo el buscador de acordes con tres notas mínimo está muy bien cuando nos encontramos con acordes que desconocemos, es muy básica pero viene bien, para futuras versiones, un saludo.


Gracias, no conocía la página, puede ser una utilidad interesante para la nueva versión. Además, es muy fácil de desarrollar, ya casi lo tendría montado con lo que tengo. Me lo apunto como idea.

#12

Sí, de momento sobretodo Web Audio puede ser interesante, ya que a Web MIDI no le puedo sacar tanto partido al estar haciendo una página de consulta, sin input musical directo del usuario. Poder extender todo esto y agregar un sinte web como el de Tsenkov sería una gozada, aunque fuese algo pequeño y testimonial para poder probar los acordes y escalas obtenidos, pero de momento estoy muy lejos de ello.

El proyecto que ha enlazado supertorpe (https://github.com/mudcube/MIDI.js) utiliza tanto Web MIDI como Web Audio, así que puede ser un buen punto de partida para no enfrentarse a la especificación del W3C a pelo, que de primeras da bastante miedo. Voy a ponerme ya con este tema, a ver qué puedo sacar.

Ésta es mi música:
https://corona-borealis.bandcamp.com/releases
Y ésta es mi aplicación web de teoría musical (beta):
http://codamusica.com/

Subir
#14 por supertorpe el 03/12/2015
Javi Arce escribió:
Esta API tiene buena pinta, aunque ya hay alguna cosa que yo extendería, por ejemplo los eventos chordOn y chordOff sólo admiten triadas

Puedes incluir un número arbitrario de notas. Mira la implementación:
Alguien escribió:

midi.chordOn = function(channel, chord, velocity, delay) {
for (var n = 0; n < chord.length; n ++) {
var note = chord[n];
output.send([0x90 + channel, note, velocity], delay * 1000);
}
};

Estudiando piano desde 01/03/2010 hasta 2015.
Mis cosillas
https://www.diigo.com/user/supertorpe

Subir
#15 por Javi Arce el 03/12/2015
#14

Gracias, sí, justo ahora estoy probándola y ya he visto que puedo pasarle un array de n elementos. Está muy bien hecha esta API, fácil de usar, flexible y comprensible sin importar el nivel. Me ha gustado tanto que creo que voy a meterla en esta beta 3 ahora mismo y subir una versión nueva donde se puede hacer clicks en todos los acordes que muestran las tablas y escuchar como suenan.

Ésta es mi música:
https://corona-borealis.bandcamp.com/releases
Y ésta es mi aplicación web de teoría musical (beta):
http://codamusica.com/

Subir
Respuesta rápida

Regístrate o para poder postear en este hilo