Mix_FreeMusic() problem with SDL_mixer and smpeg



  • hallo
    ich hab ein problem mit sdl_mixer und smpeg. mein prog bleibt oft in der Mix_FreeMusic hängen.
    ich geh davon aus, dass Mix_FreeMusic in einer endlosschleife hängt und wartet bis die musik gestoppt ist, und das obwohl ich die musik vor dem aufruf von Mix_FreeMusic anhalte.
    Mit der libogg scheint alles glatt zu gehen nur eben mit mp3s hab ich oft das problem das ich den prozess killen muss weil er einfach hängt.
    komischerweise tritt das Problem nicht immer auf sondern nur manchmal so in der hälfte der fälle orso. und v.a. ich hab dieses problem nur auf einem rechner auf anderen PC gehts wunderbar.

    ich hoff von euch hat jemand ne idee was ich machen kann.
    die blöde tetrismusik macht mich schon ganz fertig 🙂 ich glaub ich sollte maln anderes sample nehmen zum testen

    ich hab mal ein beispiel angehängt:

    #include <SDL/SDL.h>
    #include <SDL/SDL_mixer.h>
    
    int main ( int argc, char** argv )
    {
    	Mix_Music *music = NULL;
    	// initialize SDL audio
    	if ( SDL_Init( SDL_INIT_AUDIO ) < 0 )
    	{
    		printf( "Unable to init SDL: %s\n", SDL_GetError() );
    		return 1;
    	}
    
    	// make sure SDL cleans up before exit
    	atexit(SDL_Quit);
    
    	if(Mix_OpenAudio(MIX_DEFAULT_FREQUENCY, MIX_DEFAULT_FORMAT, 2, 1024)==-1) {
    		printf( "Unable ot open audio device: %s\n", Mix_GetError() );
    		return 2;
    	}
    
    	Mix_VolumeMusic(MIX_MAX_VOLUME/2);
    
    	for (int i = 0;i<4;i++) {
    		music = Mix_LoadMUS("tetris_theme.mp3");
    		//Mix_FadeInMusic(music, -1, 2000);
    		Mix_PlayMusic(music,0);
    
    		SDL_Delay(3000);
    
    		//Mix_FadeOutMusic(2000);
    		//SDL_Delay(2000);
    
    		Mix_HaltMusic();
    		printf("free music\n");
    		Mix_FreeMusic(music);
    		printf("music freed\n");
    		music = NULL;
    
    		SDL_Delay(1000);
    	}
    
    	Mix_CloseAudio();
    	return 0;
    }
    

    sollte so einen output erzeugen in der stdout.txt

    free music
    music freed
    free music
    music freed
    free music
    music freed
    free music
    music freed
    

    oft passiert allerdings folgendes:

    free music
    music freed
    free music
    

    dannach muss ich den prozess killen weil er hängt

    also schon mal thx für lesen und ich hoff ihr habt ne idee



  • ok hab das problem mehr oder weniger gefunden
    in music.c der SDL_mixer lib:

    697: smpeg.SMPEG_delete(music->data.mp3);
    

    also sprich des problem liegt in der libsmpeg

    hab jetzt allerding auch im libsmpeg package die datei README.SDL_mixer gefunden. laut ihr gibts keinen expliziten SDL_mixer support mehr seitens der smpeg
    allerdings enthält die datei ein sample code snippet wie man mit hooks die smpeg in sdl_mixer integriert.
    so werd ichs wohl machen, dann muss ich mir meinen fader zwar selber schreiben aba des sollt kein prob sein.

    wenn jemand noch n kommentar hat gerne sonst denk ich is des prob gelöst

    thx
    buergi


Anmelden zum Antworten