Eine WAV-Datei ohne Neukodierung schneiden
Schneidet einen Zeitbereich aus einer PCM- oder IEEE-Float-WAV und schreibt ihn ohne Decodierung, Resampling oder Neukodierung in eine neue WAV-Datei. Jedes behaltene Samplebyte bleibt unverändert und die Datei verlässt den Tab nie.
PCM- oder IEEE-Float-WAV, einschließlich RF64 und WAVE_FORMAT_EXTENSIBLE. Die Datei bleibt in diesem Tab.
So funktioniert es
Verlustfrei bedeutet hier: Samples kopieren
PCM- und Float-WAV speichern vollständige Abtastframes mit fester Breite. Wenn ein Schnitt genau an Framegrenzen liegt, muss das Audio weder decodiert noch neu berechnet werden. Der ausgewählte Bytebereich kann direkt in einen neuen Container kopiert werden.
Das unterscheidet diesen Vorgang von einem MP3-Schnitt. Komprimierte Formate haben eigene Frame- und Codec-Regeln. Eine umbenannte MP3 wird deshalb nicht zu einer WAV und wird anhand ihrer ersten Bytes abgelehnt.
Von Sekunden zu Frames
start_frame = round(start_seconds × sample_rate)
end_frame = round(end_seconds × sample_rate)
Bei 48.000 Abtastframes pro Sekunde ist ein Frame nur rund 0,0208 Millisekunden lang. Die Rundung kann den gewünschten Punkt daher höchstens um einen halben Frame verschieben. Anschließend werden nur vollständige Frames kopiert, damit alle Kanäle zusammenbleiben.
Warum ein neuer Container entsteht
Die behaltenen Samplebytes sind identisch, die vollständige Datei aber nicht. RIFF- und data-Längen müssen zur kürzeren Aufnahme passen. Bei Float-Audio wird außerdem die neue Framezahl in einem fact-Chunk geschrieben.
Marker, Schleifen, Artwork und Kommentare werden nicht übernommen. Vor allem zeitbezogene Metadaten würden sonst weiterhin Stellen der alten Aufnahme beschreiben. Die Ausgabe enthält deshalb bewusst nur das Audioformat und den gewählten Audiobereich.
Grenzen
Ein beschädigter data-Chunk, ein unvollständiger Frame oder eine widersprüchliche Blockausrichtung wird nicht still repariert. Das Werkzeug verweigert den Schnitt, statt einen vermeintlich gültigen Download mit verschobenen Kanälen oder falschen Samplegrenzen zu erzeugen.
So wird es gemacht
- Prüfe, ob die ersten zwölf Bytes eine Little-Endian-RIFF- oder RF64-WAVE-Datei kennzeichnen. Big-Endian-RIFX wird abgelehnt, weil ein Kopieren in einen Little-Endian-Container die Samples verändern würde.
- Laufe unter Beachtung von Füllbytes durch die RIFF-Chunks, bis fmt und data gefunden sind. Bei RF64 stammt die 64-Bit-Audiolänge aus dem ds64-Chunk.
- Lies Kanalzahl, Abtastrate, Blockausrichtung und Bittiefe. Bei WAVE_FORMAT_EXTENSIBLE unterscheidet die Unterformat-GUID zwischen PCM und IEEE-Float.
- Prüfe, dass das Format eine feste Samplebreite hat und die Blockausrichtung zu Kanälen und Bytes pro Sample passt. Komprimierte oder widersprüchliche Dateien werden nicht geraten.
- Teile die data-Länge durch die Blockausrichtung, um die Zahl vollständiger Abtastframes und daraus die Aufnahmedauer zu erhalten.
- Multipliziere Start- und Endzeit mit der Abtastrate und runde auf vollständige Frames. Ein Ende hinter der Aufnahme wird begrenzt; ein Start am oder hinter dem Ende wird abgelehnt.
- Kopiere den gewählten Framebereich in 4-MB-Stücken in eine neue WAV, übernimm den Formatblock und berechne RIFF- und data-Größen neu.
- Lasse Metadaten weg, deren Zeitangaben zur ungeschnittenen Aufnahme gehören, und biete die neue WAV zum Download an.
Wovon es ausgeht
- Unterstützt werden PCM und IEEE-Float in RIFF oder RF64, einschließlich WAVE_FORMAT_EXTENSIBLE. Komprimierte WAV-Formate und RIFX erfordern Decodierung oder Byte-Umsortierung und werden abgelehnt.
- Eine Zeit kann zwischen zwei Abtastframes liegen und wird auf den nächsten vollständigen Frame gerundet. Bei 44,1 kHz beträgt die größte Abweichung etwa 0,011 Millisekunden.
- Ein Ende hinter der Datei wird auf den letzten vollständigen Frame begrenzt. Bleibt nach dem Start kein Audio, wird keine leere WAV erzeugt.
- Abtastrate, Kanäle, Bittiefe, Formatblock und die behaltenen Samplebytes werden kopiert. Es gibt keine Pegeländerung, Überblendung, Dither- oder Codec-Stufe.
- Metadaten werden absichtlich nicht kopiert. Marker, Schleifen und Broadcast-Zeitreferenzen würden sonst auf die alte Zeitachse verweisen.
- Der data-Chunk muss aus vollständigen Frames bestehen und in die Datei passen. Ein angeschnittener letzter Frame gilt als beschädigt.
- Eingabe und Ausgabe liegen vorübergehend gleichzeitig im Arbeitsspeicher. Deshalb ist die Eingabe auf 256 MB begrenzt.
Fragen
Verringert das Schneiden die Audioqualität?
Nein, nicht bei den unterstützten PCM- und IEEE-Float-Dateien. Vollständige Abtastframes werden Byte für Byte kopiert. Es gibt keine Codec-Generation, kein Resampling, keine Pegeländerung und keinen Dither.
Warum liegt der Schnitt minimal neben meiner eingegebenen Zeit?
Digitales Audio kann nur auf einem Abtastframe beginnen. Die Zeit wird auf den nächsten Frame gerundet; bei 48 kHz ist die maximale Abweichung nur etwa 0,010 Millisekunden.
Warum fehlen danach Marker und Kommentare?
Sie werden absichtlich weggelassen. Cue-Punkte, Schleifen und Broadcast-Zeitreferenzen beziehen sich auf die ursprüngliche Zeitachse und wären in der gekürzten Datei an der falschen Stelle.
Verlässt die WAV-Datei beim Schneiden meinen Browser?
Nein. Ein Worker dieses Tabs liest den Header und kopiert die ausgewählten Bytes lokal. Erst danach bietet der Browser die neue Datei als lokalen Download an.