处理来自 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()

解决方法

您必须使用 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()

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...