Прежде всего, немного теории музыки. Как известно, в музыкальной октаве двенадцать нот. Это если посчитать основные тона и плюс полутона: до, до-диез, ре, ре-диез, ми, фа, фа-диез, соль, соль-диез, ля, ля-диез, си.
Следующая нота после «си» будет опять «до», но уже следующей октавы. Частота звука одинаковых нот соседних октав отличается ровно в два раза. Мы не будем сильно «занаучивать» и покажем простую формулу. Более подробно о частоте звука разных нот можно почитать здесь 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 (кликните на картинку, чтобы увеличить ее):
На рисунке красным цветом я сделал кое какие комментарии. Наша плата сделана так, что у нее есть четыре кнопки, восемь светодиодов и шесть «сильных» выходов (это группы по десять параллельно соединенных выходов).
Одну кнопку, соответствующую входу 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
Каждой ноте в нашем синтезаторе частот соответствует ее индекс или номер. Нам нужно подавать на синтезатор частот номера нот в последовательности приведенной выше. Обратите внимание, что некоторые ноты мы играем по нескольку раз. Это определяется нужной длительностью нот. Черная нотка с вертикальной палочкой в два раза короче такой же белой нотки. Можно привести такую схемку:
Более подробно об интервалах в музыке Вы можете почитать в той же Википедии: https://ru.wikipedia.org/wiki/Современная_музыкальная_нотация.
Давайте посмотрим как наша платка играет мелодию через подключенный к ней маленький динамик (только не забудьте включить колоночки вашего компьютера!).
Теперь о практической стороне. Куда этот проект можно использовать? Ну наверное Вы можете сделать подарок-сувенир своим друзьям на день рождения. Это как-то можно использовать в качестве настоящего дверного звонка. В общем – творите – все в Ваших руках!
Подробнее...