Armonía – Índice de lectura recomendado

Última actualización: 21 de junio de 2016
Una de las peticiones que más encuentro entre los comentarios del blog o a través del correo electrónico es la creación de un índice especial de lectura recomendado. Entiendo que, especialmente para alguien que empieza a estudiar armonía, pueda resultar complicado forjarse por sí mismo un plan de formación y no se encuentre otra opción mejor que abandonarse a una lectura lineal.

Nunca he pretendido hacer de esta sección un curso de armonía. Más bien mi interés ha sido siempre dejar piezas sueltas de un puzle que sólo tú, lector, puedes construir, tratando de conectarlas con las que ya tienes bien colocadas o quizás permitiéndote descubrir aquellas mal encajadas que te imposibilitan a seguir colocando otras nuevas.

Por otro lado, intento que los artículos puedan resultar interesantes no sólo al que comienza, sino también al que ya tiene cierta experiencia en estos asuntos, lo cual tardaría mucho en lograr si sólo me limitara a escribir linealmente partiendo desde cero.

Aunque soy un apasionado defensor del aprendizaje aleatorio (me reservo para otra ocasión un artículo expresando los que creo son sus beneficios), he preparado a continuación el que puede ser un orden de lectura recomendado, de menos a más. Hay, naturalmente, muchas lagunas entre medias aún que espero, poco a poco, ir cubriendo con el tiempo. Recojo cuidadosamente cuantas sugerencias o dudas se registran en los comentarios, que aunque ocasionalmente quedan respondidas allí mismo, me permiten ir anotando las cuestiones que pudieran ser más relevantes para el interés general.

El artículo de hoy es un artículo dinámico, en el sentido de que iré actualizándolo conforme aparezcan nuevos contenidos en la categoría Armonía, encajándolos en el lugar que estime más adecuado de acuerdo a su nivel. Procuraré dejar algún tipo de señal que de un vistazo permita localizar el material más reciente.

Y ahora sí, esta es la secuencia de lectura recomendada. Podría haber sido organizada de otra forma, desde luego, pero creo que así puede cumplir bien su función:

La notación anglosajona
Las notas musicales: las teclas blancas
Las notas musicales: las teclas negras
Tonos y semitonos
La fórmula secreta de la escala mayor
La escala mayor en cualquier tonalidad
La escala mayor en las 12 tonalidades – Cuadro
Intervalos sin secretos – 1 de 2
Intervalos sin secretos – 2 de 2
Intervalos sin secretos: Tabla de Referencia y el Modelo del Muelle
Intervalos sin secretos: Ejercicios resueltos I
Intervalos sin secretos: Ejercicios resueltos II
Intervalos sin secretos – Ejercicios resueltos III
Intervalos sin secretos – Ejercicios resueltos IV
La fórmula absoluta de una escala musical
La fórmula absoluta – Ejercicios prácticos de escalas
La fórmula relativa de una escala musical
Escalas: pasar de la fórmula absoluta a la relativa y viceversa
La escala menor natural
La escala menor armónica
La escala menor melódica
El mundo de las tonalidades relativas
Introducción a los modos de la escala mayor
Los modos de la escala mayor – Ejercicios prácticos
La fórmula absoluta de los modos de la escala mayor
La fórmula relativa de los modos de la escala mayor
La escala dórica
La escala mixolidia
La escala de tonos enteros
Los modos de la escala menor melódica – 1
Los modos de la escala menor melódica – 2
Los modos de la escala menor melódica – 3
Los modos de la escala menor armónica – 1
Los modos de la escala menor armónica – 2
Construcción de acordes: Tabla de referencia
Construcción de acordes – 1
Construcción de acordes – 2: Las triadas
Construcción de acordes – 3: Suspendidos
Construcción de acordes – 25: Power Chords
Construcción de acordes – 4: Séptima
Construcción de acordes – 5: Séptima mayor
Construcción de acordes – 6: Sexta y menor sexta
Construcción de acordes – 7: menor séptima
Construcción de acordes – 8: menor séptima quinta bemol (semidisminuido)
Construcción de acordes – 9: séptima disminuido
Construcción de acordes – 10: novena añadida
Construcción de acordes – 11: menor con séptima mayor
Construcción de acordes – 12: Séptima mayor con quinta aumentada
Construcción de acordes – 13: Séptima con quinta aumentada
Construcción de acordes – 14: Séptima con quinta disminuida
Construcción de acordes – 15: Séptima mayor con novena
Construcción de acordes – 16: Séptima con novena
Construcción de acordes – 17: Menor séptima con novena
Construcción de acordes – 18: Séptima con novena aumentada
Construcción de acordes – 19: Séptima con novena menor
Construcción de acordes – 20: Sexta con novena
Construcción de acordes – 21: 7ma mayor con novena y oncena
Construcción de acordes – 22: mayor con oncena aumentada
Construcción de acordes – 23: menor séptima, novena y oncena
Construcción de acordes – 24: séptima mayor con 9, 11 y 13
Construcción de acordes – 26: Oncena de dominante
La Notación Estructural de Voces
Inversión de acordes
Acordes en disposición Drop 2
Acordes en disposición Drop 3
Armonización de la escala mayor – 1
Armonización de la escala mayor – 2
Armonización de la escala mayor – 3
Armonización de la escala mayor – 4
Armonización de la escala mayor – 5
Armonización de la escala mayor – 6: las tétradas
Armonización de la escala mayor – 7: Ejercicios finales
Introducción a la armonización de la escala menor
Armonización de la escala menor natural
Armonización de la escala dórica
Armonización de la escala menor melódica
Armonización de la escala menor armónica
Armonización de la escala mayor en las 12 tonalidades
Armonización de la escala menor melódica en las 12 tonalidades
Armonización de la escala menor armónica en las 12 tonalidades ¡NUEVO! (21 de junio de 2016)
Extendiendo acordes a través de triadas simples
Cómo se compuso Nostalgia, de Viciosfera
Cálculo de la frecuencia de nuestras notas musicales
Los cents, la calderilla tonal
Do central, ¿C3 o C4?

Javier Montero Gabarró


Armonía – Índice de lectura recomendado


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Tabla de referencia de construcción de acordes.


Índice de todos los artículos de armonía.

Python – El poderoso inicializador


Objetivo: presentar el inicializador de objetos en Python, invocado automáticamente por el constructor para facilitar las características iniciales del objeto.

Hemos comenzado nuestra andadura en el mundo de la POO en Python presentando los conceptos esenciales de clase y objeto. La clase representa el modelo, la plantilla con la que después crearemos los objetos concretos.

Regresemos a la sencilla clase Coche con la que hemos estado trabajando en las últimas entregas:

class Coche:
    
    marca = ''
    modelo = ''
    color = ''
    numero_de_puertas = 0
    cuenta_kilometros = 0
    velocidad = 0
    arrancado = False

    def arrancar(self):
        if not self.arrancado:
            print('Roarrrr')
            self.arrancado = True
        else:
            # Dale al encendido estando el coche arrancado y escucha...
            print('Kriiiiiiiiiiicccc')
  
    def parar(self):
        self.arrancado = False
  
    def acelerar(self):
        if self.arrancado:
            self.velocidad = self.velocidad + 1

    def frenar(self):
        if self.velocidad > 0:
            self.velocidad = self.velocidad - 1

    def pitar(self):
        print('Bip Bip Bip')

    def consultar_velocimetro(self):
        return self.velocidad

    def consultar_cuenta_kilometros(self):
        return self.cuenta_kilometros

Para fabricar coches a partir de este esquema, invocamos al constructor:

>>> coche1 = Coche()

Como puedes comprobar, el valor de los atributos de datos del objeto recién creado son los que aparecen en la definición de la clase. Por ejemplo:

>>> coche1.marca
''

De modo que, para poder montarte en el coche, lo primero que habría que hacer es darle algo de forma y color:

>>> coche1.marca = "Seat"
>>> coche1.modelo = "Ibiza"
>>> coche1.color = "Blanco"
>>> coche1.numero_de_puertas = 3

Los demás campos podemos dejarlos con sus valores iniciales, no parece muy apropiado que nada más fabricar el coche se nos estampe a toda pastilla contra una pared.

