Kwaliteitscriteria voor gedigitaliseerde audio

Auteur: Rony Vissers (PACKED vzw)

Publicatiedatum: mei 2014

 

De digitaliseringsfirma die in opdracht van VIAA de audiocassettes en 1/4" reel-to-reel audiotapes digitaliseert, gebruikt een PCM (Pulse Code Modulation) signaal dat ‘verpakt’ wordt in een BWAV of BWF container (Broadcast WAVE)1. Dit zijn beide internationale standaarden die gebruikt worden door de belangrijke erfgoed- en omroeporganisaties bij audiodigitalisering.

In VIAA’s digitaliseringsprogramma voor audio zijn de codering en het containerformaat reeds vroeger vastgelegd, maar contentpartners kunnen wel nog hun voorkeur doorgeven met betrekking tot twee andere technische parameters: de bemonsteringsfrequentie en de bitdiepte.

VIAA laat standaard audiomateriaal digitaliseren naar 48 kHz/16 bits, maar biedt ook 96kHz/24 bits aan indien de content partners hier een goede motivering voor kunnen geven. Om deze keuze te vergemakkelijken lichten we hier beknopt het digitaliseringsproces en de verschillende kwaliteitsparameters toe.

 

  • 1. BWF is een extensie van WAVE, een eenvoudig bestandsformaat dat in ruime kring wordt aanvaard en gebruikt als archiveringsformaat - ook in de professionele audiosector. WAVE laat ongecomprimeerde encodering toe met behulp van linear Pulse Code Modulation (PCM). BWF onderscheidt zich van WAVE door het o.a. een set headers bevat die kunnen worden gebruikt om metadata te organiseren en te beheren. Dit kan een voordeel betekenen, maar ook een nadeel omdat het vaste karakter van de ingebedde informatie. Deze beperking van BWF kan echter worden omzeild door binnen BWF een beperkte dataset te gebruiken en andere data op te slaan in een extern databeheersysteem.

Het omzetten van analoog naar digitaal geluid impliceert een drietal stappen. Er is eerst de bemonsteren van het signaal, vervolgens het kwantificeren van de monsters en tot slot het coderen in bits en bytes.

 

Bemonsteringsfrequentie

Digitaliseren impliceert een omzetting van het continue geluid van een analoog en continu signaal naar een discreet of stapsgewijs signaal. Dit start met het zogenaamde bemonsteren van de geluidsgolf. Men gaat volgens een bepaald regelmatig tijdsinterval of frequentie meten wat de sterkte of amplitude van het signaal is. We spreken dan van een sample rate of bemonsteringsfrequentie.

 

Een schematische voorstelling van de omzetting van een analoog naar een discreet signaal.

 

Hierna gaat men de gemeten geluidssterktes kwantificeren. Een geluid heeft op een bepaald punt een sterkte van bijvoorbeeld 2, op het volgende punt van 3 en vervolgens 3,5 enzovoort. Deze gemeten waarden worden vervolgens omgezet in een binaire code, bijvoorbeeld 2 wordt 10, 3 wordt 11 en verder. Als het digitale geluid wordt afgespeeld, gebeurt het omgekeerde. De binaire codes worden door de computer vertaald naar de oorspronkelijke waarden van de gemeten amplitudes. Vervolgens worden deze waarden terug uitgezet op een tijdslijn en met elkaar verbonden zodat we terug een continue geluidsgolf krijgen.

De bemonsteringsfrequentie = aantal metingen van geluidssterkte per seconde = Hertz = Hz

Om nadien zonder hoorbaar verlies de oorspronkelijke geluidsgolf te kunnen reconstrueren, zijn metingen met een voldoende hoge frequentie nodig. We spreken dan niet over enkele honderden of duizenden metingen per seconde. Om een redelijke reconstructie van de geluidsgolf mogelijk te maken, moet je toch al minstens 22.000 metingen per seconde of 22.000 Hz nemen. De meeste gangbare frequenties zijn:

  • 44.100 Hz of 44,1 kHz = cd-kwaliteit,
  • 48.000 Hz of 48 kHz = basis masterkwaliteit en
  • 96.000 Hz of 96 kHz = hoge masterkwaliteit.

 

Men moet er welk rekening mee houden dat elke meting dient te worden opgeslagen in bits en bytes. Zo zal eenzelfde opname gedigitaliseerd op 96 kHz dubbel zo veel opslagcapaciteit vragen als een op 48 kHz.

 

Bitdiepte

Voor elke meting moet men bepalen hoeveel mogelijke waarden deze meting kan hebben. Is dat 10, 20, 100, 15.000 of 500.000? Hoe meer mogelijke waarden, hoe meer men de verschillende variaties en nuances in de geluidsgolf kan meten, en hoe groter het dynamische bereik van de digitale kopie zal zijn.

Aangezien deze metingen moeten worden omgezet in computerbits met twee mogelijke waarden (0 of 1) zal het aantal mogelijke variaties worden bepaald door het aantal bits dat men gebruikt. Dit betekent dat men start met minimaal twee variaties bij gebruik van 1 bit per meting. Je krijgt dan als het ware twee opties: geluid of geen geluid, hard of zacht. Door extra bits te gebruiken neemt het aantal mogelijke waarden exponentieel toe. Met 2 bits kunnen we al vier variaties aan, met 3 bits zijn dat er acht, met 4 bits geeft zestien opties. We spreken hier over de resolutie of bitdiepte van het digitale geluidsbestand.

Gangbare bitdieptes zijn 16 bits (cd-kwaliteit) en 24 bits (masterkwaliteit). Met de 16 bits heb je 65.536 mogelijke waarden wat qua dynamisch bereik uitgedrukt in decibels overeenkomt met 96 dB. Met 24 bits kun je theoretisch tot een dynamisch bereik van 144 dB geraken. In de praktijk is dit echter minder omwille van de beperkingen van chiptechnologie. Het heeft bijgevolg weinig zin om geluid met een nog hogere bitdiepte te digitaliseren.

Net als voor de bemonsteringsfrequentie geldt ook hier dat hoe meer of hoe ‘dieper’, hoe meer opslagcapaciteit nodig is. Een 24-bitsopname heeft bijvoorbeeld 1,5 keer meer opslagcapaciteit nodig dan een 16-bitsopname.

Het begrip ‘bitdiepte’ is vooral van belang bij gebruik van geluid gecodeerd volgens de Pulse Code Modulation (PCM). Bij andere coderingssystemen die compressie toepassen, zoals MP3, zal er anders met bitdiepte worden omgegaan en zal deze fluctueren.

Soms wordt er ook gesproken over bit rate. Dit is een aanduiding van het aantal bits dat per seconde wordt gebruikt. Het is een combinatie van het tijdsgegeven en de bemonsteringsfrequentie en de bitdiepte.

 

Kwaliteit

De kwaliteit en resolutie van gedigitaliseerde audio wordt bepaald door twee factoren:

  • de bemonsteringsfrequentie: een grotere bemonsteringsfrequentie resulteert in een betere kwaliteit;
  • de bitdiepte: een grotere bitdiepte resulteert in een betere kwaliteit.

Zeker wanneer de door digitalisering bekomen bestanden de (meestal analoge) originelen vervangen in functie van langetermijnbewaring, is het belangrijk dat de bemonsteringsfrequentie en bitdiepte groot genoeg zijn om alle informatie uit het origineel vast te leggen in het digitale bestand.

Voor de digitalisering van analoge originelen beveelt de International Association of Sound and Audiovisual Archives (IASA)2 aan:

"Digitale formaten hebben een beperkte resolutie die wordt bepaald door de gedefinieerde en eindige bemonsteringsfrequentie en bitdiepte. Terwijl voor digitaal ontstane signalen de originele resolutie moet overeenkomen met het digitale bewaringsformaat, zal de keuze bij analoge originelen altijd een compromis zijn. In principe zijn hoge digitale resoluties wenselijk voor een adequate weergave van alle kleine subtiliteiten van originele analoge signalen."

 

“Tijdens de afgelopen jaren is de opslag van audio in de vorm van bestandsformaten uitgegroeid tot de dominante praktijk en het .wav of BWF-formaat zijn de facto standaarden geworden. A/D-convertors die een bemonsteringsfrequentie van 192 kHz en een amplituderesolutie van 24 bits bieden, zijn standaard. Voor analoge originelen adviseert IASA een minimale digitale resolutie met een bemonsteringsfrequentie van 48 kHz en een bitdiepte van 24 bits. In erfgoed/geheugeninstellingen wordt een resolutie van 96 kHz / 24 bits wijdverspreid gebruikt. Een betere overdracht van de onbedoelde delen van een geluidsdocument [...] maakt de toekomstige verwijdering van deze artefacten door digitale signaalverwerking makkelijker bij de aanmaak van raadplegingskopieën. Spraakopnamen moeten, vanwege het vluchtige karakter van de medeklinkers, worden behandeld als muziekopnamen."3

 

Kanalen

De hiervoor beschreven zaken gelden voor het digitaliseren van één geluidsgolf. Dit betekent dat het geluid in dat geval in mono is. Wil men het geluid echter in stereo bekomen, zoals gangbaar voor muziek, zal men twee geluidsgolven of kanalen moeten digitaliseren. Op een gelijkaardige wijze kan er ook met vier, acht of meer kanalen worden gewerkt. Elk extra kanaal betekent natuurlijk wel een verdubbeling van de benodigde opslagruimte.

 

Codering en bestandsformaten

Een laatste stap bij het digitaliseren is het omzetten van de gemeten waarden naar een digitale code en er een computerbestand van maken. De basisingrediënten hiervoor zijn de zogenaamde codecs of coderingssystemen enerzijds en de bestandsformaten waarin deze codecs worden verpakt. Zoals hoger vermeld, hanteert VIAA een PCM (Pulse Code Modulation) signaal dat ‘verpakt’ wordt in een BWAV of BWF container (Broadcast WAVE).

 

Voetnoten:

 

 

  • 2. Voor meer informatie, zie: http://www.iasa-web.org/
  • 3. Niet alle radio-archieven volgen deze aanbeveling. De VRT bijvoorbeeld kiest bij de digitalisering van een deel van haar archief (het deel dat geen muziekopnamen bevat) voor een resolutie van 48 kHz/16 bits.
logo vlaamse overheid

Uncaught exception thrown in session handler.

PDOException: SQLSTATE[HY000]: General error: 1114 The table 'sessions' is full: INSERT INTO {sessions} (sid, uid, cache, hostname, session, timestamp) VALUES (:db_insert_placeholder_0, :db_insert_placeholder_1, :db_insert_placeholder_2, :db_insert_placeholder_3, :db_insert_placeholder_4, :db_insert_placeholder_5); Array ( [:db_insert_placeholder_0] => nWbBNPKNvfEAUZfPuoX0jt13k_GnA6_ytL5tDKfUJ3s [:db_insert_placeholder_1] => 0 [:db_insert_placeholder_2] => 0 [:db_insert_placeholder_3] => 10.10.10.1 [:db_insert_placeholder_4] => messages|a:1:{s:5:"error";a:23:{i:0;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:1;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:2;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:3;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:4;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:5;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:6;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:7;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:8;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:9;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:10;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:11;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:12;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:13;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:14;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:15;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:16;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:17;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:18;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:19;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:20;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:21;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";i:22;s:247:"<em class="placeholder">Notice</em>: Trying to access array offset on value of type int in <em class="placeholder">element_children()</em> (line <em class="placeholder">6595</em> of <em class="placeholder">/data/www/html/includes/common.inc</em>).";}} [:db_insert_placeholder_5] => 1721589248 ) in _drupal_session_write() (line 209 of /data/www/html/includes/session.inc).