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 testenich 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 freedoft passiert allerdings folgendes:
free music music freed free musicdannach 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