用QtMultimedia播放音频?

时间:2018-05-12 18:05:39

标签: python pyqt pyqt5 qtmultimedia qurl

我正在编写的PyQt5程序的一部分是接收音频流并播放它。我一直在搜索,这是我发现的代码可以工作的代码:

url = QtCore.QUrl.fromLocalFile('office theme.mp3')
content = QtMultimedia.QMediaContent(url)
player = QtMultimedia.QMediaPlayer()
player.setMedia(content)
player.play()

但是,这对我不起作用。我已经尝试将代码放在各种地方(在window.show()调用之后,我拥有的各种类的内部和外部等)。我可以验证MP3是否有效,因为我可以在Clementine,VLC和Dolphin中播放它。它也是直接从我的Plex服务器上获取的,因此它绝对是一个有效的MP3文件。我试过把这个文件转换成OGG和WAV而没有运气。我也尝试过FLAC和AAC音频文件,它们也不起作用。

我在论坛上看到有人建议运行命令来检查PyQt是否可以看到任何音频设备。我运行了以下代码,它返回了多个音频输出设备:

print(QtMultimedia.QAudioDeviceInfo.availableDevices(QtMultimedia.QAudio.AudioOutput))

我需要做的就是接受对音频文件的引用(最终从文件对话框中打开,但是当我来到它时我将穿过那座桥)并播放它。我做错了吗?我绝不是PyQt的专家,而且只进行了几天的实验。

我目前正在运行Antergos Arch Linux。

谢谢!

1 个答案:

答案 0 :(得分:3)

您必须传递完整路径,但如果您只想传递文件名称并且程序添加其余部分,您可以使用QDir::current()

import sys

from PyQt5 import QtCore, QtWidgets, QtMultimedia

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    filename = 'office theme.mp3'
    fullpath = QtCore.QDir.current().absoluteFilePath(filename) 
    url = QtCore.QUrl.fromLocalFile(fullpath)
    content = QtMultimedia.QMediaContent(url)
    player = QtMultimedia.QMediaPlayer()
    player.setMedia(content)
    player.play()
    sys.exit(app.exec_())