Seite 1 von 1
Soundausgabe mit Mixer -- verzögerung
Verfasst: Sonntag 9. August 2009, 23:01
von Teabag
Hey,
ich programmiere gerade ein 2d-egoshooter Spiel, klappt auch alles super, nur habe ich jetzt sounds eingefügt, dass die Waffen auch töne von sich geben ;P
Das habe ich mit dem pygame modul pygame.mixer gemacht.. ( nach diesem Schema )
Code: Alles auswählen
pygame.mixer.init()
a = pygame.mixer.Sound("Sounds/schuss.wav")
a.play()
Mein problem ist, dass der Sound erst etwa 2-3 Sekunden nachdem der schuss fällt abgespielt wird. Es ist also immer eine sehr große verzögerung da. Kann man da irgend etwas ändern oder kennt ihr ein anderes modul was dafür besser geeignet wäre ?..
Schonmal vielen Dank.
Gruß Teabag
Verfasst: Montag 10. August 2009, 22:53
von yipyip
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
Verfasst: Dienstag 11. August 2009, 22:29
von Teabag
hm danke, aber das hat bei mir leider nicht geholfen..
Verfasst: Dienstag 11. August 2009, 23:03
von yipyip
...und dabei habe ich meine Kristallkugel extra blank geputzt...

Verfasst: Freitag 14. August 2009, 09:57
von Py19917062
vlt ist zwischen dem schuss und dem sound das diese verzögerung auslöst eine schleife die in diesen 2-3 sekunden abläuft und dann erst den sound abspielt
Verfasst: Freitag 14. August 2009, 12:29
von yipyip
Die Sounddatei wird doch wohl nicht erst in der Mainloop geladen?
Verfasst: Samstag 15. August 2009, 17:08
von Teabag
nein wird sie natürlich nicht, habe ja nur das Prinzip erklärt wie ich die Sound-datei abspiele.
Aber es liegt auch keine Schleife zwischen dem Schuss und dem Sound..
Verfasst: Montag 17. August 2009, 07:03
von Py19917062
und womit fängst du den sound ab? schuss und sound mit dem mausbutton oder wird der sound nach der animation des schusses abgefangen?
Verfasst: Mittwoch 19. August 2009, 22:39
von Teabag
schuss und sound mit dem mausbutton
Verfasst: Donnerstag 20. August 2009, 07:13
von Py19917062
werden beide aktionen vom selben anweisungblock abgefangen oder sind sie separat?
Verfasst: Donnerstag 20. August 2009, 07:55
von BlackJack
@Teabag: Ist das in Deinem ersten Beitrag ein Beispiel wo es die Verzögerung gibt?