Как вы зацикливаете музыку в PyGame Subset для Android? - PullRequest
4 голосов
/ 10 декабря 2011

Я пытался заставить музыку зацикливаться в моей игре для Android, написанной с помощью PyGame Subset.Это то, что у меня есть, и он воспроизводит аудиофайл только один раз.Мне бы очень хотелось использовать встроенную функцию зацикливания, чтобы мне не пришлось зацикливать звук вручную с помощью таймера.Есть идеи?

import pygame
try:
    import pygame.mixer as mixer
except ImportError:
    import android_mixer as mixer
if mixer:
    mixer.music.load("woo.mp3")
    mixer.music.play(-1)
while True:
    if mixer:
        mixer.periodic()

Ответы [ 3 ]

1 голос
/ 26 марта 2015

Примечание не работает в Android 5.x.Я знаю, что это старый пост, но я также столкнулся с этой проблемой.Ответ zenopython будет работать с некоторыми изменениями, поскольку в модуле микшера есть ошибка.Если вы загляните в модуль anroid.mixer и посмотрите на класс музыки, вы увидите.

@staticmethod 
def get_busy(): 
    return music_channel.get_volume()

, поскольку вы можете видеть, что на самом деле это вызывает get_volume (), который всегда возвращает 1.0.Чтобы это исправить, я скопировал файл mixer.py в каталог с игрой и изменил его на

    @staticmethod
    def get_busy():
        return music_channel.get_busy()

Затем imoport mixer, и он работает.ТАК что-то вроде

import pygame
try:
    import pygame.mixer as mixer
except ImportError:
    import mixer
if mixer:
    mixer.music.load("woo.mp3")
    mixer.music.play(-1)
while True:
    if mixer:
        if mixer.music.get_busy() == False:
            mixer.music.play(-1)

Это сработало для меня.

Как уже упоминалось выше, это не работает в 5.x.

Другое решение - просто поставить музыку в очередь, котораяработает

mixer.music.load('music')
mixer.music.play()
mixer.music.queue('music')

В общем случае модуль mixer.music в pgs4a имеет ряд ошибок.Еще одна ошибка, которую я обнаружил, находится в mixer.music.pause () и mixer.music.unpause ().unpause () просто снова вызывает pause (), поэтому мне также пришлось отредактировать это, чтобы разрешить паузу в музыке, когда игра остановлена.Смотри ниже

if android:                                                         
    if android.check_pause():
        mixer.music.pause()
        android.wait_for_resume()
        mixer.music.unpause()
0 голосов
/ 04 октября 2013

Я вполне уверен, что проблему можно решить с помощью mixer.music.get_busy (), которая возвращает значение bool, True, если музыка играет, False, если музыка не воспроизводится.

import pygame
try:
    import pygame.mixer as mixer
except ImportError:
    import android_mixer as mixer
if mixer:
    mixer.music.load("woo.mp3")
    mixer.music.play(-1)
while True:
    if mixer:
        if mixer.music.get_busy() == False:
            mixer.music.play()
0 голосов
/ 06 октября 2012

Возможно попробуйте это вместо music.load ():

Для создания нового объекта Sound из файла

mixer.Sound(filename): return Sound
Sound.play(-1)
...