Как сделать музыкальный плеер на python

Добавил пользователь Дмитрий К.
Обновлено: 05.10.2024

Мне было интересно, был ли уже встроенный плагин или модуль для использования или мне нужно создать графический интерфейс с самого начала и использовать музыкальную библиотеку ?
Что мне нужно, так это включить mp3-плеер внутри моей программы ( не использовать внешний, я не хочу открывать другое окно ) и контролировать воспроизведение, паузу, громкость, следующую песню, песню prev и слайд времени в песне

1 ответ

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


LOLZTEAM

Разбираемся в основах Python на примере музыкального плеера!

Статья носит образовательный характер, мы ни к чему не призываем и не обязываем. Информация представлена исключительно в ознакомительных целях.

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

Всем привет! В этой статье мы напишем небольшое приложение на Python - плеер для прослушивания музыки.

Для достижения нашей цели можно использовать несколько разных и самых известных модулей:

В данной статье мы остановимся на самом популярном PyQt.

PyQt содержит не только удобные методы для создания приложений, но и инструменты для их дизайна - Qt Designer, что не предоставляет ни один другой модуль. PyQt доступен для Windows, MacOSX, Linux, Android iOS и Raspberry Pi и различных версий Python от v2 до Qt v5.

Также мы будем использовать модуль pygame для манипуляций с музыкой.

Установка Python

Изначально нам нужно установить сам язык программирования Python. Переходим на официальный сайт языка Python. Нажимаем на вкладку Downloads. Далее на кнопку Download Python 3.9.5. У меня стоит Python 3.9, думаю, у вас всё должно работать.


[​IMG]

Получаем обычный установщик и запускаем его после скачки.

  • При установке обязательно жмём Add Python 3.9 to PATH
  • Жмём Install Now
  • Не трогаем Customize Location

Установка среды программирования

Лучше не использовать блокнот или Python Idle, для такого рода проектов. Это максимально неудобно!

Поэтому я советую лучшую IDE - PyCharm. Зацикливаться на ней я не буду, в интернете полно гайдов по его установке и настройке.

Создание проекта

Заходим в PyCharm -> File -> New Project -> Заполняем имя проекта. Жмём Inherit global site-packages. Создаём проект.

Открываем cmd или терминал на вашем компьютере (если проект в PyCharm можно и терминал в PyCharm):

Вписываем pip install pyqt5 -> Вписываем pip install pyqt5-tools-> Вписываем pip install pygame.

Настройка QtDesigner

Теперь программа находится на вашем компьютере по адресу:

или (для старых версий):

Если программа отсутствует (частая проблема), то можно скачать здесь.

Создайте ярлык к этой программе, поскольку использовать ее придется часто.

Работа с QtDesigner

Давайте запустим программу и посмотрим, что в ней можно сделать.


[​IMG]

Выбираем MainWindow и жмём Create.

Теперь мы видим сетку и Widget Box слева.

Давайте разберёмся, что где находится:

  • Widget Box - место, где присутствуют все виджеты
  • Центральная область - место для размещения виджетов
  • Object Inspector - место для просмотра всех созданных виджетов
  • Property Editor - место для изменения и просмотра характеристик выбранного виджета

Накидаем начальный интерфейс. Примерно вот так:


[​IMG]

  • ListWidget посередине
  • несколько кнопок (PushButton)
  • LcdNumber для таймера
  • Horizontal Slider для увеличения громкости
  • PlainText сверху для названия песни

Иконки подключаются к кнопке через характеристику icon у PushButton.

Все файлы в pyqt для дизайна сохраняются в ui формате.

Если вы скачали файл от меня, то надо для каждой кнопки переопределить путь к иконкам. Чтобы это сделать, откройте ui файл через designer.exe, и для каждой кнопки укажите в характеристике icon путь до картинки.

Работа с Pyqt5

Для начала создадим файл main.py и вставим в него полный код, который находится ниже в статье.

Мы создаём класс MyWidget и подключаем к нему файл good.ui(наш дизайн) и для каждой кнопки создаём функцию и подключаем к ней.

Названия виджетов такие же как мы их создавали, но пишутся так self.имя_виджета.

Функции

__init__

Данная функция запускается при включении приложения. Давайте посмотрим, что за что отвечает.

    () - подключение дизайна к программе, у меня файл с дизайном называется good.ui - отвечает за проигрывание музыки, если False - музыка не играет, True - играет () - подключает музыку к программе, пока что она не загружена и не включена
  • подключение всех событий методом clicked.connect() в к определённым функциям - таймер, который каждую минуту обновляет время

lcd_timer

Данная функция - таймер который отсчитывает длительность музыки. Обновляется каждую секунду.

    - объект QLcdNumber (дисплей). Методом display() выводится время.
  • далее идёт условие, проверяющее длительность музыки на совпадение с таймером.

add_button

Данная функция добавляет выбранный музыкальный файл, используя QFileDialog. Затем добавляет в таблицу методом addItem().

delete_button

Данная функция удаляет выбранный музыкальный файл методом takeItem().

playbutton

Данная функция отвечает за кнопку проигрывания. При нажатии берётся выбранный элемент методом selectedItems()

Сравнивается не изменил ли музыку пользователь. Если изменил, то мы проигрываем заново методом load(), обновляем счётчик.

Если не изменил, то музыку уходит с паузы, если была остановлена, методом unpause()

stopbutton

Данная функция отвечает за кнопку паузы. Если музыка играет (за это отвечает self.playing), таймер останавливается, музыка останавливается методом pause().

backwardbutton

Данная функция отвечает за кнопку отматывания назад на 10 секунд. Если музыка идёт дольше 10 секунд, то методом set_pos() устанавливаем позицию self.time_counter - 10 (эквивалентно времени 10 секунд назад).

