84

Интересный Python #13: играем "Имперский марш"

В прошлых постах было слишком много слов «работаем». Поэтому сегодняшний пост будет про то, как играть. Причём играть не что-то там, а музыку. Причём музыку не какую-то там, а «Имперский марш» из «Звёздных войн». Так что, товарищи Дарты Вейдеры, отвлекитесь на пару минут от удушения очередного офицера и насладитесь чудесными звуками.

Для воспроизведения звуков будем использовать модуль winsound из стандартной библиотеки Python. Устанавливать ничего не нужно, он уже идёт в комплекте с интерпретатором.

В нём есть функция Beep(), с помощью которой можно воспроизвести звук заданной частоты и заданной длительности.


Важно: модуль работает только под Windows. Господа линуксоиды, сегодня вы в пролёте :(


Дальше в посте будет много кода в виде скриншотов. Забрать его в виде текста можно здесь.

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

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


Составим список необходимых нот:

Ключ - это название ноты, а значение - это частота.

Запишем мелодию в виде набора нот.

1/4, 3/16 и прочее - это длительность каждой ноты.

Нам понадобятся 2 функции: одна для воспроизведения конкретной ноты, а вторая - для воспроизведения всей мелодии.

Воспроизводим ноту

Воспроизводим мелодию

Наслаждаемся результатами

Оригинальный темп мелодии - 103 BPM.

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

Правила сообщества

Публиковать могут пользователи с любым рейтингом. Однако!


Приветствуется:

• уважение к читателям и авторам

• конструктивность комментариев

• простота и информативность повествования

• тег python2 или python3, если актуально

• код публиковать в виде цитаты, либо ссылкой на специализированный сайт


Не рекомендуется:

• допускать оскорбления и провокации

• распространять вредоносное ПО

• просить решить вашу полноценную задачу за вас

• нарушать правила Пикабу