audio looping senza pause html5

Qualcuno ha idea di come realizzare il loop senza pause per il tag audio? Sto pensando a qualcosa di javascript ..

Ho un ciclo che dice 1 misura e voglio che giri e rimanga in tempo. Quindi ho bisogno che l’anello sia liscio / senza spazi. Quando ho semplicemente impostato “loop” su true, è in ritardo e non rimane nel tempo.

Sfortunatamente questo è uno dei punti deboli dell’elemento HTML5. Non vi è alcuna garanzia che l’audio venga riprodotto quando lo si desidera o senza ritardi.

Ci sono due opzioni che vale la pena esaminare – SoundManager2 (http://www.schillmania.com/projects/soundmanager2/) è una grande libreria che sarebbe probabilmente utile qui, anche se in questo caso userà Flash per riprodurre l’audio.

L’altra opzione è guardare l’API Web Audio in Chrome o l’API Audio Data in Firefox. Entrambi sono davvero nuovi, e non sono ancora pronti per il prime time, ma ti permettono di fare cose come la riproduzione audio programmata, il looping e molto altro ancora. Dai un’occhiata a http://www.htmlfivewow.com/slide58 per maggiori informazioni!

Anche se non è ancora perfetto, questo ha funzionato per me:

var audio_file = new Audio('whatever.mp3') audio_file.addEventListener('timeupdate', function(){ var buffer = .44 if(this.currentTime > this.duration - buffer){ this.currentTime = 0 this.play() }}, false); 

Sperimenta con le dimensioni del buffer per trovare ciò che funziona meglio per te

La soluzione è di avere 2 istanze per controllare la riproduzione.

Qualcosa come questo :

 var current_player = "a"; var player_a = document.createElement("audio"); var player_b = document.createElement("audio"); player_a.src = "sounds/back_music.ogg"; player_b.src = player_a.src; function loopIt(){ var player = null; if(current_player == "a"){ player = player_b; current_player = "b"; } else{ player = player_a; current_player = "a"; } player.play(); setTimeout(loopIt, 5333); //5333 is the length of the audio clip in milliseconds. } loopIt(); 

E se utilizzi SoundManager2, invia l’audio tramite un URI di dati anziché una richiesta URL.

Stranamente, ho scoperto che SoundManager2 richiede il file dal server ogni volta che viene riprodotto. Anche se carica dalla cache, ci sarà un ritardo fino a quando l’intestazione non modificata viene ricevuta per il file audio.

Sto provando a farlo con intervalli, prova questo https://github.com/Hivenfour/SeamlessLoop

ha funzionato per me con file wav, testato su Chrome, Firefox e Opera

Sì, questo è un vero dolore … evidentemente chiunque abbia specificato l’elemento non era né un musicista né uno sviluppatore di giochi – heh.

In ogni caso, a seconda di cosa stai facendo, un’altra soluzione ansible è creare un MP3 / OGG / wav che sia una lunga ripetizione del tuo loop. Questo è utile per il punto in cui si desidera riprodurre un suono solo poche volte prima di smettere di riprodurlo.

Un esempio di questo potrebbe essere un giocatore che spinge in una nave spaziale. Al momento sto sviluppando un gioco con questo scenario e ho creato un MP3 con un numero di loop dell’effetto di thrust, per un totale di circa 6 secondi di riproduzione. Al fine di ridurre al minimo le dimensioni del download, ho codificato l’audio a 32kbps, ovvero inferiore e inizia a suonare in modo inaccettabile, dal momento che il suono di spinta è in gran parte un rumore bianco.

Come puoi immaginare, sto solo considerando il fatto che è molto improbabile che un giocatore punti in continuazione per 6 secondi. Se lo fanno, sentiranno il vuoto, ma posso conviverci. La maggior parte delle volte non spingeranno per qualcosa di simile, quindi non sentiranno il problema.

Un’altra opzione che ho preso in considerazione è una coppia di campioni che si dissolvono in apertura e in uscita e entrambi in loop con un offset.

Mentre questi funzionano per alcuni scenari di gioco, quasi certamente non funzionerebbero per nessun tipo di scenario musicale. YMMV.

Ho cercato un paio di ore per la soluzione, dato che questa era la prima pagina in cui sono atterrato, desidero condividere con voi un collegamento a una libreria JS che sembra riprodurre perfettamente un loop di tracce audio senza alcun gap Gapless -5

Ho provato i metodi di cui sopra senza successo, Nel mio caso d’uso (utilizzando Firefox 43.0) sembrano tutti fare clic. Ciò è dovuto in parte al fatto di dover ricorrere a un tono continuo che non ha rotture a portata di mano o punti bassi (sto provando a creare un motore di un’auto revival usando 22010 file / sec mono .wav).

Tuttavia sono in grado di concatinare il mio file .wav più volte per generare un singolo file .wav lungo che non ha clic in esso (eccetto quello ora raro che si verifica ancora alla fine), questo perché il mio file .wav originale era accuratamente realizzato per essere ciclico.

Ora ho in programma di far riprodurre continuamente molti di questi file lunghi contemporaneamente (uno per ciascun livello di rpm dell’auto) e di mixare questi segnali usando un gainNode (descritto qui: http://www.html5rocks.com/en/tutorials/ webaudio / intro / ). Ciò dovrebbe comportare un motore di auto con clic gratuito che suonerà molto meglio del semplice avvio e arresto dei singoli file .wav dalla riproduzione.

Questo non è ancora ansible utilizzando l’audio HTML5 perché l’evento terminato si innesca solo una volta per elemento audio.

il mio approccio è scoraggiante, ma quello che funziona per la musica di sottofondo ambient

diciamo che la nostra traccia ha 5,3 secondi

hai 2 tracce audio dello stesso file. quando è in procinto di finire (per esempio 1 secondo prima di terminare – 4.3s-5.3s) lo sbiadisci (imposta il volume in base alla percentuale di posizione entro questo secondo). allo stesso tempo, la seconda traccia inizia a sbiadirsi (0s-1s). puoi farlo tramite un intervallo di 50 ms o qualcos’altro, a seconda della tua libreria audio

dopo la fine della riproduzione si cambia una variabile booleana che controlla questo fadein / fadeout e in retromarcia quale traccia si dissolverà e quale traccia si dissolverà nella prossima esecuzione