Я пытался сделать это сам, на iOS (для iPhone / iPad), но он отказывается кэшировать аудиофайлы в автономном режиме, даже если в Cache Manifest.
Это не ошибка, но вместо этого он просто притворяется, что воспроизводил аудиоэлемент, если вызывается через JavaScript без элемента управления. Если он встроен в элемент управления, он отображает альтернативный элемент управления с надписью «Не удается воспроизвести аудиофайл». Работает нормально, если приложение может выходить в интернет.
Кажется, что звук не кэшируется, воспроизведение другого звукового ресурса, кажется, заставляет его очищать предыдущий ресурс из памяти - это довольно бесполезная функциональность, даже когда он-лайн.
Я экспериментировал с base64, кодирующим аудио как URI данных. Это работает в Safari на настольном компьютере (по крайней мере, для довольно коротких сэмплов размером около 20-30 Кб, которые я использовал), но, похоже, вообще не поддерживается в iOS - он ничего не делает, что очень раздражает.
Я не знаю о других поставщиках - Google Chrome раньше не поддерживал URI данных для аудио, но, возможно, они исправили это ... - похоже, сейчас это невозможно.
Обновление: незначительное расхождение с iPhone OS 3.x (протестировано с 3.1.2): если аудио-элемент указан в автономном веб-приложении, но у него нет элемента управления, он отображает неинтерактивный элемент управления с не анимированный спиннер на нем (что он определенно не должен делать). Я предполагаю, что это исправлено в iOS 4.x (которая должна выйти на следующей неделе).