Воспроизведение звуков с помощью PyQt6

#python #pyqt6

Вопрос:

Поскольку модуль PyQt6 был выпущен, я начал переносить свой код с PyQt5 на PyQt6.

В PyQt был модуль под названием phonon, который использовался для воспроизведения звуков.

В PyQt5 был модуль под названием QMediaPlayer, который затем использовался для воспроизведения звуков.

Теперь, как воспроизвести звук в PyQt6?

Был веб-сайт, на котором говорилось, что QMediaPlayer еще не портирован и будет выполнен в версии PyQt6 PyQt6.2.

Веб — сайт вот такой- https://www.pythonguis.com/faq/pyqt-pyside6-missing-modules/

На веб-сайте также говорится, что PyQt6.2 будет выпущен в сентябре 2021 года.

Переименован ли импорт?

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

1. Согласно документации Qt , вы должны попробовать использовать QSoundEffect . Но поскольку у меня еще нет PyQt6, я не могу подтвердить, работает ли он.

2. Почему у вас нет PyQt6? PyQt6 доступен на pypi. Более того, основная QtMultimedia удалена в PyQt6

3. Что значит » почему «? Нет, он не удален. Я буквально только что перешел по ссылке на страницу документации. PyQt6.2 просто еще не выпущен.

4. @mapf Вы говорите: Я думаю, PyQt6.2 выйдет не раньше следующего года . откуда ты это взял? Релизы PyQt и PySide, как правило, выходят менее чем через неделю после выпуска Qt.

5. @eyllanesc Я сравнивал даты выпуска с предыдущими версиями, но я просто понял, что посмотрел не на те даты. Так что это может занять всего несколько дней.

Ответ №1:

Следует отметить, что:

  • В Qt6, если вы хотите воспроизвести музыкальный файл, у вас есть 2 варианта:
    • Эффект QSound
       import sys
      
      from PyQt6.QtCore import QUrl
      from PyQt6.QtGui import QGuiApplication
      from PyQt6.QtMultimedia import QSoundEffect
      
      
      def main():
          app = QGuiApplication(sys.argv)
      
          filename = "sound.wav"
          effect = QSoundEffect()
          effect.setSource(QUrl.fromLocalFile(filename))
          # possible bug: QSoundEffect::Infinite cannot be used in setLoopCount
          effect.setLoopCount(-2)
          effect.play()
      
          sys.exit(app.exec())
      
      
      if __name__ == "__main__":
          main()
       
    • QMediaPlayer.
       import sys
      
      from PyQt6.QtCore import QUrl
      from PyQt6.QtGui import QGuiApplication
      from PyQt6.QtMultimedia import QAudioOutput, QMediaPlayer
      
      
      def main():
          app = QGuiApplication(sys.argv)
      
          filename = "sound.mp3"
          player = QMediaPlayer()
          audio_output = QAudioOutput()
          player.setAudioOutput(audio_output)
          player.setSource(QUrl.fromLocalFile(filename))
          audio_output.setVolume(50)
          player.play()
      
          sys.exit(app.exec())
      
      
      if __name__ == "__main__":
          main()
       
  • Предыдущие классы доступны начиная с Qt 6.2, и на данный момент в pypi нет выпуска PyQt6 6.2.0, но вы можете установить его из репозиториев сервера PyPI Riverbank Computing (подробнее см. Здесь).:
     python -m pip install --index-url https://riverbankcomputing.com/pypi/simple/ --pre --upgrade PyQt6
     

    Вероятно, через несколько дней он уже будет доступен в pypi