Esta manera de proceder, que habría que repetir con cada coche que fabricáramos, no es, obviamente, ni práctica, ni elegante ni inteligente.

¿Por qué no facilitamos estos valores iniciales en la propia invocación al constructor?

Es decir, algo así como:

coche1 = Coche("Seat", "Ibiza", "Blanco", 3)

Mucho más elegante, menos propenso a errores y, como veremos, permitiéndonos además un mayor control sobre los valores que pueden tomar los atributos.

Para poder comunicarnos de este modo con la clase Coche necesitamos ampliar su definición incorporando un nuevo método: el inicializador.

El inicializador es un método particular cuya función es obvia: ocuparse de los rudimentos iniciales necesarios a la hora de construir el objeto. Toma la forma siguiente, obsérvala con atención:

def __init__(self, argumento1, argumento2, ..., argumentoN):
    código

La palabra init va precedida y seguida por dos símbolos de subrayado (dos delante y dos detrás). Esto, que puede parecer algo esotérico, es una buena convención práctica de Python para evitar posibles conflictos de nombres.

Observa que el primer argumento es self, como en cualquier otro método, que ya sabes que referencia al objeto actual (enseguida lo verás en acción). Los demás argumentos deberán cuadrar con la invocación en el constructor:

coche1 = coche(argumento1, argumento2, ..., argumentoN)

Recuerda que self no se indica dentro del constructor.

Estamos en condiciones de introducir código en el inicializador que, en este caso, es bien simple:

    def __init__(self, marca, modelo, color, puertas):
        self.marca = marca
        self.modelo = modelo
        self.color = color
        self.numero_de_puertas = puertas

En la declaración de parámetros he empleado puertas en lugar de numero_de_puertas simplemente para ilustrar la flexibilidad que tenemos a la hora de elegir nombres de parámetros en las funciones. Naturalmente, en la última línea del código hay que utilizar el nombre real del atributo para que éste se nutra del valor facilitado.

La clase Coche quedaría entonces así:

class Coche:
    
    marca = ''
    modelo = ''
    color = ''
    numero_de_puertas = 0
    cuenta_kilometros = 0
    velocidad = 0
    arrancado = False

    def __init__(self, marca, modelo, color, puertas):
        self.marca = marca
        self.modelo = modelo
        self.color = color
        self.numero_de_puertas = puertas

    def arrancar(self):
        if not self.arrancado:
            print('Roarrrr')
            self.arrancado = True
        else:
            # Dale al encendido estando el coche arrancado y escucha...
            print('Kriiiiiiiiiiicccc')

etcétera, ...

En breve la mejoraremos aún más, pero vayamos asegurando los conceptos paso a paso.

Con esta definición, la siguiente llamada al constructor ya es lícita:

>>> coche1 = Coche("Seat", "Ibiza", "Blanco", 3)

Los IDEs (aquí IDLE) nos facilitan la vida
Los IDEs (en la imagen, IDLE) nos facilitan la vida

Lo que sucede a continuación no debe sorprenderte ahora: los argumentos «Seat», «Ibiza», «Blanco» y 3 son facilitados, respectivamente, a marca, modelo, color y puertas de __init__.

Una vez dentro de __init__, self referencia al objeto actual que se crea al invocar al constructor, es decir, coche1. De modo que interiormente __init__ realiza esto:

coche1.marca = "Seat"
coche1.modelo = "Ibiza"
coche1.color = "Blanco"
coche1.numero_de_puertas = 3

Puedes comprobar que coche1 ha sido inicializado correctamente. Por ejemplo:

>>> coche1.color
'Blanco'
>>> coche1.numero_de_puertas
3

Otro ejemplo de la inteligencia de IDLE
Otro ejemplo de la inteligencia de IDLE

Ahora sí, nuestra clase Coche empieza a tener clase de verdad. Pero aún podemos hacerla más fina…

Sabemos que las variables en Python no necesitan declararse y que se construyen en el momento en que reciben un valor. Este hecho nos permite simplificar nuestra clase. Si los atributos de datos van a ser inicializados dentro de __init__, ¿por qué molestarnos siquiera en dar valores iniciales al definir la clase? Simplifiquemos, entonces:

class Coche:
    
    cuenta_kilometros = 0
    velocidad = 0
    arrancado = False

    def __init__(self, marca, modelo, color, puertas):
        self.marca = marca
        self.modelo = modelo
        self.color = color
        self.numero_de_puertas = puertas

    def arrancar(self):
        if not self.arrancado:
            print('Roarrrr')
            self.arrancado = True
        else:
            # Dale al encendido estando el coche arrancado y escucha...
            print('Kriiiiiiiiiiicccc')

etcétera, ...

Hemos dejado sólo los atributos que expresamente no establecemos en __init__.

Aún podemos ir más allá. ¿Por qué no incluir toda la inicialización en __init__, incluso la de aquellos miembros que no se faciliten explícitamente en la invocación al constructor?

class Coche:
    
    def __init__(self, marca, modelo, color, puertas):
        self.marca = marca
        self.modelo = modelo
        self.color = color
        self.numero_de_puertas = puertas
        self.cuenta_kilometros = 0
        self.velocidad = 0
        self.arrancado = False

    def arrancar(self):
        if not self.arrancado:
            print('Roarrrr')
            self.arrancado = True
        else:
            # Dale al encendido estando el coche arrancado y escucha...
            print('Kriiiiiiiiiiicccc')

etcétera, etcétera...

Los atributos de datos, objetos también en sí (en Python, todo lo es), serán construidos en el momento de la inicialización.

Por lo general, bien sea a la hora de inicializar un objeto, o bien llegado el momento de modificar cualquiera de sus atributos de datos, es buena práctica dejar que sean los métodos quienes se encarguen de ello, en lugar de atacar a las variables miembro directamente. Dentro de un método podemos analizar el valor facilitado, comprobar que sea legítimo, corregirlo o incluso rechazarlo si no procede.

No sería muy sensato escribir código como el siguiente:

coche1.velocidad = 1000

No hay coche que pueda alcanzar 1000 Km/h. Tampoco podría estar parado y, en el instante siguiente, circular a 100 Km/h. Usando los métodos acelerar y frenar que hemos definido en la clase se garantiza un incremento o decremento de la velocidad gradual. Estos métodos, además, podrían asegurarse de que no se excediera en ningún caso un valor máximo por mucho que pisáramos el acelerador (ni mínimo cuando frenásemos, algo que ya hace el método frenar).

Tienes ya las bases suficientes para empezar a utilizar la Programación Orientada a Objetos en tus programas. Te advierto, es una vía casi sin retorno: una vez escribes tu primer programa POO, apetece poco volver a la programación estructurada tradicional.

Pero esto apenas ha empezado, aún queda mucho camino por descubrir…

Javier Montero Gabarró


Python – El poderoso inicializador


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Do central, ¿C3 o C4?


Objetivo: Presentar el convenio más aceptado para la diferenciación de notas según la octava en la que se encuentren.

Imagina, por un momento, que te pido que hagas sonar la nota Fa en tu instrumento. Supongamos que se trata de un piano, aunque la cuestión sería la misma si fuera cualquier otro instrumento que permita la ejecución de notas en distintas octavas.

De un vistazo localizas inmediatamente una tecla blanca justo a la izquierda de alguno de los patrones repetitivos de tres teclas negras. Haces sonar la nota y me preguntas: «¿te sirve éste o lo quieres tal vez más grave o agudo?»

Para diferenciar un Fa de otro podría decirte: «no, ese no, el que suena a 87,31 Hz».

Desde luego, ya no habría ambigüedad posible, aunque probablemente te quedaras un tanto perplejo.

Sería mucho más práctico y apropiado indicar simplemente, de un modo u otro, a qué octava concreta pertenece ese Fa.

El siguiente gráfico representa un piano completo de 88 teclas que abarca desde una nota La muy grave hasta otra Do muy aguda (haz clic sobre la imagen para ampliarla).

