Signatur
Beschreibung
Int16Array ist ein typisiertes Array (TypedArray), das eine Sequenz von 16-Bit-Ganzzahlen mit Vorzeichen im Arbeitsspeicher speichert. Jedes Element belegt genau 2 Bytes. Der Wertebereich reicht von −32768 bis 32767. Werte außerhalb dieses Bereichs werden durch Modulo-Arithmetik (Wraparound) auf diesen Bereich abgebildet.
Typische Einsatzgebiete sind Audio-Verarbeitung (z. B. PCM-Audiodaten), Netzwerkprotokolle, Binärdatei-Parsing sowie überall dort, wo kompakte Speicherung von Integer-Daten mit kontrollierter Bytegröße erforderlich ist. Im Gegensatz zu normalen JavaScript-Arrays erlaubt Int16Array keine gemischten Typen und bietet eine direkte Sicht auf einen ArrayBuffer.
Die Byte-Reihenfolge (Endianness) richtet sich nach der jeweiligen Plattform – auf den meisten modernen Systemen ist das Little-Endian. Für plattformunabhängige Byte-Reihenfolge sollte stattdessen DataView verwendet werden.
- Elementgröße: 2 Bytes pro Element (
Int16Array.BYTES_PER_ELEMENT === 2) - Wertebereich: −32768 bis 32767
- Geteilter Speicher: Mehrere TypedArrays können denselben
ArrayBufferreferenzieren.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $length | number | Anzahl der Elemente. Erzeugt einen neuen ArrayBuffer der Größe length × 2 Bytes, alle Elemente mit 0 initialisiert. |
|
| $typedArray | TypedArray | Ein bestehendes typisiertes Array, dessen Werte in das neue Int16Array konvertiert und kopiert werden. |
|
| $object | object|Array | Ein iterierbares oder Array-ähnliches Objekt. Die Werte werden konvertiert und in das neue Int16Array kopiert. |
|
| $buffer | ArrayBuffer|SharedArrayBuffer | Ein bestehender ArrayBuffer, auf den das Int16Array als Sicht (View) verweist. |
|
| $byteOffset | number | 0 | Byte-Offset innerhalb des buffer, ab dem die Sicht beginnt. Muss ein Vielfaches von 2 sein. |
| $length | number | Anzahl der Elemente innerhalb des buffer (ab byteOffset). Wird weggelassen, erstreckt sich die Sicht bis zum Ende des Puffers. |
Rückgabewert
Int16Array-Instanz, die entweder einen neu erzeugten oder einen bestehenden ArrayBuffer referenziert.Beispiele
Grundlegende Erstellung und Manipulation
// Neues Int16Array mit 4 Elementen
const arr = new Int16Array(4);
arr[0] = 100;
arr[1] = -500;
arr[2] = 32767; // Maximalwert
arr[3] = 32768; // Wraparound → -32768
console.log(arr[0]); // 100
console.log(arr[1]); // -500
console.log(arr[2]); // 32767
console.log(arr[3]); // -32768 (Wraparound)
console.log(Int16Array.BYTES_PER_ELEMENT); // 2
PCM-Audiodaten simulieren und verarbeiten
// PCM-Audiodaten: 8 Samples als Int16Array
const sampleRate = 44100;
const frequency = 440; // Hz (Kammerton A)
const numSamples = 8;
const pcm = new Int16Array(numSamples);
for (let i = 0; i < numSamples; i++) {
// Sinus-Welle skaliert auf Int16-Bereich
pcm[i] = Math.round(Math.sin((2 * Math.PI * frequency * i) / sampleRate) * 32767);
}
console.log(pcm);
// Int16Array-Größe in Bytes
console.log('Bytes:', pcm.byteLength);
Gemeinsamer ArrayBuffer mit DataView
// Gemeinsamer Speicher zwischen Int16Array und DataView
const buffer = new ArrayBuffer(8);
const int16 = new Int16Array(buffer);
const view = new DataView(buffer);
int16[0] = 256;
int16[1] = -1;
// DataView liest Big-Endian
console.log(view.getInt16(0, true)); // Little-Endian: 256
console.log(view.getInt16(2, true)); // Little-Endian: -1
// Aus bestehendem Array erstellen
const fromArray = new Int16Array([10, 20, -30, 32000]);
console.log([...fromArray]);
// Wichtig · Fallstricke
Endianness: Int16Array verwendet die native Byte-Reihenfolge der Plattform (meistens Little-Endian auf x86/x64). Beim Austausch von Binärdaten über Netzwerke (Big-Endian) sollte DataView mit explizitem Endianness-Parameter verwendet werden.
Wertebereich und Wraparound: Zahlen außerhalb von −32768 bis 32767 werden still abgeschnitten (Modulo-Arithmetik), ohne Fehler oder Warnung. Gleitkommazahlen werden vor der Zuweisung zu Ganzzahlen umgewandelt (Nachkommastellen abgeschnitten).
Kein Lückenspeicher (No Holes): Im Gegensatz zu normalen Arrays unterstützt Int16Array keine Lücken – nicht gesetzte Elemente haben immer den Wert 0.
SharedArrayBuffer: Int16Array kann auch auf einem SharedArrayBuffer basieren. In diesem Fall ist bei nebenläufigem Zugriff aus mehreren Threads (Worker) Atomics für sichere Operationen zu verwenden.