Шаг 297.
Библиотека PyQt5.
Мультимедиа. Запись звука. Класс QSoundEffect

    На этом шаге мы рассмотрим назначение, формат конструктора, основные методы и пример использования объекта даннаго класса.

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

  <Объект> = QSoundEffect([parent=None])

    В параметре parent может быть указана ссылка на родительский компонент.

    Класс QSoundEffect поддерживает следующие основные методы (полный их список приведен на странице https://doc.qt.io/qt-5/qsoundeffect.html):

    Класс 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. Результат работы приложения


   Замечание. Помимо описанных здесь возможностей, PyQt5 поддерживает доступ к устройствам воспроизведения звука на низком уровне, а также получение непосредственно массива звуковых и видеоданных с целью их анализа и обработки. Соответствующие программные инструменты описаны в документации по этой библиотеке.

    Со следующего шага мы начнем рассматривать печать документов.




Предыдущий шаг Содержание Следующий шаг