首页 > 解决方案 > 处理来自 QAudioProbe 的信号

问题描述

我正在尝试接收来自 QAudioProbe 的 audioBufferProbed 信号的信号。我已经尝试过连接功能,但我没有正确使用它。我想在媒体播放时将信号值打印到控制台。

我正在使用 Python3 和 PySide2 (Qt 5.15)。

#!/bin/python3

from PySide2.QtMultimedia import QMediaPlayer, QMediaContent, QAudioProbe
from PySide2.QtCore import QUrl, QCoreApplication, QObject, Signal
import sys


def main():

    app = QCoreApplication()
    player = QMediaPlayer()
    url = QUrl.fromLocalFile("/home/ubuntu/Downloads/sample2.mp3")
    content = QMediaContent(url)
    player.setMedia(content)
    player.setVolume(50)

    # probe = QAudioProbe()
    # probe.setSource(player)
    # QObject.connect(probe, Signal(audioBufferProbed(QAudioBuffer)), processProbe)

    player.play()
    ret = app.exec_()
    sys.exit(ret)

def processProbe(probe):
    print(probe)


if __name__ == "__main__":
    main()

标签: pythonqtqt5pysidepyside2

解决方案


您必须使用 PySide2(以及 PyQt5)的语法是sender.signal.connect(receiver.slot)

#!/bin/python3

from PySide2.QtMultimedia import QMediaPlayer, QMediaContent, QAudioProbe
from PySide2.QtCore import QUrl, QCoreApplication, QObject, Signal
import sys


def main():

    app = QCoreApplication()
    player = QMediaPlayer()
    url = QUrl.fromLocalFile("/home/ubuntu/Downloads/sample2.mp3")
    content = QMediaContent(url)
    player.setMedia(content)
    player.setVolume(0)

    probe = QAudioProbe()
    probe.setSource(player)
    probe.audioBufferProbed.connect(processProbe)

    player.play()
    ret = app.exec_()
    sys.exit(ret)

def processProbe(buff):
    print(buff.startTime())


if __name__ == "__main__":
    main()

推荐阅读