Start · Sprachen · JavaScript · Referenz · new RTCDTMFToneChangeEvent()

new RTCDTMFToneChangeEvent()

Methode

Erzeugt ein neues <code>RTCDTMFToneChangeEvent</code>, das den Beginn oder das Ende eines DTMF-Tons bei einem <code>RTCDTMFSender</code> beschreibt.

seit JavaScript Baseline: alle modernen Browser (Chrome 27+, Firef Kategorie: webapi

Signatur

new RTCDTMFToneChangeEvent(type, options)

Beschreibung

Der Konstruktor RTCDTMFToneChangeEvent() erzeugt ein Ereignisobjekt vom Typ RTCDTMFToneChangeEvent. Im Normalfall erzeugt der Browser diese Ereignisse selbst: Ein RTCDTMFSender löst das Ereignis tonechange jedes Mal aus, wenn er über eine WebRTC-Verbindung einen DTMF-Ton (Telefon-Wähltöne wie 0–9, *, #, A–D) zu senden beginnt, und ein letztes Mal mit leerer Zeichenkette, sobald der gesamte Tonpuffer abgearbeitet ist.

Den Konstruktor selbst braucht man vor allem für Tests, Mocks und zum Simulieren von DTMF-Ereignissen, z. B. um eine Telefon-Tastatur-Oberfläche ohne echte Peer-Verbindung zu prüfen. Das erzeugte Ereignis kann man mit dispatchEvent() an ein beliebiges EventTarget senden.

Die wichtigste Eigenschaft ist tone: Sie enthält das Zeichen des gerade gestarteten Tons oder eine leere Zeichenkette "", wenn die Tonfolge beendet ist.

Parameter

Name Typ Default Beschreibung
$type Pflicht string Name des Ereignisses, üblicherweise "tonechange". Groß-/Kleinschreibung wird beachtet.
$options object {} Optionales Wörterbuch. Neben den Feldern aus EventInit (bubbles, cancelable, composed) gibt es:
  • tone (string, Standard ""): das Zeichen des Tons, der gerade gestartet wurde, oder "" für das Ende der Tonfolge.

Rückgabewert

Typ
RTCDTMFToneChangeEvent
Beschreibung
Ein neues RTCDTMFToneChangeEvent-Objekt, dessen Eigenschaft tone den übergebenen Wert enthält.

Beispiele

Ereignis erzeugen und auslesen

const event = new RTCDTMFToneChangeEvent('tonechange', { tone: '5' });

console.log(event.type);
console.log(event.tone);
console.log(event instanceof Event);
tonechange 5 true

Tastatur-UI testen ohne echte Verbindung

// Ein einfaches EventTarget ersetzt den RTCDTMFSender im Test
const fakeSender = new EventTarget();
const anzeige = [];

fakeSender.addEventListener('tonechange', (e) => {
  if (e.tone === '') {
    console.log('Wählen beendet:', anzeige.join(''));
  } else {
    anzeige.push(e.tone);
  }
});

for (const tone of ['1', '2', '3', '#', '']) {
  fakeSender.dispatchEvent(new RTCDTMFToneChangeEvent('tonechange', { tone }));
}
Wählen beendet: 123#

Echter Einsatz: tonechange eines RTCDTMFSender

const pc = new RTCPeerConnection();
const stream = await navigator.mediaDevices.getUserMedia({ audio: true });
const [track] = stream.getAudioTracks();
const sender = pc.addTrack(track, stream);

const dtmf = sender.dtmf;
dtmf.ontonechange = (event) => {
  console.log(event.tone ? `Sende Ton: ${event.tone}` : 'Alle Töne gesendet');
};

// Erst nach aufgebauter Verbindung möglich (canInsertDTMF === true)
if (dtmf?.canInsertDTMF) {
  dtmf.insertDTMF('1234#', 100, 70);
}
Sende Ton: 1 Sende Ton: 2 Sende Ton: 3 Sende Ton: 4 Sende Ton: # Alle Töne gesendet

// Wichtig · Fallstricke

  • Ein manuell erzeugtes und mit dispatchEvent() ausgelöstes Ereignis hat isTrusted === false und sendet keinen echten Ton. Zum Senden dient ausschließlich RTCDTMFSender.insertDTMF().
  • Das Ende einer Tonfolge wird durch tone === \"\" signalisiert. Prüfen Sie im Handler immer auf die leere Zeichenkette, sonst wird das Abschlussereignis wie ein Ton behandelt.
  • Ein Komma , in der Tonfolge steht für eine Pause von 2 Sekunden und wird ebenfalls als tone gemeldet.
  • RTCDTMFSender.canInsertDTMF ist nur bei aufgebauter Verbindung und einem Audio-Track true; sender.dtmf kann bei Video-Tracks null sein.
  • Kompatibilität: Chrome, Edge, Firefox und Safari (ab 13.1) unterstützen die API. In Node.js gibt es sie ohne WebRTC-Bibliothek nicht.