Een blikkerige microfoon in 8-bit

Een van de mogelijke onderwerpen voor H5/V6 later dit jaar is Audio Hacks. Zoals altijd bouwen we verder op mijn hobbies en dromen. What else?

Het begint met Maynard James Keenan in een lang interview met Rick Beato. Het gaat over de laatste Puscifer plaat, Existential Reckoning (hier live). De plaat staat bol van de oude synth sounds, uit de Fairlight. Juist de lage kwaliteit van de sound van deze synth spreekt aan.

… too clean.. as an artist, I have to add some dust to it.

Maynard james keenan

Lo-fi Bitcrusher

Jij krijgt de opdracht om in P5JS en met de Web Audio API (zie Javascript The Definitive Guide, p 508) een microfoon-filter te maken die de blikkerige sound van de fairlight produceert – je stem vervormend dus. Het Lo-fi Bitcrusher algoritme helpt je een eind op weg.

Daarnaast produceer je een uitlegvideo waarin je uitlegt (op zo hoog mogelijk wiskundig niveau) wat hier eigenlijk gebeurt.

Achtergrond

Analog-Digital conversie staat aan de basis van de electronica en informatica. En dit is ingewikkelde materie. Het mooie perfecte analoge geluid van echte instrumenten en stemmen moet de digitale wereld van computer, studio en youtube in. Er wordt zo-vaak per seconde (bitrate) een sample (audiofoto) genomen in een bepaalde kwaliteit – het aantal kleuren bits. De fairlight heeft maar 8 bits. Je computer trekt er doorgaans 20.

Code

Voordat onze bronsite de code delete, hier is ie

// source: https://noisehack.com/custom-audio-effects-javascript-web-audio-api/
// their source, relinked
// https://www.musicdsp.org/en/latest/Effects/139-lo-fi-crusher.html?highlight=bitcrusher
// 

// 
// ripped by eloquent architect for 
// educational purpose
//
var bufferSize = 4096;
var effect = (function() {
    var node = audioContext.createScriptProcessor(bufferSize, 1, 1);
    node.bits = 4; // between 1 and 16
    node.normfreq = 0.1; // between 0.0 and 1.0
    var step = Math.pow(1/2, node.bits);
    var phaser = 0;
    var last = 0;
    node.onaudioprocess = function(e) {
        var input = e.inputBuffer.getChannelData(0);
        var output = e.outputBuffer.getChannelData(0);
        for (var i = 0; i < bufferSize; i++) {
            phaser += node.normfreq;
            if (phaser >= 1.0) {
                phaser -= 1.0;
                last = step * Math.floor(input[i] / step + 0.5);
            }
            output[i] = last;
        }
    };
    return node;
})();

Opzet

Een microfoon die vervormt en live output naar de speaker is lastig, want de speaker brult door je heen en dus feedback-loopt ie en dat geeft wellicht een piep. Als je de functies splitst kom je verder: opnemen, filter, save / download. Desgewenst kun je toch beeld toevoegen (een cam, een visualizer), of extra audio functies en filters. Het originele 6-octaaf keyboard. Voor je het weet heb je je eigen digitale studio. Maar eerst dat ene filter!

Aan het einde van het interview gaat het over radio compression, bluetooth, mp3… you can hear all the cool stuff disappearing. Dit geeft ook nog een aantal opties om de zaak flink te verpesten. What can go wrong!

Meer Links

Eloquent Architect 161

Eloquent Architect 161