Gebruiker:Stitch/Boozedrome2023-Fanservice

Uit Hackalot - Hackerspace Eindhoven
Naar navigatie springen Naar zoeken springen
Boozedrome2023Tape.jpg
Project Boozedrome2023 entry: Fanservice
Name Boozedrome2023 entry: Fanservice
Start 2022/01/01
Contact Stitch
Website
Information Slechte muziek maken op de amiga
Status Op de space


Dit is een writeup van een bijdrage aan de Boozedrome muziekwedstrijd. Dit is bruikbaar voor anderen die mee willen doen maar nog geen idee hebben waar te beginnen. Het nummer 'Fanservice' is gepubliceerd op Boozedrome 6. Je kan op bandcamp het nummer luisteren, en wel hier: Stitch - Fanservice.

Als je het nummer wil 'zien': alsin de noten die worden afgespeeld met oude software, zie hier: Dekadence demo - BOOZEDROME VI - THE COMPO. Verkeerd afgekondigd als "seven dollar itch", net iets te leete versie van Stitch.


Achtergronden

De boozedrome competitie op youtube

Boozedrome is een jaarlijks terugkerende wedstrijd om muziek te maken op de Commodore Amiga. Het genre is specifiek 'hardcore', wat lijkt op hoe muziek werd gemaakt op de vroegere thunderdome cd-serie. Dit zie je ook terug in de vormgeving van de wedstrijd: een knipoog naar het merk Thunderdome met hetzelfde font en zelfs hetzelfde soort 'reclames' om mee te doen aan de wedstrijd. De reclames waren voor mij reden om mee te doen aan de wedstrijd: als iemand zo gek is om zo goed deze look en feel na te bootsen 20 jaar na dato, dan moet ik zo gek zijn om ook een track te maken.

Beginpunt

Het beginpunt is: de laatste keer dat ik met een tracker heb gespeeld is in 1999. Dus er is al wel wat kennis en ervaring. Muziek spelen en mixen met vinyl cd heb ik veeel gedaan, dus dat is geen probleem. Ook ben ik redelijk bij gebleven qua hardcore over de jaren.

Eisen om mee te doen

Het nummer is af te spelen op protracker 2.3d, dat is software uit 1993. Er zijn maximaal 4 sporen, in mono. Het wordt afgespeeld op een echte amiga computer uit een gelijkend jaartal. Met maximaal 500 kilobyte, 8 bit samples en het nummer mag maximaal 3 minuten zijn.

Samples

De term sample betekent 'geluidsfragment'. Je kan overal geluidsfragmenten vandaan halen, bijvoorbeeld van Youtube. Straks volgt een lijstje van samples en wat er voor nodig was om dit samen onder de 500 kilobyte te krijgen. Ik heb voor dit project alles zelf gesampled.

Er bestaan grote sample-bibliotheken voor de amiga. Ook zijn er gigantische sample collecties op het internet. Er is alleen 1 probleem: je hebt maar 500 kilobyte. Soms wil je juist een sample op hogere of lagere kwaliteit gebruiken: lagere kwaliteit vereist minder ruimte, klinkt slechter ('artsy'). Aan het einde van je nummer kom je altijd ruimte te kort. 500 kilobyte is namelijk iets van 25 seconden op de hoogste kwaliteit dat een amiga te bieden heeft. Voor een volgende wedstrijd heb ik een auto-sample scriptje geschreven, dat staat onderaan deze pagina. Dit gaat enorm helpen als bestandsgrootte een beperkende factor is, omdat het een sample omzet naar alle toonhoogtes op de amiga. Hoe hoger / hoe sneller, hoe minder data. Hiermee kan je spelen en dat is dan ook veel gebeurt bij dit nummer.

Hoe sample je? Dat heeft 'Wasp amiga' uitgelegd in deze youtube video. Neem de tijd om ervoor te zorgen dat je sample voldoende goed klinkt (binnen de beperkingen), en probeer of lagere kwaliteiten met minder ruimte hetzelfde effect geven. Met het scriptje onderaan deze pagina kan je dat zonder audacity te gebruiken, maar gewoon met de command line, python en wat standaardpakketten.


Alle begin is moeilijk

Omdat ik nog nooit echt een nummer heb gemaakt, ook nooit op protracker iets heb gemaakt... is het best een uitdaging. Het project begon met het idee om een alternatief te maken van G-Shock - Demons (promo remix). Door e.e.a. slim her te gebruiken zou het allemaal moeten passen. Na een middagje klooien had ik inderdaad een aantal maten van het nummer in protracker staan. Dat was een mooie doel, maar nog geen nummer en niet origineel.