Imagen: Wikimedia Commons, Artur Jan Fijalkowski - CC-BY-SA
Imagen: Wikimedia Commons, Artur Jan Fijalkowski – CC-BY-SA

Vemos siete octavas completas (de DO a SI) más dos incompletas (tres notas a la izquierda y una a la derecha).

Para numerar las octavas tendremos que llegar a un acuerdo. Supongamos que por primera octava me refiero a la primera que aparece completa en el piano, segunda la siguiente y así sucesivamente.

Con este criterio acordado, podría replantearte la pregunta con más precisión pidiéndote que hicieras sonar un Fa2 (el Fa de la segunda octava), que es precisamente el que tiene por frecuencia 87,31 Hz, y no te supondría el mínimo problema su localización.

El índice de octava, denominado por algunos índice acústico o registral, puedes encontrarlo escrito de diversos modos: Fa2, Fa2, Fa(2) o Fa[2]. O bien, con notación anglosajona: F2, F2, F(2) o F[2].

Observa que, de acuerdo a este esquema, las tres notas del teclado que hay a la izquierda del primer Do pertenecen a la octava cero, de modo que la primera nota del teclado, La, se designa como A0. Te propongo como ejercicio interesante que calcules su frecuencia. Es precisamente en la octava cero donde comienza nuestro rango de frecuencias audibles.

Localiza en el teclado, a continuación, la cuarta octava completa. Fíjate que se halla en el centro, dejando tres completas a su izquierda y otras tres completas a su derecha. A la nota Do con la que comienza esa octava se la denomina, en justicia, Do central y se registra como C4, correspondiente a una frecuencia de 261,63 Hz. Unas pocas notas a la derecha, en la misma cuarta octava, se encuentra el A4, 440Hz, frecuencia de referencia más común en nuestro sistema de afinación.

C4, el Do central
C4, el Do central

Esta manera de contar octavas, en la que la primera coincide con la primera completa en el piano de 88 teclas, ha sido adoptada por la Sociedad Americana de Acústica (ASA) en un intento de ser estandarizado. Puede entenderse también refiriéndose a la octava cero como aquella en la que comienza el rango auditivo del ser humano. Vinculada al mundo de la ciencia, muchos autores se refieren a este criterio como la notación científica, índice acústico científico o incluso, como he leído en alguna ocasión, sistema de los físicos.

Pero podríamos haber contado de otra forma. Imagina por ejemplo que partimos de un gran pentagrama, el sistema de pentagrama en dos partes utilizado para la notación musical de instrumentos de amplia tesitura, como el piano, el órgano o el arpa. Vamos a denominar primera octava a la primera que se introduce en el pentagrama inferior, es decir, la que comienza en el Do ubicado en la segunda línea adicional inferior. El siguiente Do, C2, estaría en el segundo espacio y el Do central, en la frontera entre ambos pentagramas, sería el C3.

C3, el Do central
C3, el Do central

Observa que, de acuerdo a esta manera de contar, lo que antes denominábamos octava uno ahora sería la octava cero, y lo que antes era la octava cero ahora correspondería a la octava ¡menos uno!

Este modo de registro de octavas, conocido como sistema franco-belga, sigue siendo común en determinadas zonas de Europa, aunque cada vez está más extendido el sistema científico americano, al que algunos se refieren ya como el sistema internacional.

Para complicar aún más las cosas, llegan los sintetizadores, el MIDI y el software musical. Fabricantes y desarrolladores de software siguen su propio criterio a la hora de referirse a las octavas, de modo que la confusión está servida (he visto incluso un C5 como Do central).

Respondiendo entonces a la pregunta que da título a este artículo: Do central, ¿C3 o C4? Ambas formas son válidas, depende del criterio que sigas.

Yo siempre me referiré al Do central como C4, pero me cuidaré de que, cuando pueda existir algún tipo de confusión, aparezca explícitamente alguna mención que lo indique con claridad. Por ejemplo, podré decir lo siguiente: la sexta cuerda de la guitarra, afinada de modo normal, da al aire un E2 (considerando C4 como Do central). No cuesta nada escribirlo, dejarlo claro una vez, evitando así quebraderos de cabeza.

Y a la inversa igual: cuando te encuentres con el piano roll de tu secuenciador o leas un manual sobre un sintetizador, intenta de algún modo asegurarte de cuál es la correspondencia de notas. Nunca des nada por sentado.

Javier Montero Gabarró


Do central, ¿C3 o C4?


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos sobre armonía.

Python – Fabricando objetos


Objetivo: presentar el concepto de Objeto o Instancia de una Clase en Python.

En el anterior artículo introdujimos las clases, auténticos pilares de la Programación Orientada a Objetos. Podemos pensar en ellas como diseños de moldes o plantillas para representar en Python (abstraer) una determinada realidad.

Aprendimos, por ejemplo, a modelar un coche:

class Coche:
    
    marca = ''
    modelo = ''
    color = ''
    numero_de_puertas = 0
    cuenta_kilometros = 0
    velocidad = 0
    arrancado = False

    def arrancar(self):
        if not self.arrancado:
            print('Roarrrr')
            self.arrancado = True
        else:
            # Dale al encendido estando el coche arrancado y escucha...
            print('Kriiiiiiiiiiicccc')
  
    def parar(self):
        self.arrancado = False
  
    def acelerar(self):
        if self.arrancado:
            self.velocidad = self.velocidad + 1

    def frenar(self):
        if self.velocidad > 0:
            self.velocidad = self.velocidad - 1

    def pitar(self):
        print('Bip Bip Bip')

    def consultar_velocimetro(self):
        return self.velocidad

    def consultar_cuenta_kilometros(self):
        return self.cuenta_kilometros

En la definición de clase nos encontramos sus características o atributos, que toman forma de variables (marca, modelo, color, etc…) y la funcionalidad propia de la clase o métodos, que nos indican qué cosas podemos hacer con ella, representados mediante funciones (arrancar(), acelerar(), frenar(), etc.).

Pero esto no es más que un esquema, un molde. Lo que queremos ahora es fabricar coches concretos, como un Seat León de cinco puertas o un Ford Fiesta de tres.

Al hecho de «fabricar» objetos a partir de un molde de clase se le denomina instanciar, y al producto obtenido se le conoce como instancias o, simplemente, objetos de esa clase.

De modo que vamos a asegurarnos que tenemos los conceptos claros: las clases son los moldes a los que recurrimos después para crear objetos concretos.

Para poner en marcha nuestra fábrica de coches virtual no necesitaremos una gran inversión en infraestructura y personal; nos bastará con ejecutar el intérprete de Python.

Para mayor comodidad, supongamos que hemos preparado ya todo el código con la definición de la clase Coche y lo hemos incluido en un fichero tal como coche.py.

La primera labor consistirá, por lo tanto, en ejecutar dicho código. En mi caso, lo abro en Idle y lo ejecuto con Run, pero tú puedes elegir cualquier otra forma de hacerlo. La cuestión es tener el intéprete interactivo con toda la definición de la clase cargada ya en memoria.

Comprobemos su existencia:

>>> Coche
<class '__main__.Coche'>

Para fabricar coches concretos necesitamos invocar a lo que se conoce como el constructor de clase, que se ocupará de crear el objeto en memoria. El rito para que haga acto de presencia es muy simple: basta con escribir el nombre de la clase seguido de un par de paréntesis.

Construyamos un primer coche:

>>> coche1 = Coche()

Típicamente los paréntesis los utilizaremos para definir valores iniciales del objeto. Más adelante, cuando presentemos el inicializador, aprenderás a usar esa característica.

Parémonos un instante a contemplar nuestra primera fabricación:

>>> coche1
<__main__.Coche object at 0x0234B7D0>

Lo que nos está diciendo el intérprete es que coche1 es un objeto de tipo Coche y está ubicado en la dirección de memoria 0x0234B7D0.

Cada objeto posee en Python un identicador único que podemos consultar con la función id():

>>> id(coche1)
37009360

En CPython, la implementación más común de Python, este identificador coincide con la dirección de memoria anterior, como podrás comprobar si te tomas la molestia de pasarlo a hexadecimal.

Ya que nos ha ido tan bien, probemos a fabricar un segundo automóvil:

>>> coche2 = Coche()

Aunque de la misma clase, se trata en efecto de un objeto diferente:

>>> id(coche2)
37634800

Para acceder a los atributos y métodos del objeto recurrimos a la notación punto, separando el nombre del objeto del atributo o método mediante un punto.

Establezcamos algunos atributos de coche1:

<code>>>> coche1.marca = "Seat"
>>> coche1.modelo = "León"
>>> coche1.color = "negro"

Y otros tantos de coche2:

coche2.marca = "Ford"
coche2.modelo = "Fiesta"
coche2.numero_de_puertas = 3

Esta forma de proceder, que puede parecer natural, no es la común. Tal como ya hemos apuntado, para dar valores iniciales a los objetos suele emplezarse la figura del inicializador, como veremos más adelante. Lo importante ahora es comprender bien el concepto.

Comprobemos los atributos de coche1:

>>> coche1.marca
'Seat'
>>> coche1.modelo
'León'
>>> coche1.color
'negro'
>>> coche1.numero_de_puertas
0
>>> coche1.cuenta_kilometros
0
>>> coche1.velocidad
0
>>> coche1.arrancado
False

Aprecia como los atributos que no hemos inicializado expresamente toman los valores que tenían en la definición de la clase.

Juguemos ahora un poco con los métodos, funciones que definen lo que podemos hacer con los objetos.

Traigamos a la palestra el primero de ellos. Lo reescribo aquí por comodidad:

    def arrancar(self):
        if not self.arrancado:
            print('Roarrrr')
            self.arrancado = True
        else:
            # Dale al encendido estando el coche arrancado y escucha...
            print('Kriiiiiiiiiiicccc')

El parámetro self, tal como explicamos en el artículo anterior, es obligatorio y debe figurar el primero en la declaración del método. Hace referencia al objeto en cuestión sobre el que se aplicará el método.

Para invocar el método, recurrirmos nuevamente a la notación punto, pasando entre paréntesis los argumentos que requiere el método en particular sin contar a self. Como en arrancar sólo existe self, a efectos prácticos es como si no tuviera ninguno:

>>> coche1.arrancar()
Roarrrr

Aunque no esté presente en la invocación, se está pasando implícitamente como self el nombre del método que llama a arrancar(), en este caso, coche1. Observa el código del método. Lo primero que hace es comprobar que el coche no está arrancado, en cuyo caso imprime «Roarrr», cambiando a continuación el atributo arrancado a True. Verifiquemos que en efecto se ha realizado esto último:

>>> coche1.arrancado
True

Naturalmente, coche2 permanece completamente ajeno a estas operaciones, pues arrancar no ha actuado sobre él, sino sobre coche1. Comprobemos que sigue detenido:

>>> coche2.arrancado
False

Estando coche1 arrancado, si intentamos arrancarlo de nuevo obtendremos un chirriante y desagradable ruido propio de forzar el motor de arranque sin necesidad:

>>> coche1.arrancar()
Kriiiiiiiiiiicccc

Revisemos algunos métodos más de la definición de la clase Coche:

    def parar(self):
        self.arrancado = False
  
    def acelerar(self):
        if self.arrancado:
            self.velocidad = self.velocidad + 1

    def frenar(self):
        if self.velocidad > 0:
            self.velocidad = self.velocidad - 1

Experimentemos con ellos. Cada vez que aceleramos, la velocidad del vehículo se incrementa en una unidad:

>>> coche1.acelerar()
>>> coche1.velocidad
1
>>> coche1.acelerar()
>>> coche1.velocidad
2

Para detener el vehículo, primero lo frenamos completamente:

>>> coche1.frenar()
>>> coche1.frenar() # Al tener velocidad 2 aplicamos dos veces el método
>>> coche1.velocidad
0

Y, a continuación, sacamos la llave de contacto:

>>> coche1.parar()
>>> coche1.arrancado
False

Es muy importante que estudies con cuidado en estos ejemplos cómo hemos accedido desde los métodos a los atributos del objeto a través de self. En la siguiente lección, cuando presentemos el inicializador, le daremos a esta operatividad un carácter esencial.

Javier Montero Gabarró


Python – Fabricando objetos


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Guitarra – El método CAGED y los acordes menores

Objetivo: introducir la formación de acordes menores en la guitarra en posiciones CAGED.

A lo largo de los últimos artículos hemos esbozado las formas móviles de acordes basadas en las cinco posiciones CAGED. En la serie que comienza hoy realizaremos un estudio similar centrado en los acordes menores.

Nuestra punto de partida, al igual que hicimos con los acordes mayores, es el estudio de las posiciones con cuerdas al aire.

A continuación se presentan los cinco acordes mayores CAGED, C, A, G, E y D con cuerdas al aire. El primer conjunto de valores muestra los trastes específicos que hay que pisar; el segundo las notas efectivas que suenan y el tercero su estructura armónica:

C: x32010 / xCEGCE / x13513
A: x02220 / xAEAC#E / x15135
G: 320003 / GBDGBG / 135131
E: 022100 / EBEG#BE / 151351
D: xx0232 / xxDADF# / xx1513

Los acordes menores se diferencian de los mayores en el uso que hacen de la tercera. En efecto, observa sus fórmulas respectivas:

Acorde mayor: 1 – 3 – 5
Acorde menor: 1 – b3 – 5

Si esto te suena extraño permíteme recomendarte la lectura de la serie dedicada a la construcción de acordes dentro de la categoría Armonía del blog.

En los acordes mayores la tercera es mayor (dista 4 semitonos de la fundamental), mientras que en los menores es menor (distando 3 semitonos de la fundamental). Esto es, para pasar de un acorde mayor al respectivo menor simplemente hay que bajar un semitono la tercera.

Apliquemos este importante concepto a nuestros acordes mayores CAGED para transformarlos en menores.

Tomaremos un orden diferente. Comencaremos por los acordes A, E y D, dejando C y G para el final. Enseguida comprenderás por qué.

Este es el acorde de La mayor (A):

A: x02220 / xAEAC#E / x15135

Si te fijas, la tercera es el C# que se obtiene al tocar la segunda cuerda pisada en el segundo traste.

Para convertir este acorde en La menor (Am) basta con bajar un semitono esa tercera, lo que equivale a pisar la segunda cuerda un traste más abajo, es decir, el primero, obteniendo la nota C.

Am: x02210 / xAEACE / x151b35

La menor (Am)
La menor (Am)

Los números que aparecen en el gráfico sugieren la digitación más adecuada.

Para obtener Mi menor (Em) realizamos la misma operación; localizamos la tercera y la bajamos un semitono:

E: 022100 / EBEG#BE / 151351
Em: 022000 / EBEGBE / 151b351

Mi menor (Em)
Mi menor (Em)

Del mismo modo, pasar de Re mayor (D) a Re menor es sumamente sencillo:

D: xx0232 / xxDADF# / xx1513
Dm: xx0231 / xxDADF / xx151b3

Re menor (Dm)
Re menor (Dm)

Para pasar de Do mayor (C) a Do menor (Cm) tenemos un pequeño problema técnico:

C: x32010 / xCEGCE / x13513

La tercera, nota MI (E), además de figurar en la cuarta cuerda, está presente también en la primera cuerda ¡al aire! ¿Cómo bajamos un semitono una nota que ya está al aire?

Sencillamente, no podemos, de modo que debemos renunciar a utilizar esa cuerda si queremos aprovechar, al menos, otras partes del acorde, que ya habrá perdido su gran atractivo de formación al aire.

Es cierto que, al transponerlo usando una cejilla, poco nos importan las cuerdas al aire, pero la realidad es que el acorde que se obtiene es de escasa utilidad práctica.

Lo mismo, si no peor, sucede con Sol menor (Gm) si lo tratamos de derivar de Sol mayor (G) al aire:

G: 320003 / GBDGBG / 135131

En Sol mayor, como ves, la tercera (nota SI, B) se encuentra, además de en la quinta cuerda, en la segunda al aire. No podemos bajar un semitono esa nota porque nos hemos quedado sin guitarra, como en Do menor.

