Делаем свой аудиоплеер на Python
easy

Делаем свой аудиоплеер на Python

Это не так сложно, как кажется

Сегодня мы сделаем свой аудиоплеер и напишем его на языке Python. Интерфейс будем делать с графическими элементами: анимированной обложкой и кнопками с пиктограммами. Всё как мы любим.

Если вы ни разу не программировали на Python, почитайте сначала это:

Как установить Python на компьютер и начать на нём писать.

Устанавливаем библиотеки

В этом проекте нам понадобятся библиотеки tkinter и pygame, а также модуль os. С помощью tkinter мы создадим графический интерфейс нашего плеера. Библиотека pygame поможет нам загружать в плеер музыку и управлять воспроизведением, паузами и остановками. А модуль os нужен для того, чтобы мы могли взаимодействовать с операционной системой — выбирать нужные нам папки.

Установим библиотеки в систему командой в терминале:

pip install tkinter
pip install pygame

Если pip не работает, используйте pip3:

pip3 install tkinter

Устанавливаем библиотеки

Подключаем библиотеки и модули

После установки библиотек подключаем нужные модули:

import os
from tkinter import *
from tkinter import filedialog
from pygame import mixer

Мы уже использовали библиотеку tkinter в других проектах, почитайте, если интересно:

Рисуем графический интерфейс плеера

Для создания интерфейса нам понадобятся:

Скачайте эти файлы и положите их в ту же папку, где лежит сам скрипт.

Теперь создадим форму окна нашего плеера, дадим ему имя и укажем цвет фона.

# запускаем tkinter, чтобы создать окно графического интерфейса
root = Tk()
# задаём размеры окна
root.geometry("516x700+340+10")
# задаём название окна плеера
root.title("Аудиоплеер")
# задаём цвет фона плеера
root.config(bg='#0f0f0f')
# указываем, что пользователь не может менять размеры окна
root.resizable(False, False)
# запускаем модуль mixer
mixer.init()

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

# добавляем фрейм для элементов интерфейса
lower_frm = Frame(root, bg="#000000", width=516, height=200)
lower_frm.place(x=0, y=00)

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

# указываем количество кадров в гифке
frmcount = 32
# указываем путь к файлу гифки — она лежит в одной папке с файлом проекта .py
frms = [PhotoImage(file= os.path.join(os.path.dirname(__file__), 'animation.gif'), format='gif -index %i' % i) for i in range(frmcount)]
# определяем функцию обновления гифки
def update(ind):
    frame = frms[ind]
    ind += 1
    if ind == frmcount:
    ind = 0
    lbl.config(image=frame)
    root.after(40, update, ind)
# указываем расположение гифки в окне интерфейса
lbl = Label(root)
lbl.place(x=0, y=0)
root.after(0, update, 0)

Теперь добавим кнопки выбора музыки и управления воспроизведением. Для простоты у нас их будет четыре:

  • играть;
  • пауза;
  • стоп;
  • выбрать папку с музыкой.

# добавляем меню с кнопками
menu = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'menu.png'))
# указываем размер
lb_menu = Label(root, image=menu, width=516, height=120)
# указываем координаты расположения
lb_menu.place(x=0, y=580)

# добавляем фрейм для кнопок
frm_music = Frame(root, bd=2, relief=RIDGE, width=516, height=120)
frm_music.place(x=0, y=580)

# добавляем кнопку воспроизведения и указываем её функцию
btn_play = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'play.png'))
btn_p = Button(root, image=btn_play, bg='#0f0f0f', height=50, width=50, command=playMusic)
btn_p.place(x=225, y=516)

# добавляем кнопку остановки воспроизведения и указываем её функцию
btn_stop = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'stop.png'))
btn_s = Button(root, image=btn_stop, bg='#0f0f0f', height=50, width=50, command=mixer.music.stop)
btn_s.place(x=140, y=516)

# добавляем кнопку паузы и указываем её функцию
btn_pause = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'pause.png'))
btn_ps = Button(root, image=btn_pause, bg='#0f0f0f', height=50, width=50, command=mixer.music.pause)
btn_ps.place(x=310, y=516)

# добавляем кнопку выбора папки с музыкой
btn_browse = Button(root, text="Выбрать папку с музыкой", font=('Arial,bold', 15), fg="Black", bg="#FFFFFF", width=48, command=addMusic)
btn_browse.place(x=0, y=572)

Теперь настроим поле, в котором будет отображаться плейлист:

# настраиваем отображение плейлиста
Scroll = Scrollbar(frm_music)
Playlist = Listbox(frm_music, width=100, font=('Arial,bold', 15), bg='#0f0f0f', fg='#00ff00', selectbackground="lightblue", cursor="hand2", bd=0, yscrollcommand=Scroll.set)
Scroll.config(command=Playlist.yview)
Scroll.pack(side=RIGHT, fill=Y)
Playlist.pack(side=RIGHT, fill=BOTH)

Посмотрим, что получилось, — запустим окно плеера:

# запускаем окно плеера
root.mainloop()
Рисуем графический интерфейс плеера

Настраиваем кнопку добавления музыки

Чтобы не добавлять музыкальные файлы по одному, настроим всё так, чтобы было достаточно выбрать путь к папке с музыкой. Укажем, что из выбранной папки нужно загрузить только файлы с расширением .mp3:

