Воспроизведение аудио с QtMultimedia?
Часть программы 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 ответ
Вы должны пройти полный путь, но если вы хотите просто передать имя файла и программа добавляет все остальное, что вы можете использовать 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_())