2015-12-22 6 views
11

Ich möchte Tasten erstellen, die nächste/vorherige Lied auf Klick abspielen, aber sie sollten die Musik auf lange drücken.Wie suche ich mit AudioContext

Ich habe es geschafft, Lieder zu ändern, aber ich konnte die Suchmethoden nicht finden. Wie kann man es von Anfang an spielen lassen?

Und gibt es eine Möglichkeit zu bestimmen, wie viel seit dem Beginn des Liedes vergangen sind? Ich habe herausgefunden, dass der Puffer eine Dauer hat, aber keine tatsächliche Spielzeit.

Bei init:

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

Song zu spielen:

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

Antwort

4

Guess, sollten Sie AudioBufferNode verwenden (es hat die Fähigkeit zu tun, suchen) - https://developer.mozilla.org/en-US/docs/Web/API/AudioBufferSourceNode/start

Auch könnte dieser Wrapper sehr nützlich sein - https://github.com/eipark/buffaudio

+0

Könnten Sie bitte auch den zweiten Teil der Frage beantworten? Der eine über wie weit im Lied wir sind? In Prozenten oder so ... – Akxe

+0

Rate, 'AudiBufferNode' hat' duration' Eigenschaft. Sie können versuchen, es zu verwenden. Auch das könnte ein wenig nützlich sein http://stackoverflow.com/questions/11203773/how-can-i-get-the-html5-audios-duration-time –

+0

Dies ist falsch, 'AudioBufferSourceNode' kann nicht suchen (Sie kann 'start' nicht mehr als einmal aufrufen. – ffxsam

2

Verwenden taphold API die lange Presse Event acheive.

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

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

    } 
}); 

Verwendung 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(); 
     } 
    }); 

von Spielen

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

oder stellen aktuelle Zeit auf Null beginnend und dann spielen.

Für Vorwärts und Rückwärts Verwendung dieses

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

Ich habe keine Audio-Variable, ich habe eine Kontextvariable (typeof AudioContext). Und keine jQuery. Und der Halt zu suchen ist nicht das Problem der Suche ist, und die Tatsache, dass Audiokontext beginnt zu zählen currentTime seit es erstellt wird und nicht aufhören, wenn der Ton – Akxe

+0

können Sie Ihren ursprünglichen Code für Audio-Kontext und auch für 'play next/prev song on click song' .. –

Verwandte Themen