> I think the answer that sticks out to me is that if these are musical horn sounds, you might consider using pygame.mixer.music, which will stream the sounds as needed.
A very good idea, and the route I originally took, but as far as I can tell pygame.mixer.music doesn't support polyphony, and I occasionally need to play multiple sounds at once. On Wed, Jun 6, 2018 at 10:59 PM, Daniel Foerster <pydsig...@gmail.com> wrote: > I think the answer that sticks out to me is that if these are musical horn > sounds, you might consider using pygame.mixer.music, which will stream the > sounds as needed. However, this won't work if you have other music playing > or if you want multiple horns to be able to play at the same time. > > A second solution is to load the sounds in the background of the game, > especially if you're going to launch on a menu where the sounds won't be > needed. You can pre-populate a dictionary with dummy sounds and use a > thread to go through and load each sound into the dictionary while the user > interacts with the menu. > > SOUND_PATH_MAPPING = {'horn_funny': 'horn_funny.ogg', 'horn_sad': > 'extra_sounds/horn_sad.wav'} > > SOUNDS = {name: None for name in SOUND_PATH_MAPPING} > > def load_sounds(): > > for name, path in SOUND_PATH_MAPPING: > > SOUNDS[name] = pygame.mixer.Sound(path) > > > def load_sounds_background(): > > thread.start_new_thread(load_sounds, ()) > > > If there's a legitimate chance that the player might try to use the horn > sounds before they've finished loading, just have the horn logic check for > Nones before trying to play or have a dummy sound object with a play method > that does nothing. > > A full example of how you might do this with a class: > https://gist.github.com/pydsigner/231c0812f9f91050dd83c744d6d5dc4b > > On Thu, Jun 7, 2018 at 12:31 AM, Alec Bennett <wrybr...@gmail.com> wrote: > >> Sorry, I left out the line where I try to save the file: >> >> > pickle.dump( sound_obj, open( "sound.pickled", "wb" ) ) >> >> >> >> On Wed, Jun 6, 2018 at 10:29 PM, Alec Bennett <wrybr...@gmail.com> wrote: >> >>> I'm building a musical horn for my car with PyGame, and it works >>> perfectly, but since it needs to load each of the 20 sounds on startup it >>> takes about 30 seconds to load. I'm running it on a Raspberry Pi, which >>> doesn't help of course. >>> >>> I thought I'd simply save the Sound objects as pickle objects, but that >>> produces an error: >>> >>> > sound_obj = pygame.mixer.Sound("whatever.wav") >>> >>> > can't pickle Sound objects >>> >>> I also tried the dill module (https://github.com/uqfoundation/dill) but >>> with similar results: >>> >>> > sound_obj = pygame.mixer.Sound("whatever.wav") >>> >>> > Can't pickle <type 'Sound'>: it's not found as __builtin__.Sound >>> >>> I don't imagine can think of some clever way to save the preloaded >>> Sounds, or otherwise speed up the load times? >>> >>> >>> >>> >>> >> >