Перебрать список, содержащий путь к звуковым файлам

avatar
Yashasvi Bhatt
19 августа 2020 в 13:29
297
3
1

Я планировал перебрать список, содержащий путь к моим звуковым файлам, и воспроизвести их с помощью модуля pygame.mixer в python, но когда я это сделал, проблема, с которой я столкнулся, заключалась в том, что pygame всегда воспроизводил последний самый индекс путь к файлу из списка, а остальные пропущены. Пример, если мой список содержит 2 элемента:

music_list = ['abc.mp3', 'gef.mp3']
for music_index in range(len(music_list)):
    mixer.init()
    mixer.music.load(music_list[music_index])
    mixer.music.play()

then it never plays abc.mp3 file and directly plays the last file gef.mp3
Источник
Eugene Anufriev
19 августа 2020 в 13:36
1

Можете уточнить, чего именно вы этим пытаетесь достичь? Хотите сделать что-то вроде плейлиста? Если да, отметьте этот: coderhelper.com/questions/45596245/…

Tomerikoo
19 августа 2020 в 13:38
0

попробуйте добавить time.sleep после play(). Вы воспроизводите оба файла, сразу один за другим

Ответы (3)

avatar
Rabbid76
19 августа 2020 в 13:39
1

Используйте pygame.mixer.music.queue(), чтобы загрузить звуковые файлы и поставить их в очередь:

mixer.init()
mixer.music.load('abc.mp3')
mixer.music.play()
mixer.music.queue('gef.mp3')
avatar
Taek
19 августа 2020 в 13:37
1

Вам не нужно использовать диапазон для перебора элементов списка в python, просто используя:

for music in music_list:
     ...
     mixer.music.load(music)
     ...

сделает свое дело.

Что касается того, почему ваш код не работает, это, скорее всего, потому, что вы не можете воспроизводить две песни одновременно, поэтому последняя песня воспроизводится «поверх» первых.

avatar
larticho
19 августа 2020 в 13:34
1

Я думаю, это потому, что метод play () не блокирует ваш код, поэтому ваш код продолжится после того, как вы запустили музыку. Таким образом, вы начнете проигрывать первую музыку, а сразу после этого запустите вторую. В итоге вы пропускаете всю музыку и проигрываете только последнюю.

Glenn Mackintosh
19 августа 2020 в 14:44
1

Это правильно, pygame.mixer.music.play() (см. Документы здесь) не блокируется, и следующая песня начинает воспроизводиться, как только она вызывается, поэтому только последняя песня будет фактически воспроизводиться в цикле. Из документации для play(): «Будет воспроизведен загруженный музыкальный поток. Если музыка уже воспроизводится, он будет перезапущен».