FoxDot se inspira mucho en la teorÃa tradicional de la música occidental, incluyendo el uso de escalas musicales. Una escala es esencialmente un subconjunto de las notas musicales (tonos) entre una nota, por ejemplo C, y la misma una octava más alta. La nota inicial es la clave de la escala. Asà que comenzando en Do, estas notas son:
C, C#, D, D#, E, F, F#, G, G#, A, A#, B
Este conjunto de todas las notas se llama la escala cromática. Si esto fuera una lista de Python llamada cromática, entonces cromática[0] devolverÃa C, cromática[1] devolverÃa C#, cromática[2] devolverÃa D, y asà hasta cromática[11], que devolverÃa B. Debido a que cada escala musical es un subconjunto de estos tonos, podemos pensar en cada escala como una lista de Ãndices para acceder a los tonos en la escala cromática. Veamos la escala mayor como ejemplo:
La escala de Do Mayor se compone de C, D, E, F, G, A y B:
cromático =[C, C#, D, D#, E, F, F#, G, G#, A, A#, B]
C = cromático[0]
D = cromático[2]
E = cromático[4]
F = cromático[5]
G = cromático[7]
A = cromático[9]
B = cromático[11]
Una forma de crear la escala mayor usando un bucle podrÃa ser:
pasos =[0, 2, 4, 5, 7, 9, 11]
Escala = []
para el paso en la escala:
-scale.append(cromático[paso])
# escala ==[C, D, E, F, G, A, B]
Nuestra lista de pasos contiene los Ãndices necesarios para crear la escala mayor. Asà que cuando usamos el siguiente código para tocar todas las notas de la escala, estamos suministrando otra lista de Ãndices, que se está usando para acceder a la lista de escalas:
# Toca cada nota en la escala
p1 >> pluck([0, 1, 2, 3, 4, 5, 6, 7])
# Esencialmente estamos jugando:
p1 >> pluck([scale[0], scale[1], scale[2], ..., scale[7])
# Que es equivalente a:
p1 >> pluck([cromático[0], cromático[2], cromático[4], escala[5], ...., cromático[11])
A veces puede que quieras usar una nota que no está en la escala, tan "aguda" como Do# en la escala de Do Mayor, que se llama "accidental" aunque sea a propósito. Puedes usar números en coma flotante y FoxDot se aproximará a la nota a la que intentas acceder. Por ejemplo, para acceder a C# en la escala de Do mayor, usarÃa la escala[0.5] porque C# está entre C y D, que son la escala[0] y la escala[1] respectivamente.
Para ver una lista de las escalas disponibles simplemente ejecute el comando print(Scale.names()).
Esto devolverá una lista de todas las escalas como cadenas asÃ:
print(Scale.names())
['aeolian', 'chinese', 'chromatic', 'custom', 'default', 'diminished', 'dorian', 'dorian2', 'egyptian', 'freq', 'harmonicMajor', 'harmonicMinor', 'indian', 'justMajor', 'justMinor', 'locrian', 'locrianMajor', 'lydian', 'lydianMinor', 'major', 'majorPentatonic', 'melodicMajor', 'melodicMinor', 'minor', 'minorPentatonic', 'mixolydian', 'phrygian', 'prometheus', 'romanianMinor', 'yu', 'zhi']
Se puede acceder a cada objeto de la escala escribiendo Escala seguido de un ":
# Ver los semitonos de la escala mayor
print(Escale.major)
# Accede a lo largo de la escala mayor
print(len(Scale.major))
De forma predeterminada, cada reproductor utiliza una escala predeterminada accesible de forma global llamada Scale.default. Esto se puede cambiar de varias maneras:
# Simplemente asignando el objeto de escala a Scale.default
Scale.default = Scale.minor
# Puedes usar el nombre de la cadena
Scale.default = "minor"
También puede utilizar el método "set", que permite más opciones
Scale.default.set("minor")
Los jugadores individuales pueden utilizar escalas independientes simplemente suministrando un objeto de escala a la palabra clave de la escala como lo harÃa con cualquier otro atributo de reproductor:
# Establece la escala a mayor
Scale.default = Scale.major
# Forzar a un reproductor a usar la escala menor
p1 >> pluck([0,1,2,3], scale=Scale.minor)
La afinación musical es esencialmente la relación entre las frecuencias de las notas en una escala. La afinación más comúnmente utilizada en la música popular occidental es la afinación temperada igual de 12 pasos, que se encuentra en instrumentos como un piano. Otro sistema de afinación muy popular es el de "sólo entonación", que se analizará a continuación. Puede leer más sobre estos sistemas de ajuste haciendo clic en los enlaces del texto de arriba.
Del mismo modo que podemos ver los objetos de escala, también podemos ver los objetos de afinación:
# Igual de temperamental
print(Tuning.ET12)
# Sólo entonación
print(Tuning.just)
Usando Scale.default.set también podemos establecer la afinación para la escala por defecto, asà que ajustemos la afinación a sólo entonación mientras tocamos un acorde mayor y escuchemos el ligero cambio de color:
# Toca un acorde en repetición
p1 >> pluck((0, 2, 4))
# Establece la sintonÃa en sólo
Escala.default.set("major", tuning=Tuning.just)
# Vuelve a tener el mismo temperamento
Escala.default.set("major", tuning=Tuning.ET12)
Usted no tiene que usar escalas o afinación existentes - ¡puede incluso usar las suyas propias! Simplemente usando una lista o patrón de números en lugar de la escala y sintonizando nombres.
Scale.default.set([0, 2, 3, 5, 6, 9, 10], tuning=[0.1, 0.9, 2.1, 2.9, 4.1, 4.9, 6.1, 6.9, 8.1, 8.9, 10.1, 10.9])