Играем мелодию "Подмосковные вечера"

    Прежде всего, немного теории музыки. Как известно, в музыкальной октаве двенадцать нот. Это если посчитать основные тона и плюс полутона: до, до-диез, ре, ре-диез, ми, фа, фа-диез, соль, соль-диез, ля, ля-диез, си.

    Следующая нота после «си» будет опять «до», но уже следующей октавы. Частота звука одинаковых нот соседних октав отличается ровно в два раза. Мы не будем сильно «занаучивать» и покажем простую формулу. Более подробно о частоте звука разных нот можно почитать здесь https://ru.wikipedia.org/wiki/Высота звука. Известно отношение частот между двумя соседними нотами, оно вычисляется по следующей формуле:

формула для музыкальной ноты

 

  По этой формуле можно вычислить значения частот всех нот зная всего одну ноту, например, частота звука ноты «ля» первой октавы 440 Герц. Отсюда получается:

«До» C 523,2511306 Hz
«До-диез» C# 554,3652620 Hz
«Ре» D 587,3295358 Hz
«Ре-диез» D# 622,2539674 Hz
«Ми» E 659,2551138 Hz
«Фа» F 698,4564629 Hz
«Фа-диез» F# 739,9888454 Hz
«Соль» G 783,9908720 Hz
«Соль-диез» G# 830,6093952 Hz
«Ля» A 880 Hz
«Ля-диез» A# 932,327523 Hz
«Си» H H 987,7666025 Hz
«До» след. октавы C 1046,502261 Hz

    Теперь, зная основные звуковые частоты мы можем сделать проект для нашей платы, который будет играть выбранную нами мелодию. Мы будем синтезировать все нужные нам частоты из одной опорной 5МГц. В используемом нами чипе MAX-II есть встроенный генератор который мы и будем использовать. Нам нужно будет подобрать (вычислить) такие делители частоты, чтобы получились нужные нам частоты. Например, для ноты «До» делитель будет примерно 9560, так как 5000000/9560 = 523,0125 и это почти то, что нужно.

    Вот собственно как будет выглядеть наш проект в среде разработки программы Альтера QuartusII (кликните на картинку, чтобы увеличить ее):

Снимок с экрана QuartusII

    На рисунке красным цветом я сделал кое какие комментарии. Наша плата сделана так, что у нее есть четыре кнопки, восемь светодиодов и шесть «сильных» выходов (это группы по десять параллельно соединенных выходов).

    Одну кнопку, соответствующую входу key[3] мы используем для сброса схемы – это будет перезапуск мелодии.

    Восемь светодиодов мы будем использовать для отображения текущей ноты, которую играем.

    Два «сильных» выхода будем использовать для вывода звука на динамик. На них подается один и тот же сигнал звуковой частоты, но в «противофазе». Если на одном выходе сигнал «ноль», то на другом «единица». И наоборот.

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

    Я написал эти модули на языке VERILOG – мне так проще и понятней. Вы, если захотите, можете сделать графическую схему или использовать другой язык, например, VHDL. Среда QuartusII компании Altera поддерживает многие языки.

    Здесь вы можете выкачать весь проект: 

    Здесь вы можете посмотреть исходный текст синтезатора частот на Verilog.

    Здесь вы можете посмотреть исходный текст генератора нот.

    Вот краткие пояснения по поводу мелодии. Находим ноты желаемой мелодии. Я выбрал музыку «Подмосковные вечера», а Вы можете выбрать себе что-то еще.

Ноты "Подмосковные вечера"

    На рисунке я выделил нотки мелодии в красные кружочки. Последовательность которую мы будем играть это:

 1.ре - 3

 2.фа - 6

 3.ля - 10

 4.фа - 6

 5.соль - 8

 6.соль - 8

 7.фа - 6

 8.ми - 5

 9.ля - 10

 10.ля - 10

 11.соль - 8

 12.соль - 8

 13.ре - 3

 14.ре - 3

 15.ре - 3

 16.ре - 3

    Каждой ноте в нашем синтезаторе частот соответствует ее индекс или номер. Нам нужно подавать на синтезатор частот номера нот в последовательности приведенной выше. Обратите внимание, что некоторые ноты мы играем по нескольку раз. Это определяется нужной длительностью нот. Черная нотка с вертикальной палочкой в два раза короче такой же белой нотки. Можно привести такую схемку:

interv.JPG

     Более подробно об интервалах в музыке Вы можете почитать в той же Википедии: https://ru.wikipedia.org/wiki/Современная_музыкальная_нотация.

    Давайте посмотрим как наша платка играет мелодию через подключенный к ней маленький динамик (только не забудьте включить колоночки вашего компьютера!).

    Теперь о практической стороне. Куда этот проект можно использовать? Ну наверное Вы можете сделать подарок-сувенир своим друзьям на день рождения. Это как-то можно использовать в качестве настоящего дверного звонка. В общем – творите – все в Ваших руках!

 

 


Добавить комментарий