Componeren in protracker bleek erg lastig. Ook had ik een fout gemaakt: in de variant van protracker die ik gebruikte zat wel stereo: dus er waren effectief maar 2 sporen te gebruiken om links en rechts hetzelfde te kunnen horen. Dus ik ben gaan componeren met het idee dat je met weinig iets moet maken, en dat er effectief maar 2 sporen zijn in plaats van 4.

Het kan even duren om protracker in de vingers te krijgen, na 1 nummer is dat ook nog niet voldoende gelukt, maar is mijn respect voor wat de software kan wel enorm gestegen. De software was z'n tijd ver vooruit. Er vaker mee werken geeft ook meer vertrouwen. Ook kan je met protracker dingen weer sneller dan in andere software.

De compositie heb ik dan ook niet gemaakt in protracker, maar m'n favoriete software om muziek mee te mixen: Ableton Live. Daarin heb ik een beperkt aantal stukje van bekende nummers gezet en ben dat aan elkaar gaan plakken. Tussen protracker uit 1993 en ableton live uit 2023 zit een 1 op 1 koppeling. Muziek is namelijk nog steeds 4-4e. In de volgende twee screenshots zie je exact muziek, maar anders genoteerd. In protracker (rechts) zie je de bijna het eerste kwart van wat je in ableton (links) ziet.

Ableton first pattern.png Protracker first pattern.png

Het invoeren in protracker wordt ook uitgelegd door Wasp Amiga in een serie youtube filmpjes. Ieder van de filmpjes gaat over een feature van het programma. Het kost je ongeveer een kwartier om door alles heen te kijken, want er is maar een beperkt aantal effecten en mogelijkheden. Deze filmpjes helpen ook met het beter begrijpen van de beperkingen. Kijk de serie hier: WASP Amiga - Protracker tutorial.


Creativiteit en wedstrijd

Workflow in stappen, het wordt al snel een chaos

Boozedrome is een wedstrijd uit de demoscene. Het is belangrijk om iets te maken dat origineel is, technisch en liefst grensverleggend. Zomaar een willekeurig nummer van thunderdome van vroeger nabouwen is dus geen goed idee want daarmee verwacht ik niet te winnen. Het publiek kent mij ook niet als artiest, dus er is ook geen verwachting. Het plan was uiteindelijk om het project langzaam te laten bezinken en nieuwe dingen te bedenken waar ik om moet lachen. Als ik er om moet lachen dan heb ik het in muziek gezet.

De naam fanservice komt uit de animewereld, zie wikipedia. Het is een toevoeging voor de fans dat niets aan het verhaal toevoegt, vaak gericht op sexualiteit zonder vulgair te worden. Het nummer probeert het publiek dus exact te geven wat ze willen. Er is een remix van Speedy J - Pullover (1991) waarin ongeveer het volgende wordt gezegd: "hey dj, hou eens op met stoer doen. Gooi er maar een bekend geluidje in, dan hebben de mensen ook nog wat aan hun avond.". Daarna volgt de melodie van Speedy J. In de hardcore zijn er ook een aantal van dat soort direct herkenbare deuntjes. Een van die standaarden is Marshall Masters - Stereo Murder (1994).

Ik ben zelf behoorlijk fan van DJ Promo. Een van de grappigste hardcore nummers ooit gemaakt is Een en al Blijheid, waarin de aflevering "oorwurm" van spongebob wordt gesampled. Dat was een prachtige basis om vanaf te vertrekken. Het nummer heeft humor, brute baslijnen en totale chaos aan het einde.

Het idee om spongebob het deuntje van stereo murder te laten zingen: dwz volledig slachten, kwam als snel. Dat is ook een plek waar publiek zou kunnen aanhaken. Dat ligt er extra bovenop door het om en om te doen. Dit wordt snel oud, dus er is meer nodig. Samen met de kick uit 'Een en al Blijheid' hebben we iets.

Spongebob die naar de oorwurm luistert

Overigens zijn de samples van spongebob niet gehaald uit "een en al blijheid" van Promo, maar uit de originele aflevering geknipt. Dat helpt omdat er dan (minder) andere geluiden bij zitten. In diezelfde aflevering zat een paar seconde later ook een ander prachtige uitspraak van Squidward: "fijn, nu haat ik twee dingen". En omdat het gaat over spongebob, en zijn *****-irritante deuntje is dat ook een perfecte match om te gebruiken. Dit is nu een van m'n favoriete uitspraken geworden.

