Web Audio startet und stoppt den Oszillator und startet ihn erneut

8

Ich versuche einen Ton zu starten und zu stoppen. Und das funktioniert. Aber ich kann den Ton nicht mehr starten.

Muss ich wirklich nochmal einen Oszillator machen? Dies scheint nur äußerst unintelligent zu sein. Es muss einen besseren Weg geben.

Das ist alles, was ich habe:

%Vor%

Calling noteOn wiederum tut nichts. Warum? Ist jenseits von mir.

Ich habe auch versucht, die Lautstärke einzustellen, oder im Kontext der Web Audio Leute, "gain", gleich Null. Aber aus irgendeinem Grund macht ein Gewinn von Null Ton. Welcher Wert der Verstärkung würde keinen Ton erzeugen?

Mann, ich kann nicht glauben, wie schwierig das ist: /

    
brettgag 07.03.2013, 00:40
quelle

2 Antworten

7

Eigentlich müssen Sie ja einen neuen Oszillatorknoten erstellen. Die API wurde entwickelt und optimiert, um mit diesem Muster zu arbeiten.

Das Trennmuster in Taoists Code ist im Grunde genommen eine verschlungene Art, einen neuen Oszillator zu erzeugen (dies geschieht jedes Mal, wenn oscOn ausgeführt wird). Es ruft noteOff nie explizit auf dem alten Oszillator auf, der nicht verbunden ist, so dass es möglicherweise immer noch im Hintergrund läuft (nicht sicher, wie Webaudio damit umgeht), obwohl es nicht hörbar ist, da es von der Audiokette getrennt ist. Es könnte also möglicherweise Oszillatoren im Hintergrund stapeln, die CPU laufen lassen und entladen.

Hier ist der gleiche Code, obwohl noteOff () richtig verwendet wird. Ссылка

Hier ist der gleiche Code, obwohl er mit Hilfe des Gain-Knotens angepasst wurde, um den Oszillator zu steuern und somit immer nur denselben Oszillator zu verwenden (obwohl dies nicht empfohlen wird, besser einen neuen Oszillator für jede Note zu erstellen, denke ich ) Ссылка

Bearbeitung April 2015
Da die Code-Beispiele im Cyberspace verloren gegangen sind, hier ist ein Tutorial, das ich auf Oszillatoren geschrieben habe, das Code-Beispiele enthält, die die One-Shot-Natur von Oszillatoren zeigen. Es ist nicht genau der gleiche Code wie der oben erwähnte, aber es zeigt das gleiche Konzept. ​​Ссылка - das Wesentliche davon ist das:

%Vor%     
Oskar Eriksson 07.03.2013 11:19
quelle
3

Sie müssen die Methode .disconnect () verwenden (es sei denn, die Spezifikation wurde kürzlich geändert).

Ich habe das hier geschrieben:

Ссылка

BEARBEITEN

Diese Antwort ist alt, als ich gerade versuchte zu lernen, wie die Web Audio API funktioniert. Sie müssen die Verbindung nicht trennen.

    
William 07.03.2013 00:50
quelle

Tags und Links