На этом шаге мы перечислим основные методы и сигналы этого класса и приведем пример его использования.
Класс QMediaPlaylist поддерживает следующие основные методы (полный их список приведен на странице https://doc.qt.io/qt-5/qmediaplaylist.html):
addMedia(<QMediaContent>) addMedia(<Список экземпляров класса QMediaContent>)
insertMedia(<Индекс>, <QMediaContent>) insertMedia(<Индекс>, <Список экземпляров класса QMediaContent>)
Из информации, собранной в Интернете, удалось выяснить список поддерживаемых форматов плейлистов:
mpl = QtMultimedia.QMediaPlaylist()
file = QtCore.QUrl.fromLocalFile(r"c:\media\playlist.m3u8")
mpl.load(file)
player.setPlaylist(mpl)
Пример:
file = QtCore.QUrl.fromLocalFile(r"c:\media\playlist.m3u8") mpl.save(file, "m3u8")
Класс QMediaPiaylist поддерживает большое количество сигналов, из которых для нас представляют интерес лишь приведенные далее (полный их список доступен на странице https://doc.qt.io/qt-5/qmediaplaylist.html):
Для примера напишем совсем простое приложение аудио проигрывателя, воспроизводящего плейлист. Оно будет создавать плейлист из четырех аудиофайлов, находящихся в той же папке, что и само приложение, воспроизводить его и позволит пользователю переключаться на предыдущую и следующую позицию плейлиста.
# -*- coding: utf-8 -*- from PyQt5 import QtCore, QtWidgets, QtMultimedia import sys, os class MyWindow(QtWidgets.QWidget): def __init__(self, parent=None): QtWidgets.QWidget.__init__(self, parent, flags= QtCore.Qt.Window | QtCore.Qt.MSWindowsFixedSizeDialogHint) self.setWindowTitle("Плейлист") self.mplPlayer = QtMultimedia.QMediaPlayer() # Создаем плейлист и наполняем его файлами self.playlist = QtMultimedia.QMediaPlaylist() files = ["Chicago.mp3", "Monologue.mp3", "Triplicity.mp3", "Triumvirate.mp3"] for f in files: fn = QtCore.QUrl.fromLocalFile(os.path.abspath(f)) self.playlist.addMedia(QtMultimedia.QMediaContent(fn)) # Поэкспериментируем со вставкой и удалением позиций в плейлисте # Вставляем первый файл в конец плейлиста fn = QtCore.QUrl.fromLocalFile(os.path.abspath(files[0])) self.playlist.insertMedia(4, QtMultimedia.QMediaContent(fn)) # И удаляем первую позицию self.playlist.removeMedia(0) self.playlist.setCurrentIndex(0) self.mplPlayer.setPlaylist(self.playlist) # Создаем элементы управления воспроизведением vbox = QtWidgets.QVBoxLayout() hbox = QtWidgets.QHBoxLayout() self.btnPlay = QtWidgets.QPushButton("&Пуск") self.btnPlay.clicked.connect(self.mplPlayer.play) hbox.addWidget(self.btnPlay) self.btnNext = QtWidgets.QPushButton("П&редыдущая") self.btnNext.clicked.connect(self.playlist.next) hbox.addWidget(self.btnNext) self.btnPrevious = QtWidgets.QPushButton("&Следующая") self.btnPrevious.clicked.connect(self.playlist.previous) hbox.addWidget(self.btnPrevious) vbox.addLayout(hbox) self.lblCurrent = QtWidgets.QLabel("") vbox.addWidget(self.lblCurrent) self.playlist.currentMediaChanged.connect(self.showFile) self.setLayout(vbox) self.resize(300, 70) # Выводи на экран имя файла, воспроизводящегося в данный момент # Метод canonicalUrl() класса QMediaContent возвращает # путь к файлу экземпляра класса QUrl, а метод fileName() # класса QUrl позволяет узнать имя файла def showFile(self, content): self.lblCurrent.setText(content.canonicalUrl().fileName()) app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
Результат работы приложения показан на рисунке 1.
Рис.1. Проигрыватель с плейлистом
На следующем шаге мы рассмотрим запись звука.