Web Audio API wird aus der Pause fortgesetzt

8

Ich habe oft gelesen, dass es nicht möglich ist, Audiodateien mit der anzuhalten / fortzusetzen Web-Audio-API .
Aber jetzt sah ich ein Beispiel , wo sie es tatsächlich möglich machten, zu pausieren und setze es fort. Ich habe versucht herauszufinden, wie sie es gemacht haben. Ich dachte, vielleicht ist source.looping = false der Schlüssel, aber das war es nicht.
Momentan wird mein Audio immer von Anfang an neu abgespielt.

Dies ist mein aktueller Code

%Vor%

Weiß jemand, was zu tun ist, damit es funktioniert?

    
Dan Lee 16.07.2012, 14:12
quelle

7 Antworten

5

Ohne die Quelle Ihres Beispiels zu überprüfen, würde ich sagen, dass Sie die noteGrainOn-Methode des AudioBufferSourceNode verwenden möchten ( Ссылка )

Behalte einfach im Auge, wie weit du in den Puffer hineingegangen bist, als du noteOff aufgerufen hast, und nimm dann noteGrainOn von dort, wenn du mit einem neuen AudioBufferSourceNode weitermachst.

Hat das Sinn gemacht?

BEARBEITEN: Siehe unten stehende Kommentare für aktualisierte API-Aufrufe.

    
Oskar Eriksson 16.07.2012, 14:45
quelle
15

Oskars Antwort und Aykes Kommentar sind sehr hilfreich, aber mir fehlte ein Codebeispiel. Also habe ich einen geschrieben: Ссылка Ich hoffe, es hilft.

%Vor%     
imbrizi 01.09.2013 20:56
quelle
9

In aktuellen Browsern (Chrome 43, Firefox 40) gibt es jetzt die Methoden "Suspend" und "Resume" für AudioContext:

%Vor%

(modifizierter Beispielcode von Ссылка )

    
schellmax 14.10.2015 12:51
quelle
4

Tatsächlich kann die Web-Audio-API die Pause- und Spielaufgabe für Sie erledigen. Er kennt den aktuellen Status des Audio-Kontextes (läuft oder suspendiert), so dass Sie dies auf einfache Weise tun können:

%Vor%

Ich hoffe, das kann helfen.

    
carlosacns 16.03.2016 17:56
quelle
0

Das Fehlen einer integrierten Pause-Funktion in der WebAudio-API scheint mir ein großes Versehen zu sein. Möglicherweise wird dies in Zukunft mit der geplanten MediaElementSource möglich sein, mit der Sie ein Element (das Pausieren unterstützt) mit Web Audio verbinden können. Im Moment scheinen die meisten Problemumgehungen auf der Erinnerung an die Wiedergabezeit zu beruhen (wie in der Antwort von imbrizi beschrieben). Solch eine Problemumgehung hat Probleme beim Loopen von Sounds (funktioniert die Implementierungsschleife lückenlos oder nicht?) Und wenn Sie das playbackRate von Sounds dynamisch ändern können (da beide das Timing beeinflussen). Eine andere, ebenso hack-ische und technisch falsche, aber viel einfachere Problemumgehung, die Sie verwenden können, ist:

%Vor%

Leider ist 0 kein gültiger Wert für playbackRate (der den Ton tatsächlich pausiert). Für viele praktische Zwecke ist jedoch ein sehr niedriger Wert wie 0,000001 nahe genug, und es wird keine hörbare Ausgabe erzeugen.

    
jonas echterhoff 09.01.2014 09:29
quelle
0

UPDATE: Dies gilt nur für Chrome. Firefox (v29) implementiert die Eigenschaft MediaElementAudioSourceNode.mediaElement noch nicht.

Angenommen, Sie haben bereits die AudioContext-Referenz und Ihre Medienquelle (z. B. über AudioContext.createMediaElementSource() Methodenaufruf), können Sie MediaElement.play() und MediaElement.pause() auf Ihrer Quelle aufrufen, z. B.

%Vor%

Keine Notwendigkeit für Hacks und Workarounds, es wird unterstützt. Wenn Sie mit einem <audio> -Tag als Quelle arbeiten, sollten Sie pause nicht direkt auf dem Audio-Element in Ihrem JavaScript aufrufen, da dies die Wiedergabe stoppt.

    
Kovács Imre 27.05.2014 13:26
quelle
0

Im Jahr 2017 funktioniert ctx.currentTime gut, um den Punkt im Song zu verfolgen. Der folgende Code verwendet einen Button (songStartPause), der zwischen einem Play & Amp; Pause-Taste. Ich habe der Einfachheit halber globale Variablen verwendet. Die Variable musicStartPoint verfolgt, zu welcher Zeit Sie im Song sind. Die Musik-API verfolgt die Zeit in Sekunden.

Stellen Sie Ihren anfänglichen musicStartPoint auf 0 (Anfang des Songs)

ein %Vor%

Verwenden Sie ctx.currentTime, um die Zeit zu subtrahieren, zu der der Song endet, und hängen Sie diese Länge an die Anfangszeit des Songs an.

%Vor%

Laden / spielen Funktionen.

%Vor%

Schließlich gibt die Wiedergabefunktion dem Song vor, am angegebenen musicStartPoint zu starten (und sofort abzuspielen), und legt auch die songOnTime-Variable fest.

%Vor%

* Sidenote: Ich weiß, dass es sauberer aussehen könnte, um SongOnTime in der Click-Funktion zu setzen, aber ich denke, es ist sinnvoll, den Timecode so nah wie möglich an src.start zu hängen, genau wie wir die Pausenzeit nehmen möglichst nahe an src.stop.

    
user3597313 20.01.2017 18:07
quelle