De modo que, a efectos prácticos, en este estudio CAGED para acordes menores descartaremos las posiciones C y G, quedándonos exclusivamente con las formas A, E y D.

Una terminología que, a estas alturas, debe quedarte ya clara:

Denominamos acorde menor en segunda posición CAGED al acorde con cejilla (o sin ella, si se monta al aire) que se obtiene empleando la forma Am (A es la segunda letra de CAGED).

Re menor (Dm) con forma de La menor (Am)
Re menor (Dm) con forma de La menor (Am)

¿Por qué este acorde es Re menor?

Para responder a la pregunta hay que localizar la fundamental del acorde. En la forma A, si revisas la estructura del acorde, ésta se encuentra en la quinta cuerda. En el gráfico, hemos trazado una cejilla en el quinto traste, de modo que nuestra fundamental se halla en el quinto traste de la quinta cuerda. Una sencilla cuenta te lleva hasta la nota Re, de modo que el acorde representado es Re menor (Dm).

Es muy importante, a la hora de transponer con agilidad los acordes CAGED usando cejillas, que tengas bien aprendidas las notas en la sexta, quinta y cuarta cuerdas, pues eso te permitirá localizar las fundamentales rápidamente. Si aún no tienes esa habilidad, no lo demores un solo día más y comienza a practicar ya.

Denominamos acorde menor en cuarta posición CAGED (cuarta letra, E), al acorde con cejilla que se obtiene empleando la forma Em, Mi menor al aire:

La menor (Am) en forma de Mi menor (Em)
La menor (Am) en forma de Mi menor (Em)

En este caso, nuestra referencia se halla en la sexta cuerda, como puedes apreciar si revisas la estructura del acorde. La sexta cuerda, pisada en el quinto traste, genera la nota LA (A), y por eso el acorde del gráfico se denomina La menor (Am).

Denominamos acorde menor en quinta posición CAGED (letra D, quinta en la palabra CAGED) al acorde que se obtiene empleando con cejilla la forma de Re menor (Dm) al aire:

Sol menor (Gm) con forma de Re menor (Dm)
Sol menor (Gm) con forma de Re menor (Dm)

Puedes elegir entre hacer la cejilla parcial, cubriendo las 4 primeras cuerdas, o bien dejar el dedo 1 sobre la cuarta cuerda, como aparece en la figura. El resultado es el mismo. Es un Sol menor (Gm) porque, en el acorde Re menor (Dm) al aire, la fundamental está localizada en la cuarta cuerda que, pisada en el quinto traste, nos lleva a la nota SOL (G).

Por lo general, no es común que la gente se refiera a estos acordes como segunda, cuarta o quinta posición CAGED. Se dice, simplemente, acorde en forma de La menor, Mi menor o Re menor. Pero considero importante que comprendas esta nomenclatura, a la que recurriré con frecuencia, pues te permite comprender como encajan estas piezas en el sistema CAGED.

En sucesivos artículos profundizaremos en los tres acordes presentados hoy, realizaremos más ejercicios prácticos y mostraremos algunas simplificaciones interesantes derivadas de estas posiciones.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2014/09/guitarra-el-metodo-caged-y-los-acordes-menores/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de la categoría Guitarra.

Índice de la categoría Armonía.

Python – El concepto de Clase

Objetivo: presentar en Python el concepto de clase, pilar sobre el que está construido todo el paradigma de la programación orientada a objetos.

Ha llegado el momento de que introduzcamos la Programación Orientada a Objetos en Python. Supondremos que esta es la primera vez que te acercas a esta metodología y que desconoces completamente o tienes nociones imprecisas de lo que son las clases y los objetos, de modo que comenzaremos por lo esencialmente básico para que no arrastres lagunas conforme el tema vaya adquiriendo más complejidad.

Por cuestiones de economía me he permitido autoplagiarme empleando los ejemplos, e incluso las mismas palabras, que utilicé en la introducción a la POO que escribí en la serie dedicada a Java. Naturalmente, nuestros caminos divergirán tan pronto como comencemos a picar código concreto en Python.

El tratamiento empleado por Python para la POO difiere de manera importante en algunos aspectos al utilizado en otros lenguajes como Java, C++ o C#. Aunque podríamos habernos acercado a este tema directamente de un modo más pythonista, he preferido que nuestros primeros pasos sean sólidos, apoyados en un marco conceptualmente universal, como el compartido por los lenguajes de programación anteriormente citados.

¿Preparado para una nueva manera de resolver problemas?

Voy a proponerte un sencillo juego. Sal a la calle, mira a tu alrededor y contempla el mundo de un modo particular.

Veo veo… ¿Qué ves?
Una cosita… ¿Y qué cosita es?

Para empezar, quiero que identifiques qué tipos de objetos ves…

Puedes, por ejemplo, encontrarte coches, bares, semáforos o personas, por citar sólo unos cuantos tipos. Date cuenta de que, cuando digo tipos de objetos, hablo de un modo conceptual y general. Si te resulta chocante referirte a una persona como un objeto, prueba a sustituir la expresión por tipos de entidades, en su lugar.

Tipo y clase son dos términos sinónimos, de modo que vamos a cambiar «tipos de objetos» por «clases de objetos», aproximándonos un poco más al concepto que da pie al artículo de hoy.

¿Qué clases de objetos vemos? Coches, bares, semáforos, personas…

La siguiente transformación lingüística consiste en simplificar clases de objetos por simplemente clases:

¿Qué clases vemos? Coches, bares, semáforos, personas…

Y ahora sí, nos sumergimos plenamente en la terminología de la programación orientada a objetos:

Tenemos la clase Coche, la clase Bar, la clase Semáforo, la clase Persona

Poco interesan ahora los detalles concretos. No importa si esa persona es Marta, está en el bar «Casa Manolo», si tiene un Seat Panda o si el semáforo está en rojo. Estamos pensando en términos clasificatorios.

Vamos a adentrarnos ahora en el interior de cada una de estas clases.

¿Cómo son los coches? ¿Qué características pueden diferenciar uno de otro?

Por ejemplo, podríamos indicar la marca, el modelo, el color, la cilindrada, etc.

A las características las vamos a denominar atributos, término muy utilizado en la programación orientada a objetos.

¿Qué atributos tiene la clase Bar?

Todo bar tiene un nombre, una ubicación, un estado (si está abierto o cerrado), una lista de precios,…

Como atributos de la clase Semáforo podríamos indicar su ubicación y estado (rojo, verde o ámbar).

La clase Persona podría definir como atributos el nombre, sexo, edad, estado civil, altura, etc.

A continuación pensemos en el comportamiento de estas clases. Preguntémonos qué cosas hacen, qué tipo de acciones pueden realizar.

Un coche puede arrancar, detenerse, girar a la izquierda, acelerar, frenar, encender sus luces. Un semáforo puede cambiar de estado. Un bar puede abrir, cerrar, servirte una cerveza, cobrarla, modificar la lista de precios. Una persona puede hablar, dormir, conducir un coche, tomarse una cerveza en un bar.

En terminología de la programación orientada a objetos, a estas funciones que determinan el comportamiento de una clase se las conoce como métodos.

Empleando un lenguaje puramente pythonista, tanto a los atributos como a los métodos aquí descritos se les conoce como simplemente atributos. Para diferenciar unos de otros, Python emplea el término atributos de datos para referirse a los datos característicos de la clase. No obstante, al menos mientras continuemos presentando los conceptos básicos, seguiremos distinguiendo aquí entre atributos y métodos.

Sabemos qué es una clase y que está compuesta de atributos y métodos. Nuestra labor ahora consistirá en modelar en Python estas clases.

Modelar no es otra cosa sino crear una abstracción que represente de algún modo una determinada realidad.

Para crear en Python la clase Coche comenzamos usando la palabra reservada class, seguida del nombre de la clase y del símbolo de dos puntos:

class Coche:
    instrucción 1
    instrucción 2
    ...
    instrucción n

La clase más simple de todas no haría nada:

class Coche:
    pass

La sentencia pass pasa completamente, no hace absolutamente nada. Es útil en contextos en los que se requiere la presencia de al menos una instrucción, hasta que la inspiración acuda y coloquemos código sustituto.

