Prima di tutto: il supporto audio HTML5 in Mobile Safari su iOS (5.01, 5.1) è rather limited. Ma sono riuscito a far funzionare alcuni piccoli suoni di "tipo evento" nelle mie app web per iPad 2. Dato che stai parlando di un solo file audio per la tua app, non devi ricorrere a trucchi sprites audio (cioè unire più file MP3 in un file MP3 e modificare la posizione di riproduzione all'interno del file unito a seconda del suono che desideri essere giocato).
Come notato, non è possibile riprodurre automaticamente l'audio in Safari mobile, ovvero senza che l'utente faccia clic su alcun elemento. Tecnicamente parlando, l'audio deve essere riprodotto (non caricato) nello stesso stack di chiamate di un evento click. Ma probabilmente sperimenterai un ritardo di 0,5 secondi quando Mobile Safari crea l'oggetto audio. Ecco una soluzione a questo 'problema':
- All'inizio della vostra applicazione (durante il caricamento/inizializzazione), aggiungere un gestore clicca per il documento HTML che inizia a riprodurre il file audio non appena l'utente fa clic/tocca ovunque nell'app. Questo costringerà Safari ad iniziare a caricare l'audio.
- Ascolta per l'evento "riproduzione" che viene attivato quando l'audio è pronto per essere riprodotto e immediatamente messo in pausa.
- Ora inizia a riprodurre l'audio (senza indugio) di nuovo quando è necessario.
Ecco po 'di codice JavaScript rapida:
function initAudio() {
var audio = new Audio('./path/to/my/sound.mp3');
audio.addEventListener('play', function() {
// When the audio is ready to play, immediately pause.
audio.pause();
audio.removeEventListener('play', arguments.callee, false);
}, false);
document.addEventListener('click', function() {
// Start playing audio when the user clicks anywhere on the page,
// to force Mobile Safari to load the audio.
document.removeEventListener('click', arguments.callee, false);
audio.play();
}, false);
}
Apparentemente non funziona su iOS Simulator ma funziona perfettamente su iPhone. – TimPetricola
Sono sorpreso che funzioni su iPhone, dal momento che normalmente è necessario avviare * l'audio * in risposta a un clic dell'utente, non * caricando *. Ma vedi la mia risposta qui sotto per una soluzione per problemi iPad (un altro dispositivo iOS) che spero possano essere di qualche aiuto. – Jeroen