Muziekbestanden ontleden met Spleeter
Bij muziekproducties worden de afzonderlijke stem- en instrumenttracks optimaal op elkaar afgestemd om een zo goed mogelijke balans te krijgen. Spleeter doet net het omgekeerde en maakt van muziekbestanden weer afzonderlijke sporen.
Bij muziekproducties is het zaak om bij het eindproduct alle stemmen en instrumenten zodanig in de mix naar voren – of net niet – te laten komen dat het eindresultaat zo evenwichtig, gebalanceerd maar ook krachtig mogelijk is. De afzonderlijke sporen worden daarbij in telkens wisselende verhoudingen bij elkaar gevoegd in de mix.
Maar soms heb je net behoefte aan een versie van een nummer zonder een bepaald element. Denk bijvoorbeeld aan een karaokeavond waarbij de feestvierders om beurten met een nummer mee mogen lallen. Enig zangtalent is daarbij niet strikt noodzakelijk, en je hoeft de tekst ook niet te kennen, want die loopt mee onderaan op een scherm. Maar voor karaoke heb je wel een versie van het nummer zonder zang nodig. Die zijn meestal niet beschikbaar en worden daarom vaak nagespeeld, waarbij de nummers tot hun essentie worden teruggebracht, omdat de details bij dat soort gelegenheden toch niet zo relevant zijn.
Maar bij een wat serieuzere toepassing als het leren bespelen van een muziekinstrument, zou het wel fijn zijn als je een versie van een muzieknummer kunt vinden waarbij bijvoorbeeld de piano of bas en drums eruit gehaald zijn. En ook voor zang is het prettig als er een versie beschikbaar zou zijn met een iets lager Mantovanigehalte om de echte feel van een nummer te kunnen pakken.
SPLEETER
De vraag is dan of het mogelijk is om van een bestaand muziekbestand de afzonderlijke sporen dan zo goed mogelijk uit te destilleren zonder dat het onwerkbaar wordt. Bij deze zogeheten Music Information Retrieval wordt een algoritme gebruikt dat twee of meerdere stemmen of instrumenten zou moeten kunnen onderscheiden. Het is voor mensen niet zo moeilijk om bij het luisteren naar muziek te focussen op bepaalde instrumenten, maar dat in een algoritme vangen is lastig genoeg. Dankzij kunstmatige intelligentie is hierin de afgelopen jaren meer mogelijk geworden. Het grote probleem daarbij is natuurlijk dat een dergelijke algoritme moet kunnen leren, maar dat je vanwege copyrights niet zomaar overal materiaal vandaan kunt halen.
De streamingdienst Deezer heeft ongeveer een jaar geleden Spleeter uitgebracht en op GitHub gezet. Het is een opensource algoritme met een MITlicentie, bestaande uit een Pythonbibliotheek die gebaseerd is op TensorFlow. Er zitten modellen in om de muziek te ontleden in twee (vocals versus de rest), vier (vocals / drum / bas / overige) of vijf sporen (vocals / drum / bas / piano / overige). Deezer heeft natuurlijk een aardige catalogus waar het dit algoritme op heeft kunnen trainen. We zullen hier verder niet ingaan op de achterliggende techniek, maar meer op het gebruik en het resultaat – een goede inleiding is te vinden op ResearchGate (zie de link aan het eind van dit artikel).
Een van de voordelen van Spleeter is namelijk dat het erg snel werkt. Er zijn verschillende versies, en als je de gpuversie draait, zou het ontleden meer dan 100 keer sneller dan realtime moeten gaan. Daardoor kun je sneller grotere muziekarchieven verwerken.
COMMANDLINE
Spleeter is te gebruiken vanaf de commandline. Daar heb je wel Conda voor nodig, dus begin met het installeren daarvan. Hier gebruiken we Miniconda. Download het bashscript (zie de link aan het eind van dit artikel) en voer het uit met bash Miniconda3-latest-Linux-x86_64.sh Accepteer de licentie met yes en laat Minoconda initialiseren met eveneens yes. Doe eerst een update van Conda en maak nog een eigen omgeving aan waarbinnen je gaat werken met conda update -n base -c defaults conda conda create --name mijn_env conda activate mijn_env
Daarna kun je Spleeter installeren met conda install -c conda-forge spleeter
Als je de gpuversie wilt uitproberen, is het commando voor het installeren vergelijkbaar: conda install -c conda-forge spleeter-gpu
Het installeren kan even duren omdat de Spleeterbibliotheek geladen moet worden.
Het installeren onder Windows verschilt niet zoveel. Download Miniconda (zie de link aan het eind van dit artikel) en voer het uit. Na het installeren open je ‘Anaconda Prompt (miniconda3)’ vanuit het startmenu. Daarna maak je eerst weer een eigen omgeving aan en installeer je Spleeter op dezelfde manier als hierboven.
MUZIEKBESTAND
Het commando om Spleeter te gebruiken is overzichtelijk:
spleeter separate -i audio_example.mp3 -p spleeter:2stems -o output
In dit geval is het bestand audio_example.mp3 het inputbestand. In de directory output komen in dit geval in de directory audio_example de twee bestanden vocals.wav en accompaniment.wav te staan. Als je hetzelfde commando uitvoert met als parameter wordt dat vocal.wav, bass.wav, drums.wav, piano.wav en others.wav. Je kunt de wav, ogg, m4a, wma en flacbestanden overigens ook als invoerformaat gebruiken.
Wil je niet meteen het hele bestand in afzonderlijke sporen ontleden, maar bijvoorbeeld eerst wat tests doen om te kijken wat het resultaat gaat worden, dan kun je met de optie -d een bepaalde tijd in seconden aangeven die je wilt laten verwerken. Dat gaat op dit moment nog alleen vanaf het begin, er wordt nog gewerkt aan een mogelijkheid om dat vanaf een bepaalde tijdoffset te doen.
Het is goed om te beseffen dat de bestanden gefilterd worden op 11 kHz. Daardoor klinken ze wat ‘doffer’ dan normaal omdat er minder hoog in zit. Er zijn standaard extra configbestanden opgenomen om de outputbestanden in elk geval tot 16 kHz te laten doorlopen, maar houd in het achterhoofd dat het algoritme geleerd heeft met en getuned is op 11 kHz (F=1024). Door in het bovenstaande commando spleeter:2stems te vervangen door
spleeter:2stems-16khz zal er meer hoog in de uitvoerbestanden zitten (F=1536). Dat is ook toepasbaar op de en 5stemsoptie.
Je kunt zelfs nog tot 22 kHz gaan (F=2048), maar dan moet je het configuratiebestand 2stems16kHz. json kopiëren en hernoemen naar 2stems22kHz.json en in dat laatste bestand de regel
“F”:1536,
veranderen in “F”:2048, en dat bestand als -pparameter meegeven.
GRAFISCHE INTERFACE
Voor Windows heb je bovendien de mogelijkheid een grafische interface voor Spleeter te installeren. Daar moet je je ook weer niet te veel van voorstellen, want zo veel opties zijn er niet. Je kunt net als op de commandline aangeven in hoeveel sporen je het muziekbestand wilt ontleden en welke maximale tijdsduur je eventueel wilt hanteren.
De optie ‘Recombine (Merge output parts back together)’ is niet meer dan een leuk extraatje, daar kun je mee controleren of de bij elkaar gevoegde sporen weer op het origineel lijken. De optie ‘Full bandwidth (16Khz High quality)’ heeft te maken met de bovengenoemde beperking van 11 kHz, waarbij je de kwaliteit van de outputbestanden nog wat op kunt krikken door deze optie aan te vinken. De optie 22 kHz, die je handmatig wel kunt opgeven, is met SpleeterGUI niet mogelijk.