Python Kivy:一次播放多次声音

时间:2015-10-06 17:49:06

标签: android python audio kivy

我正在使用Python Kivy进行Android游戏。我想在活动中播放声音

sound = SoundLoader.load("sound.wav")
def onEvent():
    sound.play()

,它的确有效。但现在问题是:当然事件可以,并且在我的情况下将在声音从最后一个事件播放之前再次发生。由于声音基于播放/暂停的想法,我遇到了同时播放同一对象的多个声音的问题。首先可以这样解决这个问题:

onEvent():
    SoundLoader.load("sound.wav").play()

因为这会一直创建一个新对象,所以能够在另一个事件播放声音的同时播放它。但是使用这种方法的问题非常明显,因为必须在每次事件发生时加载声音,因此会导致延迟直到它被播放。

有更实用的方法吗?

{如果你不明白我在说什么,或者只是没有看到问题,请随时问}

1 个答案:

答案 0 :(得分:1)

您可以通过加载多个声音实例来解决此问题。 例如

def play():
    sounds[index].play()
    index = (index + 1) % len(sounds)

然后

#include <stdio.h>
#include <stdlib.h>

int days_in_month[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};

struct date {
  int day;
  int month;
  int year;
};

int leap_year(int year) {
    if(year%400==0) return 1;

    if(year%4==0 && year%100!=0) return 1;

    return 0;
}

int correct(struct date d) {
    if(d.day < 1 || d.day > days_in_month[d.month]) return 0;

    if(d.month < 1 || d.month > 12) return 0;

    return 1;
}

int number_of_days(struct date d) {
    int result = 0;
    int i;

    for(i=1; i < d.year; i++) {
        if(leap_year(i))
            result += 366;
        else
            result += 365;
    }

    for(i=1; i < d.month; i++) {
        result += days_in_month[i];

        if(leap_year(d.year) && i == 2) result++;
    }

    result += d.day;
    return result;
}

int main() {
    struct date first, second;
    int days;

    scanf("%d %d %d", first.day, first.month, first.year);
    scanf("%d %d %d", second.day, second.month, second.year);

    if(!correct(first) || !correct(second)) {
        printf("Illegal date\n");
    }

    days = number_of_days(first) - number_of_days(second);

    printf("%d", days);

    return 0;
}

您加载的声音越多,您可以同时播放的实例越多(在此示例中为10)。