Всех приветствую. Сегодня хочу поделиться опытом создания своего первого проекта на Python. Мой проект — это простой аудиоплеер, и я хочу рассказать, как я его создавал, с какими сложностями столкнулся и что из этого вышло.

Почему Python?

Выбор языка для первого проекта — это всегда непросто. Я выбрал Python по нескольким причинам:

Простота синтаксиса. Python очень читабельный и понятный, что идеально подходит для новичков.

Богатая стандартная библиотека и сообщество. Множество готовых решений и библиотек, которые можно использовать в своих проектах.

Популярность в разработке. Python — один из самых популярных языков программирования, и навыки работы с ним будут полезны в будущем.

Идея проекта

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

Используемые библиотеки

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

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

FFmpeg: Универсальный инструмент для обработки видео и аудио.

Sounddevice: Библиотека для воспроизведения и записи звука в Python.

Mutagen: Библиотека для извлечения данных из аудиофайлов.

Как это работает

Аудиообработка

Выбор файла:

Пользователь выбирает аудиофайл из меню "Файл". Поддерживаемые форматы включают MP3, WAV, FLAC, OGG, M4A, AAC и WMA.

Декодирование с помощью FFmpeg:

Выбранный файл передаётся в FFmpeg через подпроцесс для извлечения необработанных аудиоданных. Используемая команда:

ffmpeg -v quiet -i <путь_к_файлу> -f f32le -acodec pcm_f32le -ac 2 -ar <частота_дискретизации> -

Обработка данных

Чтение аудиоданных:
Аудиоданные считываются блоками и сохраняются в массив NumPy для эффективной обработки.

Регулировка громкости:
Регулировка громкости осуществляется путём умножения аудиомассива на коэффициент громкости.

Регулировка скорости воспроизведения:
Скорость воспроизведения (например, 2x) управляется через библиотеку sounddevice путём изменения частоты дискретизации.

Воспроизведение

Поток вывода:
Обработанные аудиоданные передаются на аудиовыход через библиотеку sounddevice.

Управление воспроизведением:
Элементы управления, такие как воспроизведение/пауза, следующий/предыдущий трек и перемотка, обрабатываются через класс AudioTrigger.

Управление воспроизведением

Воспроизведение/Пауза:
Использует класс AudioTrigger для начала/остановки аудиопотока.

Следующий/Предыдущий трек:
Обновляет текущий индекс трека и загружает следующий/предыдущий трек в плейлисте.

Перемотка:
Регулирует позицию воспроизведения, пересчитывая индекс позиции на основе значения ползунка.

Управление очередью треков

Виджет очереди треков:
Отображает добавленные ранее папки.

Виджет плейлиста:
Отображает содержимое папки.

Виджет информации о треке:
Показывает метаданные и обложку для воспроизводимого трека.

Исходный код и дополнительные ресурсы

Если хотите ознакомиться с исходным кодом или внести свой вклад в проект,

приглашаю вас посетить страницу GitHub проекта. Там вы найдёте весь исходный код аудиоплеера.

Также у проекта есть веб-сайт, где вы можете скачать готовые .exe и .deb пакеты для Windows и Linux. Здесь же доступна подробная документация по установке и использованию программы.

С какими сложностями я столкнулся

1. Декодирование и буферизация

Работа с FFmpeg требовала правильной организации буферизации аудиоданных, чтобы избежать прерываний и задержек при воспроизведении.

Решение: Буферизация данных в массив NumPy.

2. Неправильная скорость трека

Треки воспроизводились с неправильной скоростью из-за некорректной частоты дискретизации.

Решение: Я считываю частоту дискретизации трека и открываю аудиопоток с настройками именно для того трека, который в данный момент должен воспроизводиться.

Что в итоге получилось

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

Проигрывание аудиофайлов: Поддерживаются популярные форматы MP3, WAV, FLAC, OGG, M4A, AAC и WMA.

Управление воспроизведением: Воспроизведение, пауза, остановка, перемотка, следующий/предыдущий трек.

Регулировка скорости воспроизведения: Возможность воспроизводить треки быстрее или медленнее.

Плейлист: Добавление папок с треками.

Информация о треках: Отображение метаданных и обложек альбомов.

Тёмная тема: Благодаря qdarktheme, аудиоплеер имеет современный и стильный интерфейс.

Планы на будущее

  1. Добавить поддержку потокового аудио: Возможность воспроизводить музыку из интернет-радиостанций и стриминговых сервисов.

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

  3. Поддержка эквалайзера: Добавить эквалайзер для настройки звука.

Заключение

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

Буду рад любым отзывам и предложениям по улучшению плеера. Спасибо за внимание!

Ссылки:

Исходный код на GitHub

Сайт проекта с загрузкой пакетов

Скрины интерфейса

Темная тема
Светлая тема