• Create Account

Need scary sound effects or creepy audio loops for your next horror-themed game? Check out Highscore Vol.3 - The Horror Edition in our marketplace. 50 sounds and 10 loops for only \$9.99!

### #ActualSimonForsman

Posted 03 March 2012 - 07:42 AM

I'm using SDL_mixer to play a .wav sound, but I don't know when to free it.

I have this code:

Bullet::Bullet() {
//Create Bullet

/* Play the shot sound */
sound = Mix_LoadWAV("media/gunshot.wav"); //sound is a private property of Bullet

if (sound == NULL) {
fprintf(stderr, "Unable to load WAV file: %s\n", Mix_GetError());
}

Mix_PlayChannel(0, sound, 0);
}


My problem is that if I free the sound right after I play it, it will not be played.
If I free the sound when the bullet is deleted (deconstructor), the sound stops before it is over, because I delete bullets whenever they leave the screen, and sometimes they leave the screen before the sound isn't over.

So, my doubt it, how can I handle loading the sound and freeing it without super RAM consumption? Thank you!

1) Load the sound at the start of the level. (The same goes for textures, models, etc)
2) Free them at the end of the level

If sounds and models etc are the same across all levels then you can load them when the game starts instead (and free them when the game ends), you could also store a list of resources required for each level and then load the full list for level 1, at the end of level 1 you check the difference in the resource list for lvl 1 and 2 and free the resources that are no longer needed and then add any new additions.

All bullets can share 1 sound object so you don't need to load it once for each bullet.

### #1SimonForsman

Posted 03 March 2012 - 07:41 AM

I'm using SDL_mixer to play a .wav sound, but I don't know when to free it.

I have this code:

Bullet::Bullet() {
//Create Bullet

/* Play the shot sound */
sound = Mix_LoadWAV("media/gunshot.wav"); //sound is a private property of Bullet

if (sound == NULL) {
fprintf(stderr, "Unable to load WAV file: %s\n", Mix_GetError());
}

Mix_PlayChannel(0, sound, 0);
}


My problem is that if I free the sound right after I play it, it will not be played.
If I free the sound when the bullet is deleted (deconstructor), the sound stops before it is over, because I delete bullets whenever they leave the screen, and sometimes they leave the screen before the sound isn't over.

So, my doubt it, how can I handle loading the sound and freeing it without super RAM consumption? Thank you!

I'm using SDL_mixer to play a .wav sound, but I don't know when to free it.

I have this code:

Bullet::Bullet() {
//Create Bullet

/* Play the shot sound */
sound = Mix_LoadWAV("media/gunshot.wav"); //sound is a private property of Bullet

if (sound == NULL) {
fprintf(stderr, "Unable to load WAV file: %s\n", Mix_GetError());
}

Mix_PlayChannel(0, sound, 0);
}


My problem is that if I free the sound right after I play it, it will not be played.
If I free the sound when the bullet is deleted (deconstructor), the sound stops before it is over, because I delete bullets whenever they leave the screen, and sometimes they leave the screen before the sound isn't over.

So, my doubt it, how can I handle loading the sound and freeing it without super RAM consumption? Thank you!

I'm using SDL_mixer to play a .wav sound, but I don't know when to free it.

I have this code:

Bullet::Bullet() {
//Create Bullet

/* Play the shot sound */
sound = Mix_LoadWAV("media/gunshot.wav"); //sound is a private property of Bullet

if (sound == NULL) {
fprintf(stderr, "Unable to load WAV file: %s\n", Mix_GetError());
}

Mix_PlayChannel(0, sound, 0);
}


My problem is that if I free the sound right after I play it, it will not be played.
If I free the sound when the bullet is deleted (deconstructor), the sound stops before it is over, because I delete bullets whenever they leave the screen, and sometimes they leave the screen before the sound isn't over.

So, my doubt it, how can I handle loading the sound and freeing it without super RAM consumption? Thank you!

1) Load the sound at the start of the level. (The same goes for textures, models, etc)
2) Free them at the end of the level

If sounds and models etc are the same across all levels then you can load them when the game starts instead (and free them when the game ends), you could also store a list of resources required for each level and then load the full list for level 1, at the end of level 1 you check the difference in the resource list for lvl 1 and 2 and free the resources that are no longer needed and then add any new additions.

All bullets can share 1 sound object so you don't need to load it once for each bullet.

PARTNERS