in the previous version, i did it in sceAudiocodecInit, but now, I think we do not need to creat and recreat each time, since this just provide a mp3 decoder. Once you create it at start, you can just call it to decode your mp3 audio if it is presented. Each time we call the sceAudiocodecDecode function during playing one mp3 audio, the ctxPtr is always the same, as well as the datas of its pointed structure. i.e., the memory pointed by inDataPtr is just updated, so we do not need to recreate and destroy it all the time. It will be destried when the game is closed. The destructor will be automatically invoked at that moment. 
About savestate, I've already tried that before when I write that part since I need to load to the bgm and voice part to test its performance, and it works well without preventing any savestates issues.
 
PS: what do you mean load multiple games in a row? at one moment, only one game can be load right? how to use one simulator to load multiple games in the same time?