Start · Sprachen · JavaScript · Referenz · Int16Array

Int16Array

Klasse

Typisiertes Array für 16-Bit-Ganzzahlen mit Vorzeichen (−32768 bis 32767) in der Byte-Reihenfolge der Plattform.

seit JavaScript ES2015 Kategorie: core

Signatur

class Int16Array extends TypedArray

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 ArrayBuffer referenzieren.

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

Typ
Int16Array
Beschreibung
Eine neue 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
100 -500 32767 -32768 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);
Int16Array(8) [0, 4, 8, 12, 16, 21, 25, 29] Bytes: 16

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]);
256 -1 [10, 20, -30, 32000]

// 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.