Sinusoidal Modelling of Polyphonic Audio

Joachim
Ganseman

Beste lezer,

Stelt u zich even het volgende voor. U speelt in een orkestje, een band, een fanfare of gelijkaardig. U neemt uw eerste cd op maar de zenuwen spelen u en de andere bandleden parten. Studiotijd is duur en de rekening tikt stevig aan. Maar, er is een oplossing: meet de profielen op van elk van de instrumenten, en je kan achteraf elke onregelmatigheid in tempo, toonhoogte of ritme van elk afzonderlijk instrument corrigeren.

Ander scenario. U bent instrumentaal solist, en zoals de meeste mensen, heeft u niet zomaar de mogelijkheid om een orkestje in te huren om te oefenen. De partituren of akkoordenschema’s van uw repertoire kunnen ingegeven worden in de computer, en de computer kan deze ook afspelen. Alleen is er geen feedback en rammelt de computer alles af in een strikt en ongevoelig marstempo. Maar, er is een oplossing: eens de computer een profiel kan opmaken van het geluid van uw instrument, kan het ook dit instrument volgen terwijl er gespeeld wordt. De computer kan dan een foutenanalyse maken van uw spel. Of hij kan u real-time en op een intelligente manier begeleiden: hij volgt u terwijl u speelt en past de begeleiding onmiddellijk en automatisch aan.

De scenario’s die hierboven zijn beschreven zijn allemaal mogelijk met een techniek die men sinusoïdale modellering noemt. Uit de wiskunde of fysicalessen van vroeger herinnert men zich waarschijnlijk wel dat elke (geluids)golf opgedeeld kan worden in verschillende afzonderlijke golven, elk met een eigen frequentie (of toonhoogte) en amplitude (of sterkte). Het is mogelijk om met behulp van de Fast Fourier Transform deze opdeling te berekenen met de computer. Sinusoïdale modellering gaat dit nog verder verfijnen, hetgeen mogelijk is met verschillende optimalisatietechnieken. Zonder op de wiskundige details in te gaan, zijn Newton optimalisatie en Gauss-Newton optimalisatie maar enkele van de mogelijkheden om dit te doen.

In de praktijk is er wel een probleem: sinusoïdale modellering is heel rekenintensief. Het vraagt zoveel rekenkracht dat het door een doorsnee pc nauwelijks te realiseren is op een snelheid die nodig is voor praktische toepassingen. In zijn doctoraatsthesis ontwikkelde Wim D’haes methodes die de rekenlast voor computers substantieel verminderen. Daarmee zette hij de deur open voor toepassingen zoals die hierboven zijn beschreven. Een eerste is bovendien reeds commercieel beschikbaar: MuVoice, een software studio plugin die toelaat om akkoordenschema’s in te geven, daarna de stem analyseert en een tweede en derde stem genereert op basis van de akkoordenschema’s – allemaal on-the-fly terwijl je zingt.

Een stem heeft slechts 1 toonhoogte en dat maakt dat vereenvoudiging mogelijk is. Er moet slechts naar 1 toonhoogte gezocht worden, en eens gevonden, is het geweten dat die van de stem komt en dat alles wat niet tot die toon hoort, achtergrondgeluid is waar geen rekening mee gehouden moet worden. Het ‘profiel’ van de stem, zoals dat eerder werd genoemd, kunnen we beschrijven als één ‘sinusoïdaal model’: een reeks van toonhoogtes en bijhorende sterktes die toebehoren aan de stem.

Willen we met meerdere instrumenten werken, dan is er nood aan meerdere sinusoïdale modellen, en daar wringt de schoen nogal hard. Verschillende sinusoïdale modellen kunnen elkaar in de weg zitten, want ze tappen allemaal uit hetzelfde vaatje om hun informatie te bekomen: die ene geluidsgolf die de synthese is van de verschillende instrumenten die samenspelen. Stel nu dat in een orkest zowel de fluit als de viool dezelfde toon spelen. Hoe weet je dan welk gedeelte van die toon afkomstig is van de fluit? Er is geen enkele manier om hier een oplossing voor te vinden. We hebben weinig andere keus dan genoegen te nemen met een verlies aan informatie.

Om de problematische overlappingen toch te kunnen analyseren, zijn er twee mogelijkheden. De gemakkelijkste maar minst elegante is dat de gebruiker moet ingrijpen, en zelf aan de computer moet zeggen hoe de vork nu aan de steel zit. De tweede manier is om informatie uit het verleden te gebruiken. Als de sinusoïdale modellen van beide instrumenten eerder apart zijn voorgekomen, kan men de geluidsgolf verdelen onder de twee modellen naar analogie met het verleden. Verschillende technieken uit de artificiële intelligentie kunnen hiervoor gebruikt worden.

Onderzoeksresultaten zijn vooral interessant als ze ook in de praktijk enige toepassing hebben, en bij voorkeur ook in de industriële wereld. De muziekindustrie werkt met grote softwarepakketten in de studio, om muziek digitaal op te nemen en te verwerken. Een belangrijke industriestandaard voor plugins voor software studio programma’s is VST (Virtual Studio Technology), van het Duitse bedrijf Steinberg. VSTGUI is een open-source softwareproject dat hierbij gebruikt kan worden om de meest flitsende grafische interface rond een plugins te schrijven.

Snelheid is een noodzaak om een ingewikkelde en rekenintensieve technologie als sinusoïdale modellering in een computer te implementeren. Men kan hiervoor in de eerste plaats beroep doen op SSE (Streaming SIMD Extensions). Dit zijn speciale mogelijkheden in recentere processoren zijn ingebouwd om bepaalde berekeningen op grote hoeveelheden data in parallel – verschillende berekeningen tegelijk – te laten gebeuren. Het kan sommige routines tot 4 maal versnellen, wat toch wel een aanzienlijke verbetering is.

Het gebruik van lookup tables en oversampling zijn ideale manieren om te vermijden dat er teveel gerekend moet worden terwijl de software bezig is met audioverwerking. Het komt erop neer dat alle berekeningen die op voorhand gemaakt kunnen worden, ook op voorhand gebeuren. Wanneer ze benodigd zijn in de audioverwerking, zijn de resultaten ervan heel snel uit een lijstje op te vragen.

Matlab is een rekenomgeving die in wetenschappelijke kringen veel gebruikt wordt voor het uitvoeren van grootschalige berekeningen. Handig aan Matlab is dat het ondersteuning biedt voor dezelfde programmeertaal als die waarin VST is geschreven (C++), door middel van zogenaamde Mex-functies. De mogelijkheden van Matlab zijn ideaal om routines in te ontwikkelen en snel de fouten eruit te halen. We kunnen ze schrijven in C++, door middel van Mex-functies in Matlab verbeteren, en als alles afgewerkt is, zonder problemen onmiddellijk in een VST plugin verwerken.

Het ontwikkelen van een volledig uitgebouwd systeem voor sinusoïdale modellering zoals hierboven beschreven, is een langdurige opdracht met veel hindernissen en erg veel onzekerheid. Het traject om hiernaartoe te werken kan echter een mooie aanleiding vormen tot een doctoraatsproject. De funderingen voor zo’n project zijn nu echter gelegd. De mogelijke toepassingen zijn niet enkel spectaculair maar ook nuttig. Ze kunnen de muziekindustrie een hele verzameling technologieën opleveren die de creatie, de analyse en de verwerking van muziek een nieuwe dimensie geven. Benieuwd wat we hier (letterlijk) nog van gaan horen.


Universiteit of Hogeschool
Universiteit Antwerpen
Thesis jaar
2007