[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: [pygame] Pygame Mixer Crackle noise not an SDL_Mixer problem



Hi,
I didn't use any graphics in my SDL program. Just the SDL_Mixer. Here is a short example of SDL program that plays the files without noise/crackles. This was compiled with DEV-C++ and MinGW.
#include <stdlib.h>
#include <SDL.h>
#include <SDL_Mixer.h>

Mix_Chunk* bounce = NULL;  // bounce.wav from Book chapter 10
Mix_Chunk* msg = NULL; // Please put some .ogg files in the folder.ogg Book chapter 10 Mix_Music *music = NULL; // getout.ogg example from the IrrKlang music library

SDL_Surface* createScreen()
{ SDL_Surface *screen;

   screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);
   if ( screen == NULL ) {
fprintf(stderr, "Unable to set 640x480 video: %s\n", SDL_GetError());
       exit(1);
   }
   return screen;

}

void quit() {
   Mix_FreeChunk(bounce) ;
   Mix_FreeChunk(msg);
   Mix_FreeMusic(music);
   Mix_CloseAudio();
   SDL_Quit();
}

int main(int argc, char *argv[])
{
   if ( SDL_Init(SDL_INIT_EVERYTHING) < 0 ) {
       fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
       exit(1);
   }

   SDL_Surface* screen = createScreen();
   SDL_WM_SetCaption( "Hello World", NULL );
       //Update the screen
   if( SDL_Flip( screen ) == -1 )  { return 1; }

   // initialize SDL mixer
if( Mix_OpenAudio( 22050, MIX_DEFAULT_FORMAT, 2, 4096 ) == -1 ) //tried these values in Pygame
   {
       return false;
   }
   Mix_AllocateChannels(8);

   bounce = Mix_LoadWAV( "bounce.wav" );
   msg = Mix_LoadWAV("please.ogg");
   music = Mix_LoadMUS( "getout.ogg" );
       //If there was a problem loading the sound effects
   if( bounce == NULL ) { return false;  }

   SDL_Event event;
   while(true) {
       while(SDL_PollEvent(&event)) {
           if(event.type == SDL_QUIT) {
               quit();
           }
           if(event.type == SDL_KEYDOWN) {
               if(event.key.keysym.sym == SDLK_1) {
                   if(Mix_PlayChannel(-1, bounce, 0) < 0) {
                       quit();
                   }
               }
               else if(event.key.keysym.sym == SDLK_2) {
                    if(Mix_PlayChannel(-1, msg, 0) < 0) {
                        quit();
                    }
               }
               else if(event.key.keysym.sym == SDLK_3) {
                       if( Mix_PlayMusic( music, -1 ) < 0 ) {
                           quit();
                       }
               }
           }
       }
   }
   return 0;
}



----- Original Message ----- From: "René Dudfield" <renesd@xxxxxxxxx>
To: <pygame-users@xxxxxxxx>
Sent: Thursday, April 17, 2008 11:15 PM
Subject: Re: [pygame] Pygame Mixer Crackle noise not an SDL_Mixer problem


hi,

did your rewritten scripts use video?  Or just sound?

Do you have a url for your scripts somewhere?


cheers,



On Fri, Apr 18, 2008 at 4:03 PM, etrek <etrek@xxxxxxx> wrote:


Hello Pygame developers: Please read entire message before assuming you've
heard this before:)

I am a new user of Pygame. I have the book "Beginning Game Dev with Python
and Pygame". So far I am very impressed with Pygame;  It has excellent
graphics response and input capabilities.  The sound Mixer library has
problems though.

When I tried the examples in Chapter 10 "Making Things Go Boom", I noticed a "Crackling" noise when playing sound effects (short wav files) and music
(long Ogg files).

I have searched the archives at Seul.org and searched on Google for fixes
to this problem.  The solutions suggested basically amount to changing
arguments passed into:  pygame.mixer.pre_init(...)
I tried many different settings:
pygame.mixer.pre_init(44100, -16, 2, 4096)
pygame.mixer.pre_init(22050, -16, 2, 4096)
pygame.mixer.pre_init(22050, 16, 2, 1024 * some_number)
Too many to keep listing.
I also tried leaving the settings at default, which actually produces the
least amount to crackling.

I played the music/sound files with Windows Media Player to rule out my
system or bad files.  There was no crackling there.

On some of the Google searches, I saw that people were pointing to the
problem being in the actual SDL_Mixer.


So I downloaded SDL/SDL_Mixer extension and re-wrote the example scripts in
SDL/C++, using the same music/sound files.
To my surprise, there was NO Crackling noise.


So, the problem is NOT my system, it's not the arguments I'm passing into
pygame.mixer, and it's not SDL_Mixer.
The problem has to be somewhere in the Pygame Sound/Music libraries.

I even tried swapping out the SDL_Mixer libs that came with Pygame for the
ones that came with SDL_Mixer, and still got the crackling in Pygame.

It would be nice if this could be fixed.  Because the crackling is
essentially making the library unuseable. Which would be a shame, because
Pygame is a terrific library/tool.

Thanks,
Ethan D.
Systems Programmer, SR.
Planetary Lab, Univ Arizona

My System:
Windows Vista 32bit home premium
IP35-Pro mobo, integrated sound, latest drivers
4 Gig RAM
Intel Quad core