Típicamente, indentados en la definición, introduciremos los atributos y métodos de que consta la clase Coche.

El nombre Coche lo escribimos con la primera letra en mayúsculas, pues es práctica común entre la POO que los nombres de clases empiecen así.

Introduzcamos algunos atributos:

class Coche:

    marca = ''
    modelo = ''
    color = ''
    numero_de_puertas = 0
    cuenta_kilometros = 0
    velocidad = 0
    arrancado = False

Hemos utilizado, provisionalmente, valores iniciales para los atributos: la cadena vacía para los tipo string, cero para los numéricos y False para el booleano, pero podrían haber sido otros cualesquiera. En el momento en que comencemos a fabricar objetos de esta clase todos estos atributos podrán recibir su valor concreto y particular.

Definamos ahora los métodos de la clase Coche:

class Coche:
    
    marca = ''
    modelo = ''
    color = ''
    numero_de_puertas = 0
    cuenta_kilometros = 0
    velocidad = 0
    arrancado = False

    def arrancar(self):
        pass
  
    def parar(self):
        pass
  
    def acelerar(self):
        pass

    def frenar(self):
        pass

    def pitar(self):
        pass

    def consultar_velocimetro(self):
        pass

    def consultar_cuenta_kilometros(self):
        pass

Observa que los métodos se implementan exactamente igual que las funciones. Como tales, junto a la palabra clave def aparece el nombre del método seguido de unos paréntesis con la declaración de parámetros formales, finalizando con dos puntos e indentando el cuerpo del método a continuación. Al igual que las funciones ordinarias, los métodos podrán o no devolver un valor.

Fíjate en self, un parámetro que debe figurar siempre al comienzo de todo método. Su significado quedará completamente claro en el siguiente artículo, cuando expliquemos el concepto de Objeto. Por el momento, como primera toma de contacto, que te vaya sonando que self hace referencia al objeto concreto sobre el que se está invocando el método.

La elección de self como nombre del parámetro es arbitraria, podría servir cualquier otro término. Aquí nos sumaremos a la denominación favorita entre la comunidad pythonista.

Hemos rellenado el cuerpo de los métodos con la instrucción nula pass, pero seamos algo atrevidos y escribamos algo de código:

class Coche:
    
    marca = ''
    modelo = ''
    color = ''
    numero_de_puertas = 0
    cuenta_kilometros = 0
    velocidad = 0
    arrancado = False

    def arrancar(self):
        if not self.arrancado:
            print('Roarrrr')
            self.arrancado = True
        else:
            # Dale al encendido estando el coche arrancado y escucha...
            print('Kriiiiiiiiiiicccc')
  
    def parar(self):
        self.arrancado = False
  
    def acelerar(self):
        if self.arrancado:
            self.velocidad = self.velocidad + 1

    def frenar(self):
        if self.velocidad > 0:
            self.velocidad = self.velocidad - 1

    def pitar(self):
        print('Bip Bip Bip')

    def consultar_velocimetro(self):
        return self.velocidad

    def consultar_cuenta_kilometros(self):
        return self.cuenta_kilometros

Intenta comprender el código aunque aún no hayamos explicado la notación punto ni el uso de self. No te preocupes, en absoluto, si te surgen dudas, pues todo quedará claro en el siguiente artículo. Lo importante ahora es que te quedes con los conceptos de clase, atributo y método.

La siguiente podría ser una primera aproximación simple al modelado de una persona:

class Persona:
    
    sexo = ''
    nombre = ''
    edad = 0
    coche = Coche()   # El coche que conduce esa persona
  
    def saludar(self):
        print('Hola, me llamo', self.nombre)

    def dormir(self):
        print('Zzzzzzzzzzz')

    def obtener_edad(self):
        return self.edad

Fíjate en que uno de los atributos es precisamente de la clase Coche que acabamos de definir:

coche = Coche() # El coche que conduce esa persona

No confundas el nombre del atributo (coche, en minúsculas), con el nombre de la clase (Coche, con la primera en mayúsculas). Recuerda que para Python son identificadores distintos. Nuevamente, no te preocupes si no comprendes la sentencia, que hace mención a la construcción explícita de un objeto de tipo Coche. El propósito es simplemente ilustrar que entre los atributos de una clase, además de tipos comunes (números, strings, listas, etc…), pueden figurar objetos de cualquier clase, incluso de las creadas por nosotros mismos.

Te propongo como ejercicio que te entretengas modelando las otras clases indicadas al comienzo, u otras de tu elección, para asentar estos conceptos primarios.

Las entidades no tienen por qué ser tangibles, necesariamente. El siguiente código modela nuestras emociones:

class Emocion:
    emocion = ''
  
    def obtener_emocion(self):
        return self.emocion
    
    def cambiar_emocion(self, nueva_emocion):
        self.emocion = nueva_emocion

Observa el método cambiar_emocion(), que además de self define un nuevo parámetro.

En el próximo artículo explicaremos el concepto de Objeto, gracias al cual materializaremos nuestras clases en entidades concretas, coches rugientes, personas de carne y hueso o sentidas emociones. Hasta entonces, bienvenido al apasionante mundo de la programación orientada a objetos.

Javier Montero Gabarró


Python – El concepto de Clase


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Guitarra – Acorde mayor en tercera posición CAGED

Objetivo: presentar el acorde mayor en tercera posición CAGED, forma G, basado en Sol mayor al aire.

Para completar la formación de acordes mayores con cejilla en posiciones CAGED, vamos a abordar la que tal vez sea la disposición que implica una mayor dificultad de ejecución. Me refiero al acorde en forma de Sol mayor (G) con cejilla, la tercera posición CAGED (G es la tercera letra de la palabra CAGED).

El acorde por excelencia para la guitarra, el amistoso Sol mayor:

G: 320003 / 135131

3caged1

En la doble notación aparece, además de los trastes que hay que pisar, la disposición de las voces en el acorde. En particular, nos interesa ahora observar que la fundamental más grave la obtenemos en la sexta cuerda. Esa será nuestra referencia cuando construyamos el acorde con cejilla.

El no tan amistoso acorde mayor en posición Sol:

3caged2

La disposición de las voces, naturalmente, será la misma que en Sol mayor sin cejilla. Nos valdremos de la fundamental en la sexta cuerda para poner nombre al acorde.

Por ejemplo, imaginemos que queremos construir el acorde de Do mayor empleando esta forma. Comenzamos localizando la nota fundamental, DO, en la sexta cuerda, hallándola en el octavo traste.

Esa será la punta del acorde. Si observas la foto del acorde con cejilla, verás que esta aparece tres trastes arriba, que se correspondería con las notas al aire en un acorde de Sol sin cejilla. En Do mayor, por lo tanto, se situará a lo largo del quinto traste:

C: 875558 / 135131 (CEGCEC)

No tiene ningún misterio teórico, como ves. Sólo hay que saber localizar la fundamental en la sexta cuerda y a partir de ahí dibujar la forma del acorde de Sol mayor plantando la cejilla tres trastes por encima.

En la práctica la cuestión es diferente, pues la sobreextensión de los dedos de la mano requiera cierta destreza técnica, especialmente a la hora de formar la cejilla en la parte más alta (cercana al clavijero). La buena noticia es, como siempre en la guitarra, que esa destreza se adquiere sin problemas con la repetición.

Vamos a analizar ahora algunas disposiciones simplificadas que nos permiten tener más control sobre las voces que queremos hacer sonar, además de facilitarnos su ejecución técnica.

La más inmediata es muy común incluso en Sol mayor sin cejilla. Consiste en apagar la quinta cuerda, logrando así más definición en la zona más grave del acorde, además de evitar la duplicidad de las terceras.

C: 8x5558 / 1x5131 (CxGCEC)

3caged3

El mismo dedo que está en la sexta cuerda se ocupa de enmudecer la quinta rozándola ligeramente.

Otra disposición muy frecuente consiste en eliminar completamente las voces más graves:

C: xx5558 / xx5131 (xxGCEC)

3caged4

En el límite, siempre podremos contar con la tríada simple:

C: xx555x / xx513x (xxGCEx)

3caged5

Esta tríada básica, que debe formar parte del bagaje de todo guitarrista versátil, está compartida tanto por la segunda como por la tercera posición CAGED (formas A y G, respectivamente).

Profundizaremos más adelante en el tema de las tríadas simples. Tal vez descubras en ellas una nueva forma de relacionarte con tu guitarra, sumamente útil, por ejemplo, en el contexto de una banda, en la que diversos instrumentos pueden competir en el mismo rango de frecuencias.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2014/08/guitarra-acorde-mayor-en-tercera-posicion-caged/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de la categoría Guitarra.

Índice de la categoría Armonía.

Python – Acceso a las variables de entorno

Objetivo: mostrar cómo acceder con Python a las variables de entorno del sistema.

En ocasiones puede ser conveniente que nuestros programas o scripts conozcan cierta información sobre el entorno en el que se están ejecutando. Las variables de entorno constituyen un medio ampliamente utilizado para facilitar este tipo de comunicación.

Comencemos agregando algunas variables nuevas a nuestro entorno antes de ejecutar Python:

javier@menta ~ $ export BANDA="Jethro Tull" COMIDA="gazpacho"

Vamos a utilizar el intérprete interactivo de Python para ejecutar código un tanto manipulador y «pelota», como si se tratase de un falso amigo que finge tus aficiones sólo para obtener algo de ti.

javier@menta ~ $ python3
Python 3.4.0 (default, Apr 11 2014, 13:05:11) 
[GCC 4.8.2] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Python dispone de un módulo que facilita el acceso a funciones del sistema operativo construyendo una abstracción independiente de la plataforma, favoreciendo así la portabilidad del código. Aunque no puede decirse que esto se consiga en el 100% de los casos, debemos admitir que los resultados son impresionantes. El módulo en cuestión es os, de modo que nuestra primera tarea consiste en traerlo a la palestra:

>>> import os

El hecho simple de importar os hace que tengamos inmediatamente a nuestra disposición un diccionario, os.environ, con una copia de todas las variables de entorno en forma de parejas clave:valor.

Por ejemplo, supongamos que queremos consultar cuál es nuestro directorio de usuario (variable HOME).:

>>> os.environ["HOME"]
'/home/javier'

Naturalmente, también tenemos a nuestra disposición las dos variables que creamos al comienzo:

>>> print("No hay nada mejor en la vida que escuchar un disco
 de {} mientras se saborea un buen {}, 
¿no crees?".format(os.environ["BANDA"], os.environ["COMIDA"]))

No hay nada mejor en la vida que escuchar un disco de Jethro Tull
 mientras se saborea un buen gazpacho, ¿no crees?
>>>

¿Cómo es posible, si son mi banda y comida favoritas!

En las raras ocasiones en las que tu aplicación quiera modificar el entorno, puede ser tentador (y recomendable) atacar directamente al diccionario. Por ejemplo:

>>>os.environ["BANDA"] = "Deep Purple"

Técnicamente hablando, este tipo de actuación sólo estará disponible en aquellas plataformas que permitan llamadas a la función putenv() (que es ejecutada automáticamente cuando se modifica os.environ). Naturalmente, estas alteraciones sólo estarán disponibles para el proceso actual y subprocesos derivados. No esperes que sobrevivan una vez haya finalizado tu aplicación Python.

Javier Montero Gabarró


Python – Acceso a las variables de entorno


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Construcción de acordes – 26: Oncena de dominante

Objetivo: mostrar la construcción del acorde de séptima de dominante extendido hasta la oncena.

En los últimos artículos de la serie mostramos la extensión por terceras hasta la oncena (11) de los acordes mayores y menores. En esta ocasión abordaremos la ampliación del de séptima de dominante, familia de acordes, como ya debes saber, extensible por naturaleza. En efecto, el tritono inherente entre los grados 3 y b7 de nuestra pizza dota a la estructura de una picante tensión que hace que sea capaz de soportar casi cualquier topping adicional.

La fórmula no presenta ningún misterio. Esbocemos primero el acorde de séptima:

7: 1 - 3 - 5 - b7

Si lo extendemos una tercera más obtenemos el de séptima con novena:

7(9) o simplemente 9: 1 - 3 - 5 - b7 - 9

Vimos también que la novena mayor podía aparecer también en sus variantes menor (b9) o aumentada (#9):

7(b9): 1 - 3 - 5 - b7 - b9

7(#9): 1 - 3 - 5 - b7 - #9

Finalmente, agregando una nueva tercera diatónica, alcanzamos la oncena justa:

7(9)(11) o simplemente 11: 1 - 3 - 5 - b7 - 9 - 11

Es importante tener muy presente que cuando hablamos de un acorde de oncena (o novena o trecena), tal cual, sin más calificativos, estamos presuponiendo la existencia de la séptima menor (b7) y todas las terceras diatónicas sucesivas; en nuestro caso, la novena mayor y oncena justa. En la práctica, en cambio, es común omitir algunas notas para simplificar su ejecución. Típicamente se prescinde de la quinta, que no aporta cualidad particular al acorde, o la novena. A veces se omite la tercera, pero observa que, en ese caso, la oncena, que no es sino una cuarta una octava más arriba (11 – 7 = 4), podría asumir las funciones de cuarta suspendida, siendo más correcto clasificar el acorde como uno de séptima con novena y cuarta suspendida:

sus7(9): 1 - 4 - 5 - b7 - 9

Para finalizar, como hemos hecho con todos los acordes expuestos en esta colección, mostraremos un par de ejemplos ilustrativos. Calculemos, por ejemplo, las notas de los acordes C11 y A11.

Tomamos las fundamentales correspondientes y calculamos las respectivas escalas mayores sobre ellas:

Do mayor: C - D - E - F - G - A - B

La mayor: A - B - C# - D - E - F# - G#

Extraemos, a continuación, los grados indicados en la fórmula del acorde (1 – 3 – 5 – b7 – 9 – 11):

C11: C - E - G - Bb - D - F

A11: A - C# - E - G - B - D

Saber construir acordes es una habilidad crítica para cualquier músico. Si aún no tienes absolutamente claros los conceptos esenciales, prueba a echar un vistazo al resto de artículos de la categoría Armonía de este blog. Dispones también de una tabla de referencia en la que sintetizo cada acorde que ha ido apareciendo aquí.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2014/07/construccion-de-acordes-26-oncena-de-dominante/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Tabla de referencia de construcción de acordes.


Índice de todos los artículos de armonía.

Guitarra – Acorde mayor en quinta posición CAGED

Objetivo: realizar un análisis exhaustivo del acorde con cejilla en forma de Re mayor (D), quinta posición CAGED, y presentar algunas variantes simplificadas.

Que no te engañe la simpleza de un Re mayor con cuerdas al aire (x x 0 2 3 2): su transposición, empleando una cejilla, requiere bastante habilidad técnica. La buena noticia es que se puede adquirir a poco que te lo propongas, ampliando así tu abanico de posibilidades a la hora de formar acordes mayores en cualquier lugar del mástil.

Comencemos repasando la composición del acorde Re mayor al aire, desglosado en sus notas:

D: x x D A D F#

Fíjate en la localización de la fundamental en la cuarta y segunda cuerda, al aire y en el tercer traste, respectivamente. Esa es la característica de la quinta posición CAGED (es la quinta porque la D es la quinta letra de la palabra CAGED). Todos los acordes en quinta posición CAGED, sean mayores o menores, se caracterizan por esta disposición de la nota fundamental: en la cuarta (la más grave) y en la segunda (una octava más alta), tres trastes más adelante (acercándonos al puente).

Como podemos comprobar sin más que contar semitonos, LA es la quinta justa del acorde y FA# su tercera mayor, de modo que la estructura de sus voces es la siguiente:

x x 1 5 1 3 (fundamental - quinta - fundamental - tercera)

Conviene tener este conocimiento siempre presente; en particular, recordar que la primera voz es la tercera mayor del acorde.

Estamos ya en condiciones de desplazar el acorde a lo largo del mástil.

Partimos de la forma de Re mayor,

D: x x 0 2 3 2 / x x 1 5 1 3 (superpongo las dos notaciones: trastes / estructura)

Desplazamos todo el conjunto, colocando una cejilla con el dedo índice en el lugar donde aparece el cero, nota que identificará precisamente la fundamental del nuevo acorde.

Imaginemos que queremos montar un acorde Sol mayor con forma de Re. El primer paso consiste en localizar una nota SOL en la cuarta cuerda de la guitarra. Si al aire es un RE, una simple cuenta nos conduce al quinto traste. Trazamos una cejilla a esa altura y construimos, a partir de ahí, el resto del acorde:

mayor-5-caged-1

G: x x 5 7 8 7 / x x 1 5 1 3 ( x x G D G B)

La composición, naturalmente, se mantiene: fundamental – quinta justa – fundamental – tercera mayor. Esa es precisamente la gracia de la transposición de acordes.

Nótese que la cejilla es opcional, pues no hacemos uso de más notas en el quinto traste. Es decir, puedes cubrir con tu índice el quinto traste completo a partir de la cuarta cuerda o puedes dejarlo sólo apoyado sobre ella.

No es un acorde que se configure fácilmente; dominarlo te llevará su tiempo. Aprecia la extensión entre los dedos índice y medio, que condiciona la movilidad del anular hacia la primera cuerda.

Observa cómo silencio la quinta cuerda tocándola ligeramente con el índice para prevenir su vibración accidental. No obstante, también podríamos hacer extensiva la cejilla a esa cuerda, pues la nota que obtendríamos sería precisamente la quinta del acorde. En nuestro ejemplo, se trataría de un RE, quinta del acorde Sol mayor. De este modo, comenzando el acorde desde la quinta cuerda, en lugar de la cuarta, obtendríamos su segunda inversión (se entiende por tal aquella posición en la que la nota más grave es la quinta del acorde):

G: x 5 5 7 8 7 / x 5 1 5 1 3 (segunda inversión)

Existen tres simplificaciones interesantes que debes conocer también e incluir inmediatamente en tu kit de herramientas, pues son muy sencillas de configurar.

La primera de ellas consiste en olvidarnos de la cuarta cuerda y utilizar exclusivamente las tres más agudas. El acorde resultante es de la misma sencillez que el acorde Re mayor al aire:

mayor-5-caged-2

G: x x x 7 8 7 / x x x 5 1 3 (primera simplificación)

Observa la estructura que he puesto a la derecha de la formación. Los tres grados (1-3-5) están presentes en su tríada más básica (aunque en segunda inversión, empezando por la quinta del acorde).

Hemos perdido como referencia la fundamental de la cuarta cuerda, pero también la encontramos en la segunda. Asegúrate, entonces, si quieres usar con soltura esta tríada simple, de conocerte al dedillo las notas que se obtienen en la segunda cuerda. Por ejemplo, ¿qué acorde dirías que es el siguiente?:

x x x 4 5 4

Como la nota que se obtiene en el quinto traste de la segunda cuerda es MI, estamos ante Mi mayor (E).

Dependiendo de la altura del mástil en la que montemos esta variación, podremos utilizar la cuarta cuerda al aire sin que cambie la denominación del acorde. Para eso, la nota RE (cuarta cuerda al aire) debe pertenecer al acorde, siendo su fundamental, tercera mayor o quinta justa.

Re mayor es la forma obvia, pues en la cuarta al aire está la fundamental (RE):

D: x x 0 2 3 2 / x x 1 5 1 3

Preguntémonos ahora: ¿qué acorde tiene por tercera mayor la nota RE?

Dado que una tercera mayor está a una distancia de dos tonos (cuatro semitonos) de la fundamental, nos basta con contar hacia atrás para descubrir que una tercera mayor po debajo de RE se halla la nota SI bemol. Esta nota es la fundamental del acorde que queremos encontrar.

¿Dónde se localiza Si bemol en la segunda cuerda?

La segunda cuerda al aire hace sonar un SI. En el traste 12 vuelve a repetirse, de modo que SI bemol está justo en el traste anterior, el 11. El acorde buscado es entonces el siguiente:

Bb: x x 0 10 11 10 / x x 3 5 1 3

El acorde sigue manteniendo su cualidad, pues no hemos hecho más que repetir la tercera (RE), también presente en el décimo traste de la primera cuerda.

Busquemos ahora qué acorde tiene por quinta justa la nota RE.

Una quinta justa son siete semitonos de separación. Si se los quitamos a la nota RE obtenemos la nota SOL. Si te sabes de cabeza el círculo de quintas también habrías llegado a esta conclusión inmediatamente: una quinta antes de RE en el círculo se encuentra la nota SOL.

De modo que, curiosamente, el acorde que hemos estado utilizando hasta ahora como ejemplo, SOL mayor, también lo podríamos haber montado en versión simplificada reutilizando la cuarta al aire:

G: x x 0 7 8 7 / x x 5 5 1 3

La diferencia con respecto al acorde completo en quinta posición CAGED (x x 5 7 8 7 / x x 1 5 1 3) estriba en que en éste la nota más grave es la fundamental, mientras que en la versión reducida se trata de una quinta.

La segunda simplificación consiste en olvidarse de la primera cuerda y utilizar únicamente la cuarta, tercera y segunda. Esto nos permite un uso más cómodo de los dedos, evitando la extensión entre el índice y el medio.

mayor-5-caged-3

G: x x 5 7 8 x / x x 1 5 1 x (segunda simplificación)

Si prestas atención a la estructura, observa que esto tiene truco: no está presente la tercera mayor, que es precisamente la nota que caracteriza a los acordes mayores. No podemos denominar, por lo tanto, Sol Mayor a este acorde, sino Sol 5 (acorde de quinta o power chord).

G5: x x 5 7 8 x

En el contexto de una banda, habitualmente otros instrumentos se ocuparían de hacer sonar la tercera ausente. Al carecer de esta, podríamos usarlo también perfectamente en lugar de un Sol menor.

Es importante silenciar la primera cuerda, de lo que pueden ocuparse los dedos índice o meñique.

El acorde de quinta es una opción aceptable para cualquier guitarrista que no quiera afrontar la quinta posición CAGED completa, particularmente en las posiciones más cercanas al clavijero, donde la extensión de la mano es mayor. Así, por ejemplo, una típica alternativa cómoda a Mi bemol mayor (Eb) es su sustitución por su versión sin tercera, Mi bemol 5 (Eb5):

Eb: x x 1 3 4 3 / x x 1 5 1 3

Eb5: x x 1 3 4 x / x x 1 5 1 x

Al igual que hicimos con la primera versión simplificada, podemos deducir qué acorde aprovecharía la primera al aire. Debemos encontrar aquel cuya tercera mayor sea la nota MI (primera cuerda al aire). Una cuenta sencilla nos lleva hasta Do mayor, cuya fundamental se localiza en el décimo traste de la cuarta cuerda:

C: x x 10 12 13 0 / x x 1 5 1 3

Te dejo como ejercicio la busqueda de los que tienen la fundamental o la quinta en la primera al aire. Ten presente, no obstante, que esos acordes no serán mayores, sino de quinta, pues no figurará ninguna tercera en ellos.

Finalmente, la tercera simplificación consiste en evitar la duplicidad de la fundamental en la segunda cuerda:

mayor-5-caged-4

G: x x 5 7 x 7 / x x 1 5 x 3

Debemos ser muy cuidadosos y asegurarnos de que la segunda cuerda queda silenciada completamente, lo que podemos lograr tanto con el dedo índice como con el medio, que descansan sobre ella sin presionarla.

Nuevamente, te propongo como ejercicio descubrir qué acordes concretos, basados en esta simplificación, se beneficiarían de una eventual segunda cuerda al aire, nota SI. No deberá resultarte complicado si has comprendido los ejemplos anteriores.

Permítete trabajar la quinta posición mayor CAGED y sus simplificaciones; te ayudarán, sin duda, a ser un guitarrista más versátil.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2014/07/guitarra-acorde-mayor-en-quinta-posicion-caged/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de la categoría Guitarra.

Índice de la categoría Armonía.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies