Audio Knipper

Knip een stuk uit een audiobestand in je browser — sleep het start-/eindbereik over een golfvorm, bekijk de selectie vooraf, download als WAV. Er wordt niets geüpload.

213 weergaven

Hoe browsergebaseerd audio knippen werkt

Deze tool stuurt je bestand nooit ergens naartoe — hij gebruikt de decodeAudioData()-functie van de Web Audio API om de gecomprimeerde audio (MP3, AAC, OGG, wat de codecs van je browser ook ondersteunen) uit te pakken tot een ruwe AudioBuffer: een array van zwevendekomma-samplewaarden tussen -1 en 1, één per kanaal. Deze decodeerstap is dezelfde stap die een mediaspeler intern uitvoert voordat hij daadwerkelijk geluid kan afspelen — het verschil hier is dat de gedecodeerde samples toegankelijk blijven in JavaScript in plaats van rechtstreeks naar de luidsprekers te gaan, en dat maakt bewerken mogelijk. Eén detail om te weten: decodeAudioData() decodeert naar de eigen samplerate van de AudioContext — doorgaans 44,1kHz of 48kHz, afhankelijk van de audiohardware van je apparaat — in plaats van naar de oorspronkelijke samplerate van het bronbestand, en resamplet automatisch als deze verschillen. Dit is standaard, transparant gedrag dat in de audiopijplijn van elke browser is ingebouwd, geen bijzonderheid van deze tool, en het geldt evengoed voor een 8kHz-spraakopname als voor 96kHz-studioaudio.

Knippen is, zodra de audio is gedecodeerd, niets meer dan array-slicing: vermenigvuldig de geselecteerde start- en eindtijden in seconden met de samplerate om sample-indexen te krijgen, en kopieer vervolgens alleen de samples tussen die twee indexen naar een nieuwe, kortere buffer. Er is geen hercodering van de audio-inhoud, geen kwaliteitsverlies, geen hercompressie-artefacten — de golfvorm binnen het geselecteerde bereik wordt byte voor byte gekopieerd in gedecodeerde vorm.

Het golfvormvoorbeeld wordt getekend door de gedecodeerde sample-array één keer te doorlopen, deze te verdelen in evenveel emmers als er horizontale pixels zijn, en de minimum- en maximumsamplewaarde in elke emmer als verticale balk te plotten — dezelfde piek-envelopetechniek die elke audio-editor gebruikt, omdat het plotten van elk individueel sample (vaak 44.100 per seconde) zowel verspilling zou zijn als visueel niet te onderscheiden van de min/max-envelope bij gebruikelijke schermresoluties.

Waarom de uitvoer WAV is, geen MP3

Het geknipte resultaat wordt geëxporteerd als WAV — een ongecomprimeerde PCM-container die de ruwe sampledata gewoon teruggeeft met een standaard 44-byte RIFF-header die samplerate, bitdiepte en kanaalaantal beschrijft. Dit is een bewuste, eerlijke afweging: coderen naar een gecomprimeerd formaat zoals MP3 vereist een volledige psychoakoestische encoder (hetzelfde soort complexe algoritme dat werd gebruikt om het bestand oorspronkelijk te maken), die browsers niet native aanbieden en waarvoor een grote extra bibliotheek geladen zou moeten worden. WAV garandeert daarentegen nul generatieverlies — tien keer achter elkaar knippen tast de audio nooit aan, in tegenstelling tot een lossy MP3 herhaaldelijk opnieuw opslaan. Als achteraf een kleiner bestand nodig is, kan de resulterende WAV met elke standaard audiotool opnieuw worden gecomprimeerd.

  • De geëxporteerde WAV gebruikt de samplerate van de AudioContext (meestal 44,1kHz of 48kHz) en 16-bit diepte, ongeacht de oorspronkelijke samplerate of bitdiepte van het bronbestand — dit komt door hoe decodeAudioData() werkt, niet door een beperking van het knippen zelf.
  • Zeer lange bestanden (ruwweg meer dan 30-60 minuten) kunnen aanzienlijk browsergeheugen gebruiken, omdat de volledige gedecodeerde buffer als zwevendekomma-samples in het RAM wordt gehouden vóór het knippen.
  • De golfvorm wordt alleen getekend vanuit het eerste audiokanaal; stereo-inhoud wordt op alle kanalen gelijk geknipt, alleen het voorbeeld wordt vereenvoudigd tot één lijn.

Veelgestelde vragen

Waarom wordt het geknipte bestand gedownload als WAV in plaats van MP3?

MP3-codering vereist een volledig psychoakoestisch compressiealgoritme dat browsers niet native aanbieden. WAV schrijft de al gedecodeerde samples gewoon lossless terug, zonder kwaliteitsverlies en zonder extra bibliotheek — als achteraf een kleiner bestand nodig is, comprimeer de WAV dan apart.

Verliest knippen audiokwaliteit?

De knip zelf niet — die kopieert alleen een aaneengesloten bereik van gedecodeerde samples naar een nieuwe buffer, zonder hercodering of compressie. De enige kanttekening is dat decodeAudioData() decodeert naar de samplerate van de audiohardware van de browser (doorgaans 44,1kHz of 48kHz) en automatisch resamplet als het bronbestand een andere rate gebruikte — dit is standaard browsergedrag, niet iets specifiek voor knippen, en is voor normaal luisteren vrijwel niet te merken.

Wordt mijn audiobestand naar een server geüpload?

Nee. Decoderen, golfvormweergave, afspeelvoorbeeld en de uiteindelijke knip gebeuren allemaal lokaal in je browser via de Web Audio API — het bestand verlaat nooit je apparaat.

Welke audioformaten kan ik uploaden?

Welke formaten de ingebouwde decoder van je browser ook ondersteunt — MP3, WAV, OGG en AAC/M4A werken in vrijwel alle moderne browsers, omdat dezelfde decodeAudioData()-functie die een browser gebruikt om audio af te spelen, ook deze tool aandrijft.

Kan ik de selectie vooraf beluisteren voordat ik download?

Ja — de knop Selectie Afspelen speelt precies het bereik tussen de start- en eindmarkeringen af, met dezelfde bufferoffset die de uiteindelijke knip zal gebruiken, dus wat je hoort komt overeen met wat je downloadt.

Reacties

Nog geen reacties — schrijf de eerste!

Vergelijkbare tools