2013-09-06 13 views
6

Ich schreibe etwas wie ein Web-Audio-Editor, und ich denke, ich bin kurz davor, die Grundlagen zu beenden. Ich kann eine Audiodatei abspielen und anhalten, aber wenn ich versuche, die Spielmethode erneut aufzurufen, wird es nicht funktionieren, obwohl sich die Parameter nicht geändert haben.WebAudio spielt nicht nach Stop (0)

Ich wäre froh zu sehen, jemand in mein Problem zu sehen, wie ich nicht sehen kann, warum es nicht funktioniert, wenn ähnlicher Code in anderen Projekten tut. Leider kann ich keine jsfiddle erstellen, da ich eine externe mp3-Datei laden müsste und es scheint, dass ich das nicht darf. Aber ich habe das Javascript here und die entsprechende HTML-Datei here eingefügt.

Alles, was Sie brauchen, ist ein Server, auf den Sie die Dateien hochladen können und ein mp3 drauf. Alternativ könnten Sie this link verwenden, aber ich werde die Dateien schließlich löschen.

Antwort

8

Sie können start() nicht mehrmals über eine AudioBufferSourceNode aufrufen. Sie sind nur einmal zu verwenden.

Wirklich die einzige Möglichkeit, dies zu tun ist, ein neues AudioBufferSourceNode aus dem zugrunde liegenden AudioBuffer jedes Mal erstellen, wenn Sie die Wiedergabe starten müssen.

+0

Danke, ich werde das versuchen. Was wäre der schnellste Weg, um alle Eigenschaften in einen neuen AudioBufferSourceNode zu kopieren? Gibt es einen Grund, warum es so gemacht werden muss? Ich kann mir keine vorstellen, die wirklich Sinn machen würden. –

+1

Alles, was Sie wirklich tun müssen, ist sagen 'var newSource = context.createBufferSource(); newSource.buffer = oldAudioBuffer; '. Warum es so funktioniert ... nicht wirklich sicher. Ich vermute, dass es mit Speicher/Leistung zu tun hat. –

0

Sie können es auch laufen lassen und es einfach vom Gain-Node trennen, und der Oszillator würde wahrscheinlich nur schwach/leise eine Wellenform erzeugen.