Я экспериментировал со странной идеей, которая у меня появилась на днях, и я хотел узнать, знает ли кто-нибудь способ решения проблемы, с которой я столкнулся
Итак, что я хотел сделать, так это объединение звуков, которые l oop случайное количество раз, а затем переходят к следующему звуку, который снова повторяется в течение другого случайного количества раз, а затем переходит к следующему и продолжает делать это, скажем, для 100 других звуки?
Это похоже на заранее определенный список звуков, который активируется в фиксированном порядке, но каждый звук имеет переменную «зацикливания», которая по сути является случайным целым числом между двумя числами, которое определяет, сколько раз этот звук повторяется до перейти к следующему.
Я сделал эту анимацию, потому что я сосал объяснения.
Я знаю, это звучит глупо, бессмысленно и немного безумно, но, как я уже сказал, это эксперимент.
он казался достаточно легким, поэтому я попробовал это:
(Кстати, я использую Tkinter и pygame)
def activate():
random_number_1 = randint(0, 3)
sound1 = pygame.mixer.Sound("sound2.wav")
pygame.mixer.Sound.play(sound1, random_number_1)
random_number_2 = randint(0, 3)
sound2 = pygame.mixer.Sound("sound3.wav")
pygame.mixer.Sound.play(sound2, random_number_2)
random_number_3 = randint(0, 3)
sound3 = pygame.mixer.Sound("sound4.wav")
pygame.mixer.Sound.play(sound3, random_number_3)
random_number_4 = randint(0, 3)
sound4 = pygame.mixer.Sound("sound5.wav")
pygame.mixer.Sound.play(sound4, random_number_4)
random_number_5 = randint(0, 3)
sound5 = pygame.mixer.Sound("sound6.wav")
pygame.mixer.Sound.play(sound5, random_number_5)
button = Button(root, text="button", command=activate)
button.pack()
Но проблема в том, что pygame не ждет окончания каждого из циклов, а воспроизводит каждый звук одновременно
Затем мне пришло в голову, что использование «For Loops» может решить проблему, может быть, что-то вот так, но со звуком:
def activate():
randomnumber1 = randint(0, 3)
for i in range(randomnumber1):
print(1)
randomnumber2 = randint(0, 3)
for i in range(randomnumber2):
print(2)
randomnumber3 = randint(0, 3)
for i in range(randomnumber3):
print(3)
randomnumber4 = randint(0, 3)
for i in range(randomnumber4):
print(4)
вот так:
def activate():
randomnumber1 = randint(0, 3)
for i in range(randomnumber1):
sound1 = pygame.mixer.Sound("sound2.wav")
pygame.mixer.Sound.play(sound1)
randomnumber2 = randint(0, 3)
for i in range(randomnumber2):
sound2 = pygame.mixer.Sound("sound3.wav")
pygame.mixer.Sound.play(sound2)
randomnumber3 = randint(0, 3)
for i in range(randomnumber3):
sound3 = pygame.mixer.Sound("sound4.wav")
pygame.mixer.Sound.play(sound3)
randomnumber4 = randint(0, 3)
for i in range(randomnumber4):
sound4 = pygame.mixer.Sound("sound5.wav")
pygame.mixer.Sound.play(sound4)
но не сработало
Затем я вспомнил, что winsound работает синхронно и, насколько Я знаю, вы не можете указать, сколько раз звук зацикливается, поэтому я попытался:
def activate():
randomnumber1 = randint(0, 3)
for i in range(randomnumber1):
winsound.PlaySound("sound2.wav", winsound.SND_ASYNC)
randomnumber2 = randint(0, 3)
for i in range(randomnumber2):
winsound.PlaySound("sound3.wav", winsound.SND_ASYNC)
randomnumber3 = randint(0, 3)
for i in range(randomnumber3):
winsound.PlaySound("sound4.wav", winsound.SND_ASYNC)
randomnumber4 = randint(0, 3)
for i in range(randomnumber4):
winsound.PlaySound("sound5.wav", winsound.SND_ASYNC)
, но это также не сработало
Теперь я возился со временем. сон, и так как каждый звук имеет определенную c длительность, я думаю, что могу рассчитать время ожидания каждого l oop.
вот так, майб e:
sound2.wav длится 1,5 с, поэтому предположим, что случайное число равно 2, то есть 2 петли аудиоклипа 1,5 с
2 * 1,5 с = 3 с
random_number_1 = randint(0, 3)
sound1 = pygame.mixer.Sound("sound2.wav")
pygame.mixer.Sound.play(sound1, random_number_1)
time.sleep(random_number_1*1.5)
но до сих пор это было супер вялым, грязным и странным, и тот факт, что time.sleep замораживает Tkinter, означает, что это почти совершенно бесполезно для меня.
Подвести итог ... если вы знаете способ заставить звуки пигмеев вести себя синхронно или, если есть более простое решение, которого я не вижу, пожалуйста, дайте мне знать.