Рубрики
Без рубрики

Визуализация фибоначчи: для любовника музыки в вас!

Визуализируя серию Fibonacci в качестве ноты с помощью Python. Теги с фибоначчими, Python, Stestmusic, Music.

Статья в первый раз, поэтому оправдывайте опечатки и ошибки!

Общая проблема: программирование серии FIBONACCI

На протяжении всего недавнего курса преобразования компьютерных наук я изучал введения как на Python, так и Java. На обоих языках одно из представленных общих проблем было написано для записи программы для отображения N-го числа серии FIBONACCI. Похоже, это обычный ступеньки для большинства программистов при изучении нового языка.

Ознакомившись, желая применить то, что я учился в классе в независимый проект, я наткнулся на эту идею визуализации серии Fibonacci в качестве ноты. Я не совсем помню, где или когда я слышал о идее -, возможно, из Мэта Паркера, Ханны Фрай или одного из моих лекторов. Я поглотил тему и не нашел никакой непосредственной практической реализации серии Fibonacci, представляющую визуализирующую на ноты. В нем закладывают мою задачу. При ретроспективе, возможно, быстрый поиск GitHub дал бы больше результатов – но снова я был младшим и более наивным разработчиком, чем я сегодня.

Python – какие библиотеки?

Хорошо, поэтому у меня была общая идея проекта – генерировать до N-Th Noom ряд серии Fibonacci и как-то визуализирует эти данные о нотах. После некоторых быстрых исследований я поселился на использовании библиотеки Python под названием Mingus В сочетании с программой Лиловый

Как не тратить время восстановить библиотеку Python2 для работы с Python3 …

Это должно пойти, не говоря, в то время, когда я был менее опытным и склонен к этим ошибкам. Я закончил загрузить версию Mingus, которая управляла на Python2, пока я бежал Python3. Вместо того, чтобы выглядеть вверх, если пакет Python 3 существовал, я закончил сделать несколько ручной настройки пакета, чтобы она работала. Ох! Для младшего DEV нет, обязательно проверьте версии Python из любых установленных пакетов!

Хроматическая шкала

Несмотря на то, что не самое элегантное решение, которое я оказался по существу, модифицируя ранее разработанное решение колледжа, которое выпустило серию FIBONACCI до N-Th Number и использовал модуль этого номера, чтобы определить, кто будет представлять. Используя модуль 12, я смог ассоциировать различные числа для всех заметок в хроматическом масштабе, начиная с базовой ноты C (я только использовал Sharps для удобства Sake)

После установления соединения между сериалом Fibonacci и хроматическими нотами масштаба только «сложная часть» оттуда по существу выяснили, как перевести эти сгенерированные заметки в ноту.

После импорта библиотеки Mingus это было на самом деле довольно прямо вперед! Код выглядел немного похож на это (да, я знаю, что это немного неэффективно – я не вернулся и посылал код, поскольку он был изначально брошен вместе):

from mingus.containers import Bar
from mingus.containers import Composition
from mingus.containers import Track
from mingus.containers import NoteContainer
import mingus.extra.LilyPond as LilyPond

x = int(input('Song Length (number of notes): '))

song = []
b = Bar() # creates new bar element for Mingus = has limit of 4/4 timing by default
b.set_meter((4,4))

c = Composition()
c.set_author('Daniel McMahon', 'daniel40392@gmail.com')
c.set_title('Ode to Fibonnachi')
t = Track()
t.add_bar(b)
c.add_track(t)

def fib(n):
    """Function that generates notes based off the Fibonnachi Series"""
    a=0
    b=1
    print('Generating Music.... Please Wait....',end='')

    for i in range (1,n+1):
        fib=a+b
        if fib%12==1:
            song.append('C')
        elif fib%12==2:
            song.append('C#')
        elif fib%12==3:
            song.append('D')
        elif fib%12==4:
            song.append('D#')
        elif fib%12==5:
            song.append('E')
        elif fib%12==6:
            song.append( 'F')
        elif fib%12==7:
            song.append('F#')
        elif fib%12==8:
            song.append('G')
        elif fib%12==9:
            song.append('G#')
        elif fib%12==10:
            song.append( 'A')
        elif fib%12==11:
            song.append('A#')
        elif fib%12==0:
            song.append('B')
        a=b
        b=fib

    #this code will print song in reverse
    #for i in reversed(song):
    #    print (i + ' ,', end='')

    n = NoteContainer(song)

while x != '':
    fib(x)
    print()
    for note in song:
            b + note
            c.add_note(note)
    comp = LilyPond.from_Composition(c)
    LilyPond.to_pdf(comp, "Ode_to _Fibonnachi")
    print("Song completed - check desktop for exported PDF")
    x = int(input('Song Length (number of notes): '))

Результат?

Ниже небольшой снимок результата – интересный рисунок возникает для выходов, показывающую повторный шаблон каждые заметки!

Доступна ссылка на REPO GitHUB здесь с выходом образца доступны в виде файла PDF.

Некоторые дополнительные идеи и эксперименты …

Этот подход генерации ноты хорошо работает с другими математическими рядами – непосредственными, которые я думал о принятии, включают в себя каталонскую и фигурную серию. Некоторые примеры поколений Note Fibonacci для них также включены в связанное репо выше.

Это также может быть стоит экспериментировать с начать на пункт с другой запиской о хроматическом масштабе – однако интервалы все равно останутся одинаковым между нотами.

Следующий логический шаг в этом проекте состоит в том, чтобы получить музыкальный вывод из сгенерированной ноты. Я изначально пробовал это при работе над проектом 2 года назад на старом ноутбуке Windows, мне придется вернуться к нему в ближайшее время и посмотреть, смогу ли я получить некоторые живые музыкальные обратной связи.

Еще один интересный подход, который я взял в репозитории, использует НЛТК Библиотека для генерации частоты появления примечания в разных рядах чисел Фибоначчи. Вы получаете интересные результаты, используя различные математические серии – я рекомендую экспериментировать с ним самостоятельно!

Некоторые последние мысли

Сам проект был использован в качестве основного способа интеграции моей любви к музыке в мою кодировку. Серия Fibonacci можно считать довольно скучной темой при попытке реализовать его на новый язык, но когда вы добавляете в некоторые из этих основных дополнительных шагов, вы можете создать что-то действительно интересное и креативное!

Я всегда буду поощрять новых разработчиков для изучения основных строительных блоков языков программирования в новых и творческих путях. Лично вы можете найти его более полезным – плюс это отличный способ создать свой личный портфолио и иметь что-то дополнительно поболтать в любых будущих интервью на работу!

Возможно, вы попробовали программировать что-то подобное на разных языках с интересными результатами – я хотел бы услышать об этом – обязательно оставьте любые отзывы или комментарии ниже.

Снова оправдывайте какие-то опечатки или проблемы форматирования – это мой первый, надеюсь, много сообщений здесь!

Самые теплые пожелания, Даниэль МакМахон

Оригинал: “https://dev.to/dan_mcm_/visualizing-fibonacci-for-the-music-lover-in-you-2609”