フィボナッチ数列 : Python の音楽物語

Mar 20 2023
フィボナッチ数列は、何世紀にもわたって数学者、科学者、芸術家の想像力を魅了してきた魅力的な数学的数列です。0 と 1 で始まり、後続の各数字は前の 2 つの数字の合計であるこの一連の数字は、自然、芸術、音楽の中で発生することがわかっています。
写真提供: Unsplash のロビー・マッカロー

フィボナッチ数列は、何世紀にもわたって数学者、科学者、芸術家の想像力を魅了してきた魅力的な数学的数列です。0 と 1 で始まり、後続の各数字は前の 2 つの数字の合計であるこの一連の数字は、自然、芸術、音楽の中で発生することがわかっています。実際、多くの音楽家や作曲家がフィボナッチ数列を使用して、美しく複雑な音楽作品を作成してきました。

音楽におけるフィボナッチ数列の最も興味深い応用の 1 つは、「フィボナッチ リズム」として知られるものの作成です。このリズムはフィボナッチ数列に基づいており、数列内の各数値がリズムのビートを表します。たとえば、フィボナッチ リズムの最初の数拍は次のようになります。

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

Python でフィボナッチ リズムを作成するには、フィボナッチ数列に基づいてビートのリストを生成する関数を定義できます。

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)

1 つの例は、フィボナッチ数列を使用してペンタトニック スケールを作成することです。ペンタトニック スケールは、多くの形式の音楽で一般的に使用される 5 音の音階です。フィボナッチ ペンタトニック スケールを作成するには、次の公式を使用できます。

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)

aSongScout によるフィボナッチ数列の穏やかな美しさを音楽で聴いてください。https://youtu.be/IGJeGOw8TzQ。各音符が数字の正確さと優雅さで展開されるにつれて、この数学と音楽の魅惑的な相互作用に夢中になってください。