# определяем функцию добавления музыки из указанной папки
def addMusic():
    path = filedialog.askdirectory()
    if path:
        os.chdir(path)
        songs = os.listdir(path)
        print(songs)
        # указываем, что из выбранной папки нужно загружать файлы .mp3
        for song in songs:
            if song.endswith(".mp3"):
                Playlist.insert(END, song)

Теперь настроим воспроизведение и отображение:

# определяем функцию воспроизведения загруженной музыки
def playMusic():
    music_name = Playlist.get(ACTIVE)
    print(music_name[0:-4])
    mixer.music.load(Playlist.get(ACTIVE))
    mixer.music.play()

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

Делаем свой аудиоплеер на Python

Что дальше

Мы сделали простой плеер, но его можно усовершенствовать, например:

  • добавить кнопки перехода к предыдущему или следующему треку;
  • добавить возможность поставить песню на повтор;
  • добавить функцию очистки плейлиста.

Займёмся этим в следующий раз. Подпишитесь, чтобы не пропустить новые статьи.

# импортируем библиотеки и модули
import os
from tkinter import *
from tkinter import filedialog
from pygame import mixer

# запускаем tkinter, чтобы создать окно графического интерфейса
root = Tk()
# задаём размеры окна
root.geometry("516x700+340+10")
# задаём название окна плеера
root.title("Аудиоплеер")
# задаём цвет фона плеера
root.config(bg='#0f0f0f')
# указываем, что пользователь не может менять размеры окна
root.resizable(False, False)
# запускаем модуль mixer
mixer.init()

# определяем функцию добавления музыки из указанной папки
def addMusic():
    path = filedialog.askdirectory()
    if path:
        os.chdir(path)
        songs = os.listdir(path)
        print(songs)
        # указываем, что из выбранной папки нужно загружать файлы .mp3
        for song in songs:
            if song.endswith(".mp3"):
            Playlist.insert(END, song)

# определяем функцию воспроизведения загруженной музыки
def playMusic():
    music_name = Playlist.get(ACTIVE)
    print(music_name[0:-4])
    mixer.music.load(Playlist.get(ACTIVE))
    mixer.music.play()

# добавляем фрейм для элементов интерфейса
lower_frm = Frame(root, bg="#000000", width=516, height=200)
lower_frm.place(x=0, y=00)

# указываем количество кадров в гифке
frmcount = 32
# указываем путь к файлу гифки — она лежит в одной папке с файлом проекта .py
frms = [PhotoImage(file= os.path.join(os.path.dirname(__file__), 'animation.gif'), format='gif -index %i' % i) for i in range(frmcount)]
# определяем функцию обновления гифки
def update(ind):
    frame = frms[ind]
    ind += 1
    if ind == frmcount:
        ind = 0
    lbl.config(image=frame)
    root.after(40, update, ind)

# указываем расположение гифки в окне интерфейса
lbl = Label(root)
lbl.place(x=0, y=0)
root.after(0, update, 0)

# добавляем меню с кнопками
menu = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'menu.png'))
# указываем размер
lb_menu = Label(root, image=menu, width=516, height=120)
# указываем координаты расположения
lb_menu.place(x=0, y=580)

# добавляем фрейм для кнопок
frm_music = Frame(root, bd=2, relief=RIDGE, width=516, height=120)
frm_music.place(x=0, y=580)

# добавляем кнопку воспроизведения и указываем её функцию
btn_play = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'play.png'))
btn_p = Button(root, image=btn_play, bg='#0f0f0f', height=50, width=50, command=playMusic)
btn_p.place(x=225, y=516)

# добавляем кнопку остановки воспроизведения и указываем её функцию
btn_stop = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'stop.png'))
btn_s = Button(root, image=btn_stop, bg='#0f0f0f', height=50, width=50, command=mixer.music.stop)
btn_s.place(x=140, y=516)

# добавляем кнопку паузы и указываем её функцию
btn_pause = PhotoImage(file= os.path.join(os.path.dirname(__file__), 'pause.png'))
btn_ps = Button(root, image=btn_pause, bg='#0f0f0f', height=50, width=50, command=mixer.music.pause)
btn_ps.place(x=310, y=516)

# добавляем кнопку выбора папки с музыкой
btn_browse = Button(root, text="Выбрать папку с музыкой", font=('Arial,bold', 15), fg="Black", bg="#FFFFFF", width=48, command=addMusic)
btn_browse.place(x=0, y=572)

# настраиваем отображение плейлиста
Scroll = Scrollbar(frm_music)
Playlist = Listbox(frm_music, width=100, font=('Arial,bold', 15), bg='#0f0f0f', fg='#00ff00', selectbackground="lightblue", cursor="hand2", bd=0, yscrollcommand=Scroll.set)
Scroll.config(command=Playlist.yview)
Scroll.pack(side=RIGHT, fill=Y)
Playlist.pack(side=RIGHT, fill=BOTH)

# запускаем окно плеера
root.mainloop()

Код:

Химани Бансал

Текст:

Инна Долога

Редактор:

Михаил Полянин

Обложка:

Алексей Сухов

Корректор:

Ирина Михеева

Вёрстка:

Мария Дронова

Соцсети:

Юлия Зубарева

Любишь Python? Зарабатывай на нём!
Изучите самый модный язык программирования и станьте крутым бэкенд-разработчиком. Старт — бесплатно.
Попробовать бесплатно
Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём! Любишь Python? Зарабатывай на нём!
Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
easy