Versuche mal, etwas mit der Buffergroesse bei
mixer.pre_init
herumzuexperimentieren. Jedenfalls konnte ich damit die Verzoegerungszeit etwas beeinflussen:
Code: Alles auswählen
#!/usr/bin/env python
####
import pygame as pyg
####
class Display(object):
def __init__(self, width, height, sound_name):
pyg.mixer.pre_init(44100, -16, 2, 768)
pyg.init()
self.screen = pyg.display.set_mode((width, height), pyg.DOUBLEBUF)
self.font = pyg.font.Font(None, 500)
self.clock = pyg.time.Clock()
self.sound = pyg.mixer.Sound(sound_name)
self.act_key = ''
def dispatch_events(self):
event = pyg.event.poll()
if event == pyg.NOEVENT:
return None
if event.type == pyg.QUIT:
return 'q'
if event.type == pyg.KEYDOWN:
if event.key == pyg.K_ESCAPE:
return 'q'
self.act_key = str(event.key)
return 'do_sound'
return None
def do_sound(self):
self.sound.play()
def draw_text(self):
surface = self.font.render(self.act_key, True, (0, 255, 0))
self.screen.blit(surface, (0, 0))
def flip(self):
self.clock.tick(70)
pyg.display.flip()
self.screen.fill((0,0,0))
####
class Controller(object):
def __init__(self, sound_name):
self.display = Display(800, 500, sound_name)
def run(self):
ev = None
while not ev == 'q':
ev = self.display.dispatch_events()
self.display.draw_text()
if ev == 'do_sound':
self.display.do_sound()
self.display.flip()
####
if __name__ == '__main__':
Controller('blip.wav').run()
Auf Tastendruck wird der Sound aus 'blip.wav' abgespielt, das
must Du natuerlich entsprechend anpassen.
yipyip