2013-02-16 10 views
5

Ich versuche, ein benutzerdefiniertes Panning-Steuerelement mit der Web Audio API zu erstellen, aber ich kann keinen Ton aus dem richtigen Kanal mit den Channel-Splittern und Merger-Knoten erhalten:Web Audio: Kein Ton im rechten Kanal

var context = new webkitAudioContext(), 
    destination = context.destination, 
    osc = context.createOscillator(), 
    gainL = context.createGainNode(), 
    gainR = context.createGainNode(), 
    splitter = context.createChannelSplitter(2), 
    merger = context.createChannelMerger(2); 

osc.frequency.value = 500; 

osc.connect(splitter); 

splitter.connect(gainL, 0); 
splitter.connect(gainR, 1); 

gainL.connect(merger, 0, 0); 
gainR.connect(merger, 0, 1); 

osc.noteOn(0); 

gainL.gain.value = 0.1; 
gainR.gain.value = 0.5; 

osc.noteOff(2); 

merger.connect(destination); 

Fehle ich etwas offensichtlich hier? Es gibt eine JSBin-Vorschau des obigen Codes hier: http://jsbin.com/ayijoy/1/

Ich verwende Chrome v24.0.1312.57, nur für den Fall, dass es von Nutzen ist.

Antwort

2

Meine beste Schätzung ist, dass dies passiert, weil der Oszillator ein Monosignal ausgibt. Versuchen Sie es mit einer Stereoquelle und Sie sollten wahrscheinlich mehr Glück haben.

Edit: Hier können Sie ein "Mono" -Signal schwenken (den Splitter umgehen, da kein Stereosignal zu splitten ist, und den Oszillator direkt an die beiden Verstärkungen anschließen. Dann verbinden Sie die beiden Monosignale nach der Fusion Einstellen der Verstärkung für jeden Kanal) http://jsbin.com/ayijoy/16/

+0

Das ist eine nette Lösung, danke; Es stellt sich heraus, dass mir etwas offensichtlich fehlte. – SquareFeet

+0

Aber ich dachte, das Mischen von Mono -> Stereo würde automatisch durchgeführt, wenn eine Monoquelle an ein Stereoziel angeschlossen wird. Die Spezifikation ist hier nicht so klar: http://www.w3.org/TR/webaudio/#UpMix Erwägen Sie, einen Oszillator direkt an den Zielknoten anzuschließen: Der Sound wird sowohl in L- als auch in R-Kanälen gespielt, was auf ein Signal hindeutet Auto-Up-Mix; Ich hätte gedacht, dass das gleiche in meinem Frage-Szenario passieren würde ... – SquareFeet

+0

Im Allgemeinen passiert Upmixing automatisch. Mit dem Splitter-Knoten können Sie jedoch direkt mit dem Signal umgehen, was nicht der Fall ist. Aus der Spezifikation: "[AudioSplitterNode] hat einen einzigen Eingang und eine Anzahl von" aktiven "Ausgängen, die der Anzahl der Kanäle im Audio-Eingangsstrom entspricht. ... Alle Ausgänge, die nicht "aktiv" sind, geben Stille aus und sind normalerweise nicht mit irgendetwas verbunden. " – cwilso

Verwandte Themen