Воспроизведение аудио с QtMultimedia? - PullRequest
0 голосов
/ 12 мая 2018

Часть программы 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 голосов
/ 12 мая 2018

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