我能以任何方式让Python声音重叠吗?

时间:2016-12-21 22:42:38

标签: python audio pygame

import pygame,sys

pygame.init()

size = 40,40
screen = pygame.display.set_mode(size)

LEFT = 1

s = pygame.mixer.Sound("Sound.wav")

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == LEFT:
                s.play()

所以目前,我正在尝试使用Pygame制作游戏。我把它设置好,只要你点击鼠标就会播放声音。它可以工作,但我真的很生气,因为我一次只能听到一个声音效果。如果我很快点击7次,我可能只听到4-6个声音。如果我非常快地点击2次,我只能听到一个声音播放。

我已经查看了有关重叠Pygame声音的其他各种问题(它与pygame.mixer.Channel有关,我不明白)。到目前为止,对我来说没有任何作用。有什么想法吗?

2 个答案:

答案 0 :(得分:1)

旧线程,但是像我这样的人可能正遇到同样的问题

要使CodeSurgeons解决方案正常工作,我必须使用较小的缓冲区大小来初始化pygame.mixer

pygame.mixer.init(buffer=2048)

pygame.mixer.pre_init(buffer=2048)
pygame.init()

答案 1 :(得分:0)

玩一下,我认为你使用pygame.mixer.Channel是正确的。我建议您查看pygame.mixer以及pygame.mixer.Channel页面。我能想到的最简单的方法是查看pygame中是否有空的通道(默认情况下有8个通道可用,pygame.mixer.set_num_channels()可以创建更多通道)。如果有一个空的可用,那么您可以使用频道来播放声音而不是声音对象本身。通过这两个调整,您的样本就变成了这样:

import pygame
import sys

pygame.init()
size = (200, 200)
screen = pygame.display.set_mode(size)
LEFT = 1
s = pygame.mixer.Sound("Sound.wav")

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            if event.button == LEFT:
                print "click"
                empty_channel = pygame.mixer.find_channel()
                empty_channel.play(s)

让我知道它是否有帮助!