ポカミス

SDL_Archive と SDL_mixer 周りで最近こんなポカミスをしました。

Mix_Music* pBgm = NULL;

SDL_Archive *pArchive = Archive_FromTar("hogehoge.tar");
SDL_RWops *pOpsRW = SDL_RWFromArchive(pArchive, "hogebgm.ogg");
pBgm = Mix_LoadMUS_RW(pOpsRW);
SDL_RWclose(pOpsRW);
Archive_Finish(pArchive);

Mix_PlayMusic(pBgm, -1); // この直後に落ちる

曲の再生中は SDL_RWops にガンガンアクセスするから、SDL_RWops も SDL_Archive も閉じたらあかんよ…(泣)。

終了するまでずっとアーカイブを開きっぱなし、というのも怖いので、一旦バッファに曲を全部読み込み、SDL_RWFromConstMem() で SDL_RWops を作るようにしました。
なんか SDL_RWops のメリットを全部殺しているような気がしますが、他にいい方法が思いつきませぬ…。_| ̄|○