/docs · SignalLab · Intro
Een bruikbaar tagschema voor audio-archieven
Wat je in je audiometadata moet zetten zodat downstream-tools er ook echt iets mee kunnen.
De meeste audio-archieven gaan ten onder aan hetzelfde probleem: slechte metadata. Bestanden worden geüpload als final_v2_FINAL.wav met een vage mapnaam, en een jaar later kan niemand meer iets terugvinden.
Een tagschema dat overleeft, heeft een paar harde regels en veel ruimte voor de rest. Dit is het schema dat SignalLab voor elk geïndexeerd bestand uitstuurt, en waarom elke tag zijn plek verdient.
De kerntags
Elke tag volgt het patroon namespace:value, zodat downstream-tools netjes kunnen filteren en groeperen.
content:*
De belangrijkste. voice, music, mixed, noise of silence. Dit is de tag die je editor als eerste nodig heeft, nog vóór al het andere. Is een bestand content:silence, dan hoeft niets downstream er nog naar te kijken.
format:*, sample-rate:*, channels:*, bit-depth:*
Technische feiten. Handig om op te filteren (“laat me alleen 48kHz/24-bit voice-overs zien”) en om bestanden naar de juiste pipeline te routeren (“gecomprimeerde bestanden gaan eerst door een her-encode-stap”).
brightness:*, dynamics:*
Buckets voor spectraal en dynamisch karakter: dark/balanced/bright/very-bright en flat/compressed/modern/dynamic. Die zijn nuttig voor zoeken én voor downstream-verwerkingsbeslissingen. Een voice-over met brightness:very-bright heeft waarschijnlijk een de-esser nodig.
issue:*
De meest bruikbare familie. issue:clipping, issue:noisy, issue:dc-offset, issue:lots-of-silence. Die koppelen direct aan QA-workflows: “laat elk bestand met issue:clipping bij ingest falen” is een regel van één regel.
hint:*
Zachtere signalen. hint:has-headroom, hint:loud, hint:mono-content-in-stereo. Die zijn voor tools die context willen, maar er niet op zouden moeten falen.
Wat het schema bewust niet bevat
- Stemmingstags (
happy,melancholic, enz.). Die zijn onbetrouwbaar op basis van het signaal alleen en zetten je vast in een gecontroleerd vocabulaire dat slecht veroudert. - Genretags. Hetzelfde probleem, maar erger. Genreclassificatie is een taak voor de gebruikerskant, niet voor de metadatalaag.
- Sprekeridentiteit. Persoonlijk identificerend. Hoort opt-in te zijn en in een aparte namespace te leven.
- Vrije-tekstbeschrijvingen. Heerlijk voor mensen, vreselijk voor downstream-automatisering.
De discipline is: tag alleen wat betrouwbaar berekend én betrouwbaar geconsumeerd kan worden. De rest hoort thuis in een door mensen samengestelde laag of in de gebruikersgerichte app, niet in het schema.
Een uitgewerkt voorbeeld
Voor een podcastinterview van 12 minuten op 48k/16-bit stereo:
content:voice
content-confidence:0.82
format:audio/wav
sample-rate:48000
channels:stereo
bit-depth:16-bit
brightness:balanced
dynamics:modern
duration:720
peak:-2.1dB
rms:-19.4dB
noise-floor:-52.1dB
hint:has-headroom
Twaalf tags. Op elke kun je zoeken, op elke kun je filteren, elke werd automatisch berekend. Geen “interview”, geen “Alex_and_Sara_episode_42”, geen “leuke aflevering maar de kamer klinkt raar”. Die horen in je CMS.
Waarom dit ertoe doet
Audio is een ellendig formaat om doorheen te grep’en. De enige reden dat een audio-archief verder schaalt dan een paar duizend bestanden, is de metadatalaag. Een schema als dit is precies wat een downstream-editor laat zeggen: “Laat me elk voice-content-bestand onder de vijf minuten, geen clipping, brightness balanced, opgenomen sinds maart.” Zonder dat vraag je iemand om te gaan luisteren.
Gerelateerd
More in SignalLab docs
- Practical
Streaming clippingdetectie op schaal
Clipping in audio detecteren tijdens het inladen, zonder het hele bestand te decoderen.
- Deep
Sprekerwisseling-segmentatie: de pragmatische stack
Diarisatie is een lastig ML-probleem. Sprekerwisseling-segmentatie, de goedkope variant, is voldoende opgelost om overal te gebruiken.