【问题标题】:Play QSound from a resource file?从资源文件播放 QSound?
【发布时间】:2020-03-24 02:38:17
【问题描述】:

我正在尝试从 qrc 文件加载 QSound 文件,但我找不到方法。有可能吗?

类似:

sound = QSound(":/audio/my_sound.ogg")
sound.play()

与像素图不同,此语法不适用于音频。

我将使用 pyinstaller 来打包脚本,如果有办法将声音文件也包含在 exe 中,那将会很有用。

【问题讨论】:

    标签: python pyqt pyqt5 pyinstaller


    【解决方案1】:

    首先确保您可以播放 ogg 文件...在我的系统上,ogg 文件出现控制台错误...ogg 资源也是如此

            QSound.play("my_sound.ogg") # Error decoding source file:my_sound.ogg
            QSound.play(":/audio/my_sound.ogg") # Error decoding source file::/audio/my_sound.ogg
    

    使用 wav 文件对我有用,因此它验证 QSound 确实可以从资源中播放。

    import sys
    from PyQt5.QtCore import QCoreApplication, QFile
    from PyQt5.QtMultimedia import QSound
    
    import resources # compiled via: pyrcc5 -o resources.py resources.qrc
    
    
    if __name__ == '__main__':
        app = QCoreApplication(sys.argv)
    
        # QSound.play("test.wav")  # Plays fine
    
        # Using a wav file in the resource as follows gives the following results
        # <!DOCTYPE RCC>
        # <RCC version="1.0">
        #     <qresource prefix="audio">
        #         <file>test.wav</file>
        #     </qresource>
        # </RCC>
        QSound.play(":/audio/test.wav")  # Plays fine
    
        sound = QSound(":/audio/test.wav")
        sound.play()  # Plays fine
    
        QSound(":/audio/test.wav").play()  # no sound...no error
    
        # QFile.copy(":/audio/my_sound.ogg", "temp.ogg")  # Could also copy to a local file to make sure was found in resource
        sys.exit(app.exec_())
    

    【讨论】:

    • 谢谢,看来问题确实出在文件格式上。我也尝试过大胆的转换成mp3,结果和ogg格式一样,没有声音也没有错误。它支持无符号 8 位和有符号 16/32 位 PCM,但其他​​ wav 编码方法不起作用。
    【解决方案2】:

    我没有听说过 qsound,但我知道许多声音播放器模块,例如 pygame、playsound 等,您可以在它们支持播放、停止、暂停等的站点中看到语法

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-06-21
      • 1970-01-01
      • 1970-01-01
      • 2011-07-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多