As I can see, when we want to play next module, the player ejects the module and we have a silence for downloading/extracting period.
I'd see AMR as a background application with low priority for CPU resources. AMR shouldn't stop module while downloading/extracting and actually it should download few modules in advance. Once it's extracted the player can change the module to play. When in queue we have (let's say) 2 modules left AMR should download/extract new modules. Once we have modules in queue we could also try to maintain and mange playlists for this purpose as well.