Я недавно написал аудиоплеер HTML5. У меня были похожие проблемы с iOS4 и iOS5. Во-первых, воспроизведение должно инициироваться пользовательским вводом, в частности, это означает, что оно должно быть в том же стеке вызовов, что и событие щелчка.
Я много тестировал, и iOS, похоже, вообще отказалась кэшировать аудио. Он получал аудио с каждой игрой. Я думаю, что это следует считать ошибкой, но, возможно, они пытаются сохранить локальное пространство хранения (аудиофайлы могут быть довольно большими).
Если ваши аудиофайлы не слишком велики, вы можете подумать о том, чтобы объединить их в один файл, а затем использовать паузу / переход в положение / воспроизведение для переключения между звуками. Я не пробовал, но это должно сработать. Я не использовал эту технику, потому что мое приложение было музыкальным проигрывателем, а музыкальные файлы слишком велики, чтобы эта техника была полезной.