2015-12-22 35 views
11

Mi piacerebbe creare pulsanti che riprodurranno il brano successivo/precedente al clic, ma dovrebbero cercare la musica su una pressione prolungata.Come cercare con AudioContext

Sono riuscito a cambiare le canzoni, ma non sono riuscito a trovare i metodi di ricerca. Anche come farlo giocare dall'inizio?

E c'è un modo per determinare quanto sono trascorsi dall'inizio della canzone? Ho trovato che il buffer ha la durata, ma non si canta il tempo di riproduzione effettivo.

A init:

context = new (window.AudioContext || window.webkitAudioContext)() 

Per riprodurre canzone:

var buffer = song.buffer 
var source = context.createBufferSource() 
source.buffer = song.buffer 
source.connect(analysers.main) 
source.start(0, offset || 0) 

risposta

4

Guess, si dovrebbe utilizzare AudioBufferNode (che ha la capacità di fare ricerca) - https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start

Inoltre, questo wrapper potrebbe essere utile - https://github.com/eipark/buffaudio

+0

Potresti rispondere anche tu alla seconda parte della domanda? Quello su quanto siamo lontani nella canzone? In percentuale o qualcosa del genere ... – Akxe

+0

Indovina, 'AudiBufferNode' ha la proprietà' duration'. Puoi provare ad usarlo. Inoltre, questo potrebbe essere utile un po 'http://stackoverflow.com/questions/11203773/how-can-i-get-the-html5-audios-duration-time –

+0

Questo non è corretto, 'AudioBufferSourceNode' non può cercare (tu non posso chiamare 'start' più di una volta). – ffxsam

2

Usa taphold API per acheive la pressione prolungata evento.

$(function(){ 
    $("your element").bind("taphold", tapholdHandler); 

    function tapholdHandler(event){ 
    /*write your code here for seek forward */ 

    } 
}); 

utilizzare jQuery Timer

var mousedowntime; 
    var presstime; 
    $("button[id$='" + buttonID + "']").mousedown(function() { 
     var d = new Date(); 
     mousedowntime = d.getTime(); 
    }); 
    $("button[id$='" + buttonID + "']").mouseup(function() { 
     var d = new Date(); 
     presstime = d.getTime() - mousedowntime; 
     if (presstime > 999/*You can decide the time*/) { 
      //Do_Action_Long_Press_Event(); 
     } 
     else { 
      //Do_Action_Click_Event(); 
     } 
    }); 

To Play dall'inizio

function beginAudio(){ 
      audio.trigger('pause'); 
      audio.prop("currentTime",audio.prop("currentTime")-audio.prop("currentTime")); 
      audio.trigger('play'); 
     } 

o impostare l'ora corrente a zero e poi giocare.

Per avanti e utilizzare Backward questo

audio.prop("currentTime",audio.prop("currentTime")-5);// 5 secs backward 
audio.prop("currentTime",audio.prop("currentTime")+5);// 5 secs forward 
+0

Non ho una variabile audio, ho una variabile di contesto (typeof AudioContext). E nessun jQuery. E l'attesa per cercare non è il problema che la ricerca è, e il fatto che audiocontext inizi a contare il tempo corrente da quando è stato creato e non si ferma quando il suono fa – Akxe

+0

puoi mostrare il tuo codice originale per il contesto audio e anche per 'play next/prev song on click song' .. –