Плеер на pygame

Hello world, %Username%. Я заметил, что в последнее на Хабре время достаточно много постов про python. Да, язык набирает популярность. Ура товарищи! Вот и я решил приобщиться к этому языку. Достаточо скоро надоело хэлловорлдить и захотелось мне написать что то нужное.Лирическое отстпуление: Перешел с win на ubuntu(Знаю, что попса, но ради дела, а не понта делается) и понял, что нет приемлимого аудиопроигрывателя в моем поле зрения, все проигрыватели предлагали либо выглядели не приятно, либо были слишком тяжелыми. Немного поленившись я взялся за дело.

Уже в самом начале написания скрипта встал перед выбором. Использовать pyqt и библиотеку для работы со звуком, либо использовать pygame. Выбрал второе, об этом очень пожалел. Процесс начался. Полный код выкладывать сюда не буду, он ждет вас по ссылке
Однако в связи с ужаснейшей привычкой не комментировать код я выделю здесь основные моменты работы с pygame.

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

while running:


pygame.display.init()
pygame.font.init()
pygame.mixer.init(frequency=44100, size=-16, channels=2, buffer=4096)


Инициализация используемых модулей.
Вообще по идее можно было все это заменить на pygame.init(), но так выглядит солиднее, да и внутренний параноик будет немного меньше беспокоиться о быстродействии. Так же нужно разъяснить последнюю строчку
frequency=44100 — Частота дискретизации звука, по умолчанию 22050(Звук ужасный)
size = -16 — Страшная магия вуду, буду благодарен, если кто-то разъяснит для чего нужен этот параметр.
channels = 2 — Указываем количество каналов для воспроизведения
buffer=4096 — Размер буфера

pygame.mixer.music.set_volume(self.logic.volume)
Указываем громкость воспроизведения. Важно, стоит помнить, что этим методом указывается громкость всей программы, а не отдельных файлов.

self.screen = pygame.display.set_mode((600,230))

Этот метод создает главное окно и главный Surface. Как вы уже догадались он принимает как аргумент — разрешение будущего окна.

pygame.display.set_caption(u"Ktulhu fhtang")

Указание заголовка главного окна.

self.ui = pygame.font.Font("Arial.ttf",32)

Загрузка нового шрифта из файла. Загружать из файла не обязательно, но мне кажется это немного более простым, нежели запарка с sysFont.
Как аргументы принимает название файла и размер шрифта.

self.ui.render(u"Play",True,(0,0,0))

С помощью этого метода отрисовывается полученный первым аргументом текст. Второй аргумент — Сглаживание текста. Третьим аргументом принимается значения цвета в формате (r,g,b). Сразу стоит отметить, что pygame может отрисовывать unicode, если поставить волшебную букву u""

self.screen.fill((255,255,255))

Закрашивает экран указаным цветом, вообще не только экран, а любой Surface, примитивы в том числе.

self.screen.blit(self.play,(0,0))

Крайне важный метод blit, он принимает 2 аргумента. 1 — Любой Surface объект, 2 — Координаты в которых нужно отрисовать слой. Что же делает это метод? Он Присоединяет принимаемый surface к surface к которому он применяется. В данном случае self.play присоединяется к основному surface.

event = pygame.event.poll()

Сохраняем в переменную все события собранные за один прогон цикла.

pygame.display.flip()

Метод обновляющий изображение на экране. Без него вы не увидите ничего кроме черного экрана

pygame.time.wait(25)

В связи с тем, что python не слишком быстрый язык высокой количество fps сильно нагружает даже мощные компьютеры, поэтому каждый прогон цикла я заставляю ждать 25 миллисекунд. FPS не замерял, но процессор не нагружается, а скорости отрисовки хватает.

Почему же я пожалел, что выбрал pygame? Вся проблема в том, что при попытке воспроизведения mp3 файлов с тегами версии 3(а таких уже очень много) pygame виснет и это крайне не приятно. Единственным выходом является смена библиотеки, не знаю когда сей баг пофиксят.

rghost.ru/38700690 — Вот Франкинштейн описаный в статье выше.

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

Комментарии 12

    +8
    А я купил себе скрипку и пюпитр. У меня отлично выходят нота До и но С. Нота Фа пока что магия полная. Жду, когда мне кто-то объяснит.
      +1
      К данной статье комментарий не очень подходит, человек хотел поделиться своими успехами/неудачами и предостеречь идущих по той-же стезе.
      А так — очень даже остроумный коммент.
      +2
      Буханка-троллейбус.жпг
        0
        Где-то было про стадии Linux'оида:
        1. Ничего не понятно
        2. Почти всё понятно, но многого не хватает
        3. Много понятно, но всё-же чего-то не хватает. На этой стадии лиунксоид активно пишет код, делает свои поделки
        4. Всё устраивает. И всё уже давным-давно написано. А что не написано — то не нужно
        (точно не процитирую, давно читал. Может кто поделится ссылкой на оригинальный текст?)

        danial72, желаю Вам скорее перейти на 4-ую стадию. Плееров валом, многие хорошо настраиваемы. Привычного 1-в-1 не будет, это да. Но есть близкие. По-моему, единственное оправдание писать свой аудио-плеер с нуля — попрактиковаться в программировании

        >нет приемлимого аудиопроигрывателя
        MPD смотрели? По-началу с самими демоном надо немного поковыряться, зато он себя полностью оправдывает. Много интерфейсов, вплоть до хоткеев в DE, без загрузки отдельного GUI
          0
          Спасибо сам желаю поскорее перейти на 4 стадию, но как то не слишком получается. Mpd именно то, что я искал. Дальше стандартных репозитариев не искал, моя оплошность
          0
          Помню когда переходил на линукс, думал что линуксовый софт мне не всегда нравится по сравнению с виндовым. Когда я перестал ассоциировать виндовый софт как прототип софта, мне было хорошо.
            0
            > что нет приемлимого аудиопроигрывателя в моем поле зрения
            Audacious, mocp?

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

              В общем из лучших, что мне понравился это был Clementine, но оказалось в какой-то момент начинает пожирать много памяти и процессора, что приводило к постоянным тормозам на моем лэптопе. Потом друг посоветовал Deadbeef в общем-то пока на нём и остановился.
                0
                Clementine отлично работает с большой библиотекой музыки. В нем много плюшек всяких разных.
                Deadbeef — нет библиотеки. Легкость в создании плейлиста с файлов на диске.
                Оба клевые. Оба юзаю.
                0
                Выложили бы скриншот чтоли, а то очень интересно посмотреть на плеер на pygame
                  0
                  а как вообще наткнулись на pygame для таких целей? Уж лучше pyglet тогда;)
                    0
                    Прямо стыдно стало, никогда не слышал о pyglet

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

                  Самое читаемое