Signatur
Beschreibung
Die schreibgeschützte Eigenschaft numberOfInputs eines AudioNode gibt als ganze Zahl an, wie viele Eingänge der Knoten hat. An diese Eingänge können andere Knoten mit connect() angeschlossen werden. Den Wert legt der Knotentyp fest oder man bestimmt ihn beim Erzeugen des Knotens. Danach lässt er sich nicht mehr ändern.
Typische Werte:
- 0 bei Quellknoten wie
OscillatorNode,AudioBufferSourceNode,ConstantSourceNode,MediaElementAudioSourceNodeundMediaStreamAudioSourceNode. Diese Knoten erzeugen selbst ein Signal. - 1 bei den meisten Verarbeitungsknoten wie
GainNode,BiquadFilterNode,AnalyserNode,DelayNode,ChannelSplitterNodeund beimAudioDestinationNode(context.destination). - Frei wählbar beim
ChannelMergerNode(Standard: 6, festgelegt übercreateChannelMerger(n)) und beimAudioWorkletNode(OptionnumberOfInputs, Standard: 1).
Die Eigenschaft ist vor allem nützlich, wenn man Audiographen generisch aufbaut, prüft oder darstellt, etwa in Editoren für Knotengraphen oder in Hilfsfunktionen. Damit lässt sich vorher prüfen, ob ein Eingangsindex für source.connect(ziel, ausgang, eingang) gültig ist. Auch ob ein Knoten überhaupt ein Ziel sein kann, lässt sich so feststellen.
Rückgabewert
unsigned long): die Anzahl der Eingänge des Knotens.Beispiele
Eingänge verschiedener Knotentypen abfragen
const ctx = new AudioContext();
const osc = ctx.createOscillator();
const gain = ctx.createGain();
const merger = ctx.createChannelMerger(4);
console.log('Oscillator:', osc.numberOfInputs);
console.log('Gain:', gain.numberOfInputs);
console.log('Merger:', merger.numberOfInputs);
console.log('Destination:', ctx.destination.numberOfInputs);
Eingangsindex vor connect() prüfen
const ctx = new OfflineAudioContext(2, 44100, 44100);
const links = ctx.createOscillator();
const rechts = ctx.createOscillator();
const merger = ctx.createChannelMerger(2);
const sichereVerbindung = (quelle, ziel, eingang = 0) => {
if (ziel.numberOfInputs === 0) {
throw new Error(`${ziel.constructor.name} hat keine Eingänge`);
}
if (eingang >= ziel.numberOfInputs) {
throw new RangeError(`Eingang ${eingang} existiert nicht (max. ${ziel.numberOfInputs - 1})`);
}
quelle.connect(ziel, 0, eingang);
};
sichereVerbindung(links, merger, 0);
sichereVerbindung(rechts, merger, 1);
try {
sichereVerbindung(links, merger, 2);
} catch (e) {
console.log(e.message);
}
Knoten im Audiographen beschreiben
const ctx = new AudioContext();
const beschreibe = (node) => ({
typ: node.constructor.name,
eingaenge: node.numberOfInputs,
ausgaenge: node.numberOfOutputs,
rolle: node.numberOfInputs === 0 ? 'Quelle'
: node.numberOfOutputs === 0 ? 'Ziel'
: 'Verarbeitung'
});
const knoten = [
ctx.createBufferSource(),
ctx.createBiquadFilter(),
ctx.createChannelSplitter(2),
ctx.destination
];
console.table(knoten.map(beschreibe));
// Wichtig · Fallstricke
- Eingänge sind keine Kanäle: Ein einzelner Eingang kann mehrere Kanäle führen (z. B. Stereo). Wie viele Kanäle es sind, bestimmen
channelCountundchannelCountMode.numberOfInputszählt nur die Anschlusspunkte. - Nur lesbar: Eine Zuweisung wie
node.numberOfInputs = 2wird still ignoriert, im Strict Mode wirft sie einenTypeError. Die Anzahl muss beim Erzeugen festgelegt werden, etwa mitcreateChannelMerger(n)odernew AudioWorkletNode(ctx, name, { numberOfInputs: n }). - Ist beim Aufruf von
connect(ziel, ausgang, eingang)der Eingangsindex nicht kleiner alsziel.numberOfInputs, wirft der Browser einenIndexSizeError(DOMException). - An einen Eingang lassen sich mehrere Quellen anschließen. Ihre Signale werden dann automatisch addiert. Für einfaches Mischen braucht man also keine zusätzlichen Eingänge.
- Die Eigenschaft funktioniert in allen modernen Browsern. Sehr alte WebKit-Versionen kannten nur
webkitAudioContextmit Präfix.