Secuencia de Fibonacci: un cuento musical en Python

Mar 20 2023
La serie de Fibonacci es una secuencia matemática fascinante que ha capturado la imaginación de matemáticos, científicos y artistas durante siglos. Se ha encontrado que esta secuencia de números, que comienza con 0 y 1, y cada número subsiguiente es la suma de los dos anteriores, ocurre en la naturaleza, el arte y la música.
Foto de Robby McCullough en Unsplash

La serie de Fibonacci es una secuencia matemática fascinante que ha capturado la imaginación de matemáticos, científicos y artistas durante siglos. Se ha encontrado que esta secuencia de números, que comienza con 0 y 1, y cada número subsiguiente es la suma de los dos anteriores, ocurre en la naturaleza, el arte y la música. De hecho, muchos músicos y compositores han utilizado la secuencia de Fibonacci para crear obras musicales hermosas e intrincadas.

Una de las aplicaciones más interesantes de la secuencia de Fibonacci en la música es la creación de lo que se conoce como el "ritmo de Fibonacci". Este ritmo se basa en la secuencia de Fibonacci, en la que cada número de la secuencia representa un tiempo en el ritmo. Por ejemplo, los primeros tiempos de un ritmo de Fibonacci serían:

1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144...

Para crear un ritmo de Fibonacci en Python, podemos definir una función que genere una lista de latidos basada en la secuencia de Fibonacci:

def fibonacci_rhythm(num_beats):
    # Initialize the first two numbers in the sequence
    fib_seq = [1, 1]
    
    # Generate the Fibonacci sequence up to the desired number of beats
    while len(fib_seq) < num_beats:
        next_num = fib_seq[-1] + fib_seq[-2]
        fib_seq.append(next_num)
    
    # Return the list of beats
    return fib_seq[:num_beats]

import winsound
# Generate a 13-beat Fibonacci rhythm
fib_rhythm = fibonacci_rhythm(13)
# Play the rhythm using simple sine wave tones
for beat in fib_rhythm:
    frequency = 440 * (2 ** (beat / 12))
    frequency = int(max(32,min(frequency,32767)))
    duration = 200
    winsound.Beep(frequency,duration)

Un ejemplo es el uso de la secuencia de Fibonacci para crear una escala pentatónica, que es una escala de cinco notas que se usa comúnmente en muchas formas de música. Para crear una escala pentatónica de Fibonacci, podemos usar la siguiente fórmula:

scale = [0, 1, 3, 5, 8]
for i in range(5,21):
    next_note = scale[-1] + scale[-2]
    scale.append(next_note % 12)

from midiutil import MIDIFile
# Generate a Fibonacci pentatonic scale
scale = [0, 1, 3, 5, 8]
for i in range(5, 21):
    next_note = scale[-1] + scale[-2]
    scale.append(next_note % 12)

# Create a MIDI file with a Fibonacci melody
midi_file = MIDIFile(1)
# Add notes to the MIDI file based on the Fibonacci sequence
time = 0
for beat in fibonacci_rhythm(13):
    note = scale[beat % 5] + (beat // 5) * 12
    midi_file.addTempo(0,0,120)
    midi_file.addNote(0, 0,note,time,1,127)
    time += 0.5
# Write the MIDI file to disk
with open("fibonacci.mid", "wb") as output_file:
    midi_file.writeFile(output_file)

Escuche la suave belleza de la secuencia de Fibonacci en la música de aSongScout:https://youtu.be/IGJeGOw8TzQ. Piérdete en esta fascinante interacción de matemáticas y música, mientras cada nota se desarrolla con la precisión y elegancia de los números.