python 在PyQt6中点击按钮时播放声音

wribegjk  于 2023-03-16  发布在  Python
关注(0)|答案(1)|浏览(221)

我正在尝试创建两个按钮,可以播放一个声音一次又一次。但在这个阶段,它是不可能重现的声音在所有。我做错了什么?

import sys
from PyQt6.QtCore import QUrl
from PyQt6.QtMultimedia import QMediaPlayer, QAudioOutput
from PyQt6.QtWidgets import QWidget, QPushButton, QVBoxLayout, QApplication

class SoundPlayer(QWidget):
    def __init__(self):
        super().__init__()

        filename = "sound.mp3"
        self.player = QMediaPlayer()
        self.audio_output = QAudioOutput()
        self.player.setAudioOutput(self.audio_output)
        self.player.setSource(QUrl.fromLocalFile(filename))
        self.audio_output.setVolume(50)
        # player.play()

        self.play_button = QPushButton('Play')
        self.play_endlessly_button = QPushButton('Play Endlessly')

        layout = QVBoxLayout()
        layout.addWidget(self.play_button)
        layout.addWidget(self.play_endlessly_button)
        self.setLayout(layout)

        self.play_button.clicked.connect(self.play_once)
        self.play_endlessly_button.clicked.connect(self.play_endlessly)

    def play_once(self):
        self.player.play()

    def play_endlessly(self):
        self.player.setLoops(QMediaPlayer.Loops.Infinite)
        self.player.play()

if __name__ == '__main__':
    app = QApplication([])
    widget = SoundPlayer()
    widget.show()
    sys.exit(app.exec())

尝试使用QMediaPlayer类的“play()”方法。需要在按下按钮时,根据按钮无休止地播放一次声音。

mrwjdhj3

mrwjdhj31#

您使用的是相对路径“sound.mp3”,相对路径是从当前工作目录解析的,该目录并不总是等于源代码目录,可以是任何目录。
验证是否可以执行

print(os.path.realpath(os.getcwd()))

以及

print(os.path.exists('sound.mp3'))

要解决这个问题,您可以使用源目录作为基础来构建绝对路径

filename = os.path.join(os.path.dirname(__file__), "sound.mp3")

相关问题