2013-06-17 13 views
10

Una delle cose che amo di più del formato MOD è la possibilità di tornare a un punto qualsiasi della canzone, rendendolo perfetto per le canzoni che hanno un "intro" seguito da un " ciclo principale ".Loop audio continuo a una posizione arbitraria

Naturalmente, MP3 non può farlo.

cose Fino ad ora, ho fatto come questo:

<audio src="/path/to/song.mp3" onEnded="this.currentTime = 12.345;"></audio> 

Se il valore del galleggiante è il momento in cui i principali inizio ciclo.

Mentre funziona, è presente una pausa di frazione di secondo, al riavvio dell'audio. Posso attenuare l'effetto di questa pausa impostando il tempo target un po 'più avanti rispetto a dove dovrebbe essere, quindi i battiti sono almeno tenuti più vicini nel tempo, tuttavia non è proprio l'ideale.

L'alternativa principale che posso pensare è quella di eseguire manualmente il loop del file audio (ad esempio in Audacity con copia-incolla) per produrre un brano che è più lungo di quello che sarebbe probabilmente necessario, ma il problema è che che si tradurrebbe in un sacco di spazio sul disco rigido sprecato e larghezza di banda, e non risolverebbe il problema delle persone che amano una canzone e si fermano ad ascoltarla per molto tempo.

Quindi mi chiedevo se c'è un modo per fare il ciclo di un flusso MP3. Se capisco il formato correttamente, dovrei essere in grado di determinare a quale posizione nel file (in byte) inizia il ciclo principale (in secondi), quindi in teoria potrei costruire un flusso che si riavvolge indefinitamente. Tuttavia, un tale streaming sarebbe supportato dall'audio HTM5?

+0

hai visto [questo sito su looping gapless?] (Http://www.compuphase.com/mp3/mp3loops.htm) Non copre html5, ma parla della teoria di ciò che deve essere nel file mp3 per avere una possibilità di loop. – AShelly

+0

@AShelly Sebbene sia interessante, si applica solo ai file che devono essere ricondotti all'inizio, non a un punto arbitrario. –

+0

Ho appena pensato di indirizzare questa altra domanda su SO: [Looping Audio HTML5] (http://stackoverflow.com/questions/7330023/gapless-looping-audio-html5) –

risposta

1

Prova misurando il ritardo ogni volta:

function playSeamless(clip, next) { 
    if(!next) { 
     next = clip.cloneNode(true); 
     next.controls = false; 
    } 

    var start = Date.now(); 
    clip.play(); 

    setTimeout(function() { 
     var time = (Date.now() - start)/1000; 
     var position = clip.currentTime; 
     var delay = time - position; 

     setTimeout(function() { 
      // Set desired currentTime on next here and adjust delay above 
      playSeamless(next, clip); 
     }, (clip.duration - clip.currentTime - delay * 2.35) * 1000 | 0); 
    }, 200); 
} 

playSeamless(yourAudioClip); 

era meglio, ma non del tutto esatto, quindi ho bisogno di regolare * 2.35 o renderlo una sottrazione o qualcosa del genere.

+0

SeamlessLoop utilizza una strategia simile. Trovato su https://github.com/Hivenfour/SeamlessLoop/blob/master/SeamlessLoop.js. – user568109

+0

Approccio interessante! –

Problemi correlati