[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

RE: [pygame] Timing...



Unless I'm missing something, I don't know why threading would help.
In this case, things will be even worse than calling per frame, because
you're spinning
100% of whatever the CPU can muster for this thread, virtually grinding the
game to a halt.
Adding a time.sleep(ms_wait) would be an option to give the game some
ticks - but in any case you
still need to wait for get_busy to return false, at which time it's too late
for a sample to appear again in time. (Even a done event would suffer the
same problem,
but at least take no CPU during the play.)
All the buffers need to be added before the
channel ever stops playing - then there's no reason for a spin-wait
anywhere.

I suppose I'm too picky comming from a speech background - if you're
just doing sound f/x or you're willing to have the thing sound like most
telephony IVR
systems, these schemes should be okay if you have enough CPU to spare.


thanks,
m

-----Original Message-----
From: owner-pygame-users@seul.org [mailto:owner-pygame-users@seul.org]On
Behalf Of Frank Raiser
Sent: Friday, July 27, 2001 1:16 PM
To: pygame-users@seul.org
Subject: Re: [pygame] Timing...


> The only problems are that I want to avoid calling *anything* every frame,
> and there can't be any delay between sounds even at 60fps - unfortunately
> the ear is really good at picking that stuff up, especially is speech.
> (I'll give it a try anyway!)
Why don't you simply use threading for this?
Some more risky brain code (building on pete's code):

import thread

class SoundSequence:
    "plays a sequence of sounds in order"
     def __init__(self, *sounds):
         "pass a sequence of Sound objects"
         self.channel = pygame.mixer.play(sounds[0])
         self.sounds = sounds[1:]
	 thread.start_new_thread(self.update,())

     def update(self):
         "call once per frame"
         if self.channel and self.channel.get_busy():
             if self.sounds:
                 channel.play(self.sounds[0])
                 self.sounds = self.sounds[1:]
             else:
                 self.channel = None
         return self.get_busy()

     def get_busy(self):
         "query if sounds are still playing"
         return self.channel is not None

Then you would only make one instance of this class and that's it.. no
more framebased calling.. just my $.02

> (hey, is it enough for a code repository entry?)
heh.. now it is :P
j/k

HTH
--
Raiser, Frank aka CrashChaos
IRC: 141.30.225.9:6667 #United-Programmers

MS Office XP - the more money I give to Microsoft,
the more vulnerable my Windows computers are
    -- Georgi Guninski
____________________________________
pygame mailing list
pygame-users@seul.org
http://pygame.seul.org


_________________________________________________________
Do You Yahoo!?
Get your free @yahoo.com address at http://mail.yahoo.com

____________________________________
pygame mailing list
pygame-users@seul.org
http://pygame.seul.org