Een van de boozedrome reclames begint met 'fuck atari... dit is boozedrome met de hardste muziek rechtstreeks uit de hel' of iets in die strekking. Dus "fuck atari" werd ook een sample, en diverse keren herhaald. Het is namelijk nog steeds erg (ON)belangrijk om de superieuriteit van het Amiga platform te promoten na 30 jaar. Hier helpt ook DJ Promo weer met een nummer waarin wordt gezegd "you're a bunch of posers with overexposure", gericht aan neppe mensen. Het nummer heet Promo - Overexposure (2021). Dit haakt perfect in op het atari bashing deel.

Er is later gekozen om de 'fuck atari' sample op een lagere kwaliteit te zetten om ruimte te besparen, wat ironisch werkt. Het origineel was al overstuur, dus je merkt het niet zo. Voor extra ironie is de kwaliteit van die sample extra belabberd.

Een paar dagen later schoot me te binnen dat voor de muntenschuiver ook een spongebob sample was gebruikt waar we heel hard om moesten lachen. Dit is het moment dat patrick en sponsbob deur tot deur chocolade proberen te verkopen. Een klant gaat volledig uit z'n plaat met het schreeuwen van 'chocolade'. Samen met de saturator plugin, natuurlijk met m'n favoriete 'rectifier' preset krijg je het perfecte overstemde geluid dat de waanzin nog beter tot z'n recht laat komen. Ik denk dat dit samen met de kick het beste stuk uit het nummer is. Deze samples komen uit de Engelse en Duitse versie van de aflevering.

Ook de deurbel sample is heel erg in kwaliteit teruggebracht om ruimte te besparen. Dit is gewoon een deurbel van youtube. Het had nog korter gekund door deze twee noten als 1 noot op te slaan en dan gewoon dit na te spelen, maar het is goed zo.

Datareductie in de finale

De finale van het nummer geeft ruimte om nog even extra los te gaan. Dus de snelheid wordt verdubbeld van 200 naar 400 bpm (of van 100 naar 200, wat jij wil). Hier is veel datareductie toegepast om hier wat van te maken. Dit is wat er per sample is gebeurd:

"ik luister veel liever naar een gezellige radiozender" is getimestretched. Dezelfde toonsoort maar sneller afgespeeld door hele kleine stukjes van het geluid weg te laten en slim e.e.a. te overlappen. Dit is een van de modi om samples af te spelen in Ableton. Door timestretch op complex te zetten is er dan minder tijd nodig om de sample af te spelen. Irritant voor dj's omdat ze niet kunnen bouwen op 4-4e enzo. Maar goed voor ons want er is te weinig data en het klinkt ongeveer hetzelfde.

"en nog meer hier pak aan" is een sample van JDA - Voel je die Bass. Dit is ook echt een crowd pleaser. Deze sample kan heel hard in bitrate naar beneden gegooid worden omdat het origineel ook al door een soort van megafoon wordt uitgesproken. Dit versterkt het effect eerder. Dat het luid klinkt komt omdat het zachter wordt afgespeeld. Dit is een psychologisch effect van geluid. Je denk dat het hard klinkt, maar fysiek is dat niet zo. Er is dus heel weinig data nodig om toch meer de fans te pleasen.

"extreme": Dit komt uit DJ Skinhead - Extreme Terror III, een destijds grensverleggende plaat die kunst begreep van dingen hard te laten klinken door te spelen met volume. Het was de bedoeling om zowel "extreme terror" als "was ist loss deutchland" te gebruiken, maar daar was geen ruimte voor. Het resultaat was ook beter: het is nu "Extreme Chocolate" geworden, wat ook nog veel grappiger is.

Omdat protracker een sample op diverse momenten kan afspelen, is het mogelijk om een basale versie van timestretching te gebruiken. Dit gebeurt ook op het laatste moment met de 'fuck atari' sample. Dat wordt uitgelegd in deze video.

Omdat er nog steeds ruimte tekort was moest er op een andere manier worden gewerkt. Gelukkig had ik dat redelijk vroeg door: iedere 64 noten kost ongeveer 2 kilobyte aan ruimte. Dat komt omdat dit niet wordt gecomprimeerd. Dus het is niet verstandig om alle 99 * 64 noten te gebruiken, maar het liefst zo min mogelijk. Lege ruimte overlaten gaat dus ten koste van de kwaliteit van je samples.

Voorbeeldje van de compositie

Je zit hier dat er altijd maar twee sporen worden gebruikt. De finale is wel anders dan in de amiga versie.

Ableton compositie 2023.png

Sample scriptje voor volgende rondes

mappenstructuur voor resampling

