Возможно ли сделать паузу в несколько секунд между двумя аудио в PyQT5/Pyside2?
Есть простой код вроде
self.player = QMediaPlayer()
self.playlist = QMediaPlaylist()
self.player.setPlaylist(self.playlist)
self.playlist.addMedia(QUrl.fromLocalFile("AUDIO_1.wav"))
self.playlist.addMedia(QUrl.fromLocalFile("AUDIO_2.wav"))
self.player.play()
Когда он выполняется сначала играется AUDIO_1, и сразу же как оно заканчивается начинает играть AUDIO_2. Никаких пауз между двумя аудио нет, а хотелось бы, и чтобы эту паузу можно было настраивать по времени. Возможно ли это как-то сделать? Уже пробовал несколько вариантов:
Через QEventLoop:
self.loop = QEventLoop()
def start_loop(duration):
QTimer.singleShot(duration, self.loop.quit)
self.loop.exec_()
start_loop(3000)
Заготовкой файла с тишиной, например в одну секунду, и добавлением (возможно несколько раз):
self.file = QUrl.fromLocalFile("silence_3s.wav")
self.playlist.addMedia(self.file)
Но что первый, что второй способ кажутся кривыми костылями и наверняка должен существовать более правильный и красивый способ внедрения паузы без них или без переопределения класса.
Ответы (1 шт):
Автор решения: Sergey Tatarincev
→ Ссылка
Можно при смене текущего элемента плейлиста приостанавливать воспроизведение
import sys
from PyQt5.QtCore import QUrl, QTimer
from PyQt5.QtWidgets import QApplication, QDialog, QPushButton, QLabel
from PyQt5.QtMultimedia import QMediaContent, QMediaPlayer, QMediaPlaylist
class MainWindow(QDialog):
def __init__(self):
super().__init__()
self.button = QPushButton("Play", self)
self.button.move(50, 50)
self.button.clicked.connect(self.resume)
self.player = QMediaPlayer()
self.playlist = QMediaPlaylist()
self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile("/home/arise/share/ringout.wav")))
self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile("/home/arise/share/ringout.wav")))
self.playlist.addMedia(QMediaContent(QUrl.fromLocalFile("/home/arise/share/ringout.wav")))
self.player.setPlaylist(self.playlist)
self.playlist.currentIndexChanged.connect(self.pause)
self.timer = QTimer()
self.timer.setInterval(3000)
self.timer.setSingleShot(True)
self.timer.timeout.connect(self.resume)
def pause(self,index):
if index == -1:
print('playlist is over')
return
print(f'current playlist pos: {index}')
self.player.pause()
self.timer.start()
def resume(self):
print('playing...')
self.player.play()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = MainWindow()
sys.exit(window.exec())