На этом шаге мы рассмотрим назначение, формат конструктора, основные методы и пример использования объекта даннаго класса.
Класс QSoundEffect предоставляет средства воспроизведения коротких звуковых файлов, что может пригодиться, скажем, для информирования пользователя о каком-либо событии. Конструктор этого класса имеет следующий формат вызова:
<Объект> = QSoundEffect([parent=None])
В параметре parent может быть указана ссылка на родительский компонент.
Класс QSoundEffect поддерживает следующие основные методы (полный их список приведен на странице https://doc.qt.io/qt-5/qsoundeffect.html):
for f in QtMultimedia.QSoundEffect.supportedMimeTypes(): print(f, end=" ") # Выведет: audio/x-wav audio/wav audio/wave audio/x-pn-wav
Как видим, поддерживается лишь формат WAV в виде четырех различных MIME-типов. Что касается аудиокодеков, то поддерживается лишь кодек РСМ.
Класс QSoundEffect поддерживает следующие наиболее полезные для нас сигналы (полный их список приведен на странице https://doc.qt.io/qt-5/qsoundeffect.html):
Примером к этому шагу станет небольшая программа, воспроизводящая звук, в зависимости от выбора пользователя: единожды, десять раз или бесконечно.
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.sndEffect = QtMultimedia.QSoundEffect() self.sndEffect.setVolume(1) # Задаем файл-источник fn = QtCore.QUrl.fromLocalFile(os.path.abspath("Windows Ding.wav")) self.sndEffect.setSource(fn) self.sndEffect.loopsRemainingChanged.connect(self.showCount) self.sndEffect.playingChanged.connect(self.clearCount) vbox = QtWidgets.QVBoxLayout() # Создаем кнопки для запуска воспроизведения звука lblPlay = QtWidgets.QLabel("Воспроизвести...") vbox.addWidget(lblPlay) btnOnce = QtWidgets.QPushButton("...&один раз") btnOnce.clicked.connect(self.playOnce) vbox.addWidget(btnOnce) btnTen = QtWidgets.QPushButton("...&десять раз") btnTen.clicked.connect(self.playTen) vbox.addWidget(btnTen) btnInfinite = QtWidgets.QPushButton("...&бесконечное количество раз") btnInfinite.clicked.connect(self.playInfinite) vbox.addWidget(btnInfinite) btnStop = QtWidgets.QPushButton("&Стоп") btnStop.clicked.connect(self.sndEffect.stop) vbox.addWidget(btnStop) self.lblStatus = QtWidgets.QLabel("") vbox.addWidget(self.lblStatus) self.setLayout(vbox) self.resize(200, 100) def playOnce(self): self.sndEffect.setLoopCount(1) self.sndEffect.play() def playTen(self): self.sndEffect.setLoopCount(10) self.sndEffect.play() def playInfinite(self): self.sndEffect.setLoopCount(QtMultimedia.QSoundEffect.Infinite) self.sndEffect.play() # Выводим количество повторений воспроизведения эффекта def showCount(self): self.lblStatus.setText("Воспроизведено " + str(self.sndEffect.loopCount() - self.sndEffect.loopsRemaining()) + " раз") # Если воспроизведение закончено, очищаем выведенное ранее # количество повторений эффекта def clearCount(self): if not self.sndEffect.isPlaying(): self.lblStatus.setText("") app = QtWidgets.QApplication(sys.argv) window = MyWindow() window.show() sys.exit(app.exec_())
Рис.1. Результат работы приложения
Со следующего шага мы начнем рассматривать печать документов.