簡體   English   中英

使用Pyqt4和QSound播放聲音

[英]Playing sound with Pyqt4 and QSound

為了簡短起見,經過數小時的尋找在pyqt4中播放聲音的方法之后,我仍然不明白為什么這個簡單的小代碼不起作用? 我沒有收到任何錯誤消息,但沒有聲音(我嘗試過mp3,ogg和wav),只是得到了一些Windows“ bing”聲音,但沒有我想要的聲音文件。 我知道有聲子,但出於各種原因,我真的很想使用QSound,還因為它應該更簡單。 如果您能給我任何提示為什么不起作用或使用QSound給出工作代碼的示例,我將非常感謝。

import sys
from PyQt4 import QtGui, QtCore
from PyQt4.QtGui import QSound

class Example(QtGui.QMainWindow):

    def __init__(self):
        QtGui.QMainWindow.__init__(self)

        self.initUI()

    def initUI(self):

        self.setGeometry(300,300,200,200)

        self.b1 = QtGui.QPushButton("Play", self)
        self.b1.clicked.connect(self.Play)
        self.b1.move(50, 80)


    def Play(self):

        QSound.play("C:\directory\b1.mp3")




def main():
    app = QtGui.QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

if __name__ == "__main__":
    main()

您在這里可能有兩個不同的問題。


首先,如果要使用Windows樣式的路徑名,則需要使用原始字符串或反斜杠轉義符。 在常規字符串中, \\b是單個退格字符,而不是\\后跟a b 換句話說,當您確實要播放文件C:\\\\directory\\\\b1.mp3時,您正在嘗試播放文件'C:\\ directory \\ x081.mp3'。 有關詳細信息,請參見文檔中的字符串和字節文字

您可以嘗試記住所有特殊的反斜杠轉義字符,但更簡單的解決方案是始終轉義所有反斜杠。 或者,甚至更簡單地,將原始字符串用於所有Windows樣式的路徑名。 或者,更簡單的是,如果您使用的函數甚至在Windows上也允許POSIX樣式的路徑名,則只需使用它們。 換句話說,以下之一:

"C:\directory\\b1.mp3"
"C:\\directory\\b1.mp3"
r"C:\directory\b1.mp3"
"C:/directory/b1.mp3"

最重要的是,如果您使用的是較舊版本的PyQt,則不能以這種方式調用靜態Qt方法。 換句話說,您不是在調用QSound::play(filename)靜態方法,而是在調用QSound::play()實例(插槽)方法。 在更高版本中,這應該沒問題-盡管如文檔所述,構造QSound並稱其play方法為“可能……立即播放更多”,所以您還是想這樣做。

如果您有此問題,解決方法是:

QSound(r"C:\directory\b1.mp3").play()

盡管在實際代碼中,您可能希望保留大多數QSound對象,而不是每次都重新創建它們。


在評論中,您說:

我發現QSound實際上不支持資源。 不幸的是,我不知道這意味着什么,也許您可​​以解釋這對我的代碼意味着什么。

這對您的代碼沒有任何意義,至少在今天沒有。 您已將聲音保存在常規文件中,並嘗試通過絕對路徑名訪問這些文件。

但是,如果您想在將來改進您的應用程序,可能會遇到麻煩。

資源在Qt資源系統中進行了說明。 這個想法是,您沒有一個單獨的文件用於圖像等文件,而是擁有一個可執行文件(例如MyApp.exe ,而所有資源文件都擠在了該可執行文件中。 在運行時,您仍然可以訪問這些資源,就像它們仍然是單獨的文件一樣。 您只需使用諸如:/sounds/b1.mp3類的特殊路徑(或者更好的是,從路徑名切換為URL,並使用諸如qrc:///sounds/b1.mp3類的特殊URL)。

關鍵是那個“差不多”。 某些功能無法直接在資源上使用,因此,如果要使用這些功能,則必須將資源顯式提取到臨時文件中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM