Fibonacci Sequence : นิทานดนตรีใน Python

Mar 20 2023
อนุกรมฟีโบนัชชีเป็นลำดับทางคณิตศาสตร์ที่น่าสนใจซึ่งดึงดูดจินตนาการของนักคณิตศาสตร์ นักวิทยาศาสตร์ และศิลปินมานานหลายศตวรรษ ลำดับของตัวเลขนี้ ซึ่งขึ้นต้นด้วย 0 และ 1 และแต่ละหมายเลขที่ตามมาคือผลรวมของสองตัวก่อนหน้า พบว่าเกิดขึ้นในธรรมชาติ ศิลปะ และดนตรี
ภาพถ่ายโดย Robby McCullough บน Unsplash

อนุกรมฟีโบนัชชีเป็นลำดับทางคณิตศาสตร์ที่น่าสนใจซึ่งดึงดูดจินตนาการของนักคณิตศาสตร์ นักวิทยาศาสตร์ และศิลปินมานานหลายศตวรรษ ลำดับของตัวเลขนี้ ซึ่งขึ้นต้นด้วย 0 และ 1 และแต่ละหมายเลขที่ตามมาคือผลรวมของสองตัวก่อนหน้า พบว่าเกิดขึ้นในธรรมชาติ ศิลปะ และดนตรี ในความเป็นจริง นักดนตรีและนักแต่งเพลงหลายคนใช้ลำดับฟีโบนัชชีเพื่อสร้างผลงานเพลงที่สวยงามและซับซ้อน

หนึ่งในการประยุกต์ใช้ Fibonacci Sequence ในดนตรีที่น่าสนใจที่สุดคือการสร้างสิ่งที่เรียกว่า "Fibonacci Rhythm" จังหวะนี้ขึ้นอยู่กับลำดับฟีโบนัชชี โดยตัวเลขแต่ละตัวในลำดับจะแสดงถึงจังหวะในจังหวะนั้น ตัวอย่างเช่น สองสามจังหวะแรกของจังหวะ Fibonacci จะเป็น:

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

ในการสร้างจังหวะ Fibonacci ใน Python เราสามารถกำหนดฟังก์ชันที่สร้างรายการจังหวะตามลำดับ 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)

ตัวอย่างหนึ่งคือการใช้ลำดับฟีโบนัชชีเพื่อสร้างสเกลเพนทาโทนิก ซึ่งเป็นสเกลห้าโน้ตที่ใช้กันทั่วไปในดนตรีหลายรูปแบบ ในการสร้าง 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)

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)

ฟังความงามอันกลมกล่อมของลำดับ Fibonacci ในเพลงโดย aSongScout :https://youtu.be/IGJeGOw8TzQ. ปลดปล่อยตัวเองไปกับการผสมผสานระหว่างคณิตศาสตร์และดนตรีอันน่าหลงใหล เมื่อโน้ตแต่ละตัวเผยออกมาด้วยความแม่นยำและความสง่างามของตัวเลข