Het volgende scriptje zet een 'wav' audiobestand om naar alle toonsoorten van de amiga. Nadat je e.e.a. hebt gecomponeerd en op het punt staat om samples om te zetten naar amiga kan je dit gebruiken. Hiermee kan je makkelijk een tradeoff maken tussen hoeveelheid data en audiokwaliteit. Zo kan je snel een boel ruimte besparen op je samples zonder dat de luisteraar het doorheeft.

Om dit te kunnen draaien heb je python, sox en ffmpeg nodig. Deze kan je installeren met brew op de mac op de volgende manier:

brew install python sox ffmpeg

Maak naast dit bestand 2 mappen aan: input en output. In de input map gooi je een .wav bestand. Na het draaien van dit script krijg je in de output een serie amiga audiobestanden

import subprocess
import os
import shutil


notes = {
    "C-1": "4144",  # Hz (4143.569Hz, period 856)
    "C#1": "4390",  # Hz (4389.722Hz, period 808)
    "D-1": "4655",  # Hz (4654.718Hz, period 762)
    "D#1": "4926",  # Hz (4926.243Hz, period 720)
    "E-1": "5231",  # Hz (5231.409Hz, period 678)
    "F-1": "5542",  # Hz (5542.023Hz, period 640)
    "F#1": "5872",  # Hz (5872.343Hz, period 604)
    "G-1": "6223",  # Hz (6222.623Hz, period 570)
    "G#1": "6593",  # Hz (6592.742Hz, period 538)
    "A-1": "6982",  # Hz (6982.077Hz, period 508)
    "A#1": "7389",  # Hz (7389.365Hz, period 480)
    "B-1": "7830",  # Hz (7829.790Hz, period 453)
    "C-2": "8287",  # Hz (8287.138Hz, period 428) Note: "middle C"
    "C#2": "8779",  # Hz (8779.443Hz, period 404)
    "D-2": "9309",  # Hz (9309.436Hz, period 381)
    "D#2": "9852",  # Hz (9852.486Hz, period 360)
    "E-2": "10463",  # Hz (10462.817Hz, period 339)
    "F-2": "11084",  # Hz (11084.047Hz, period 320)
    "F#2": "11745",  # Hz (11744.685Hz, period 302)
    "G-2": "12445",  # Hz (12445.246Hz, period 285)
    "G#2": "13185",  # Hz (13185.483Hz, period 269)
    "A-2": "13964",  # Hz (13964.154Hz, period 254)
    "A#2": "14779",  # Hz (14778.729Hz, period 240)
    "B-2": "15694",  # Hz (15694.226Hz, period 226)
    "C-3": "16574",  # Hz (16574.276Hz, period 214)
    "C#3": "17559",  # Hz (17558.886Hz, period 202)
    "D-3": "18668",  # Hz (18667.868Hz, period 190)
    "D#3": "19705",  # Hz (19704.972Hz, period 180)
    "E-3": "20864",  # Hz (20864.088Hz, period 170)
    "F-3": "22168",  # Hz (22168.094Hz, period 160)
    "F#3": "23489",  # Hz (23489.371Hz, period 151)
    "G-3": "24803",  # Hz (24803.462Hz, period 143)
    "G#3": "26273",  # Hz (26273.296Hz, period 135)
    "A-3": "27928",  # Hz (27928.307Hz, period 127)
    "A#3": "29557",  # Hz (29557.458Hz, period 120)
    "B-3": "31388",  # Hz (31388.451Hz, period 113)
}


def get_files():
    files: List[str] = os.listdir('input')
    return [file for file in files if file.endswith(".wav")]


def convert():
    # above F3 is basically useless as the amiga can't render that anyway with standard, unexpanded, hardware
    for file in get_files():
        convert_file(file)


def convert_file(filename):
    # ffmpeg -i 3-Short-Auslein.wav -vn -ar 44100 -ac 1 bla.aiff
    # sox bla.aiff -r22000 -c1 bla.8svx

    # file to
    i = 0
    input_file = f"input/{filename}"
    tmp_file = f"input/{filename}.aiff"
    output_dir = f"output/{filename}/"
    os.makedirs(output_dir, exist_ok=True)
    shutil.copyfile(f"input/{filename}", f"{output_dir}/{filename}")
    subprocess.Popen(["ffmpeg", "-i", input_file, "-vn", "-ar", "44100", "-ac", "1", tmp_file])
    for note, frequency in notes.items():
        subprocess.Popen(["sox", tmp_file, f"-r{frequency}", "-c1", f"{output_dir}/{filename}-{i}-{note}.8svx"])
        i = i + 1


if __name__ == '__main__':
    convert()