Задержка PyQT5 QSound между звуками

Я делаю программное обеспечение для цифрового пианино с PyQt5, и одна из его функций - возможность автоматически воспроизводить ноты. Я зарегистрировал несколько музыкальных нот в списке и пытаюсь использовать QSound для их воспроизведения, однако, когда я это делаю, они воспроизводятся все одновременно. Как бы я мог добавить задержку между звуками? Спасибо за помощь

def playSheetMusic(self, Piano):
        sheetmusic = ["A5", "G4", "C4", "C4", "C4"]
        note1 = sheetmusic[0]
        file1 = "pianokeys/" + note1 +".wav"
        note2 = sheetmusic[1]
        file2 = "pianokeys/" + note2 +".wav"
        QSound.play(file1)
        QSound.play(file2)

person Jerry Zhao    schedule 20.06.2020    source источник
comment
используйте 1_   -  person eyllanesc    schedule 20.06.2020


Ответы (1)


Вы должны просто иметь возможность добавить задержку с помощью функции qWait() следующим образом:

from PyQt4 import QtTest

def playSheetMusic(self, Piano):
        sheetmusic = ["A5", "G4", "C4", "C4", "C4"]
        note1 = sheetmusic[0]
        file1 = "pianokeys/" + note1 +".wav"
        note2 = sheetmusic[1]
        file2 = "pianokeys/" + note2 +".wav"
        QSound.play(file1)
        QtTest.QTest.qWait(1000)        # put however many milliseconds delay you want
        QSound.play(file2)

Надеюсь это поможет :)

person Sahith Kurapati    schedule 20.06.2020
comment
Привет Сахит, спасибо за быстрый ответ! К сожалению, когда я пробую этот метод, программа просто зависает на секунду, а затем обе музыкальные ноты воспроизводятся одновременно. Вы случайно не знаете причину, по которой это происходит? - person Jerry Zhao; 20.06.2020
comment
Хорошо, я прочитал документацию, и это потому, что когда вы используете QSound, он использует тот же объект, созданный классом, поэтому он воспроизводит оба звука одновременно, когда вызывается .play(). Согласно документации есть функция QSound.isFinished(). Можете ли вы попробовать использовать это, чтобы проверить, когда он перестанет воспроизводить первый звук, а затем воспроизвести второй звук? - person Sahith Kurapati; 20.06.2020
comment
Я немного изучил метод isFinished(), и, хотя это не сработало, была еще одна рекомендация по QTimer. Я только что закодировал что-то с этим, и теперь мое программное обеспечение работает! Большое спасибо за помощь. - person Jerry Zhao; 20.06.2020