forwardbutton

Данная функция отвечает за кнопку отматывания вперёд на 10 секунд. Всё аналогично прошлой функции.

scrolled

Данная функция отвечает за событие изменения звука. Методом value() получаем новое значение звука. Методом set_value() ставим новое значение.

В предыдущем посте я писал про генерацию звука на Rust`е для азбуки Морзе.

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

Ну что же, поехали!

Не будем изобретать что-то новое, а возьмём функцию генерации звука из прошлой статьи и адаптируем её под python:

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

Запишем частоты нот первой октавы в массив и напишем функцию, которая будет их генерировать

Остаётся последнее — вывести звук.

Для вывода звука будем использовать кроссплатформенную библиотеку PyAudio.

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

Давайте для начала разберемся, как использовать эти модули и какие наиболее часто используемые методы они содержат. Начнем с модуля pygame.mixer.music.

Этот модуль поддерживает основные звуковые форматы:

и загружает их с помощью функции load:

После успешной загрузки мы можем воспроизвести этот файл с помощью функции

  • loops – число повторений (0 – проигрывать один раз, 1 – два раза и т.д, -1 – бесконечное повторение);
  • start – начальное время проигрывания файла (в секундах);
  • fade_ms – затухание звука при окончании проигрывания (в мс).

Например, запустим фоновую музыку с бесконечным повторением:

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

  • pause() – поставить воспроизведение на паузу;
  • unpause() – продолжить воспроизведения с места паузы.

Соответственно, у нас при изменении флага flPause воспроизведение то ставится на паузу, то снимается с паузы. Начальное значение этого флага определим как False:

Если нам нужно остановить воспроизведение, то используется метод:

а для воспроизведения с начала метод:

  • set_volume(volume) – установить уровень громкости (volume – вещественное значение от 0 до 1);
  • get_volume() – получить текущее значение уровня громкости.

Например, сделаем, чтобы при нажатии на курсорные клавиши влево/вправо звук уменьшался и увеличивался:

А сам параметр vol изначально установим в 1.0:

По аналогии используются и все остальные функции модуля music.

Модуль pygame.mixer

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

Первое что нужно сделать, это проинициализировать этот модуль. Для этого у него есть две функции:

init(frequency=44100, size=-16, channels=2, buffer=512, devicename=None, allowedchanges=AUDIO_ALLOW_FREQUENCY_CHANGE | AUDIO_ALLOW_CHANNELS_CHANGE)

pre_init(frequency=44100, size=-16, channels=2, buffer=512, devicename=None)

  • frequency – частота воспроизведения звуковых файлов;
  • size – число бит для представления аудио данных (знак минус говорит, что используются знаковые числа);
  • channels – число каналов;
  • buffer – размер буфера (в байтах);
  • allowedchanges – дополнительные флаговые настройки.

Функция init вызывается автоматически при инициализации Pygame:

Но с аргументами по умолчанию. Если нужно поменять эти параметры, то следует до pygame.init вызвать метод pygame.pre_init() с нужным набором параметров. Мало того, как мы увидим, вызов pre_init устраняет один из неприятных эффектов – задержку в воспроизведении звуков.

  • stop() – остановить вопроизведение;
  • pause() – пауза воспроизведения;
  • unpause() – снятие с паузы.

Но вот загрузка и воспроизведение звуковых файлов выполняется немного по другому – с помощью класса:

Здесь filename – это звуковой файл в формате

Обратите внимание, класс Sound не поддерживает файлы в формате mp3. Итак, чтобы загрузить какой-либо звуковой эффект, достаточно выполнить вот такую строчку:

  • play(loops=0, maxtime=0, fade_ms=0) – воспроизведение звука;
  • stop() – останов воспроизведения;
  • set_volume(value) – настройка громкости звучания;
  • get_volume() – возвращает текущее значение громкости (число от 0 до 1).

Например, сделаем, чтобы при нажатии на клавишу Enter звучал файл catch.ogg:

Однако, смотрите, нажимая клавишу, звук появляется с задержкой. Это из-за того, что нужно выполнить команду pre_init() миксера до инициализации самого Pygame:

Теперь, при воспроизведении звуковых эффектов задержек не будет.

Также вы можете заметить, что класс Sound не содержит методов для пауз. Дело в том, что весь этот функционал выносится на уровень канала или миксера в целом. Что это за каналы? Смотрите, когда мы запускаем воспроизведение из класса Sound, то автоматически создается канал, в котором происходит обработка звука. И уже на уровне канала существуют методы для пауз, остановок, затухания звучания и т.п.


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

То есть, метод play возвращает ссылку на канал, в котором происходит воспроизведение. И далее, уже через переменную ch можно вызывать методы канала, например:

Если же мы хотим поставить на паузу все каналы, то следует вызвать такую же функцию на уровне всего микшера:

По аналогии работают остальные методы и функции микшера.

Добавление звуковых эффектов в игру

Теперь, когда мы в целом разобрались с работой звука в Pygame, давайте добавим звуковые эффекты в нашу игру с шариками.

Смотрите, здесь вначале идет инициализация микшера:

так, чтобы не было задержек при воспроизведения звука.

Далее, мы загружаем и проигрываем фоновый звук, зациклив воспроизведение:

Затем, формируем звуковой эффект для ловли шара:

И в функции collideBalls проигрываем этот звук, если шар попадает в телегу:

Запускаем игру и теперь у нас все работает со звуковыми эффектами. По аналогии можно добавить и другие звуки, но это вы уже сможете сделать самостоятельно. Ссылка на эту программу в начале страницы и каждый из вас сможет внимательно ее изучить и изменять по своему усмотрению.

Видео по теме












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

Читайте также: