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

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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

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


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


Дальше в посте будет много кода в виде скриншотов. Забрать его в виде текста можно здесь.
Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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


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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

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

Интересный Python #13: играем "Имперский марш" Python, Программирование, IT, Обучение, Star Wars, Имперский марш, Урок, Длиннопост

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

Программирование на python

686 постов11.9K подписчиков

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

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


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

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

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

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

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

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


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

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

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

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

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

Вы смотрите срез комментариев. Показать все
1
Автор поста оценил этот комментарий

Код картинками, боже ж ты мой.

раскрыть ветку (4)
3
Автор поста оценил этот комментарий

На Пикабу можно выкладывать код не картинками, я чего-то не знаю?)


А вообще в самом начале и в самом конце поста написано: "Код в виде текста можно забрать ЗДЕСЬ". В самом начале даже цитатой выделил, чтобы заметнее было.

раскрыть ветку (2)
Автор поста оценил этот комментарий

>"Код в виде текста можно забрать ЗДЕСЬ"

Не заметил, лол.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий
Shit happens)
1
Автор поста оценил этот комментарий

А копипастить для учёбы не полезно!

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку