i
c Copyright by K.U.Leuven
Zonder voorafgaande schriftelijke toestemming van zowel de promotor(en) als de auteur(s) is overnemen, kopi¨eren, gebruiken of realiseren van deze uitgave of gedeelten ervan verboden. Voor aanvragen tot of informatie i.v.m. het overnemen en/of gebruik en/of realisatie van gedeelten uit deze publicatie, wendt U tot de K.U.Leuven, Departement Elektrotechniek – ESAT, Kasteelpark Arenberg 10, B-3001 Heverlee (Belgi¨e). Telefoon +32-16-32 11 30 & Fax. +32-16-32 19 86. Voorafgaande schriftelijke toestemming van de promotor(en) is eveneens vereist voor het aanwenden van de in dit afstudeerwerk beschreven (originele) methoden, producten, schakelingen en programma’s voor industrieel of commercieel nut en voor de inzending van deze publicatie ter deelname aan wetenschappelijke prijzen of wedstrijden.
c Copyright by K.U.Leuven
Without written permission of the promotors and the authors it is forbidden to reproduce or adapt in any form or by any means any part of this publication. Requests for obtaining the right to reproduce or utilize parts of this publication should be addressed to K.U.Leuven, Departement Elektrotechniek – ESAT, Kasteelpark Arenberg 10, B-3001 Heverlee (Belgium). Tel. +32-16-32 11 30 & Fax. +32-16-32 19 86. A written permission of the promotor is also required to use the methods, products, schematics and programs described in this work for industrial or commercial use, and for submitting this publication in scientific contests.
ii
Voorwoord Ons verhaal? We zijn nu vijf jaar bezig geweest om hier te geraken. Vijf jaar allerlei informatie opslagen, opzoeken en verwerken. We zijn bevoordeeld om dit alles te mogen weten, hoe weinig het ook nog maar is. Maar ondanks de grote hoeveelheid leerstof de voorbije jaren, hebben we toch het gevoel dat we dit jaar meer dan in al die jaren hebben bijgeleerd, meer dan ooit hebben gewerkt, harder dan ooit. Hoe ongelooflijk heerlijk is het ook om als muzikanten een brug te kunnen slagen tussen twee werelden die in het dagelijkse concertgebeuren vaak eerder in de clinch liggen: de kunstzinnige artiest en de technisch hoogbegaafde geluidstechnieker. Het is fijn om ze allebei te zijn en met dit project ook op wereldniveau in contact te kunnen komen met enkele mensen. Gedurende de zeer brede literatuurstudie hebben we ongelooflijk veel lezen, maar als het over ons onderwerp ging, kwamen we altijd dezelfde namen tegen. Logisch ook dat we er dan contact mee opnamen. Vincent Verfaille, Dani¨el Arfib, Paul Brossier en Andy Farnell. Zij hebben ons hier en daar geholpen met problemen rond Pure Data, Aubio en theoretische zaken. Zeer zeker een interessante community ontdekt. Waarom we voor dit onderwerp kozen mag misschien al duidelijk zijn, toch zouden we hier kort willen op ingaan: als muzikanten in verschillende bands hebben we zelf al veel moeite gehad met het samenspelen van muzikanten. Dat is iets wat niet iedereen kan. Wat zou dat dan kunnen wanneer er elektronische toestellen als sequencers en synthesizers bijkomen, toestellen die gesynchroniseerd zijn met interne klokken. Onderling kunnen ze elkaar wel synchroniseren, maar zeg maar eens tegen de drummer dat hij daar versnelt, niet de apparatuur. Dat is altijd een restrictie geweest op onze creativiteit. Maar juist die creativiteit komt natuurlijk op het idee om te zeggen: laat de elektronische muziek dan maar de mens volgen. Er zijn meer mogelijkheden dan enkel synchronisatieproblemen tussen mens en machine oplossen. Veel meer oplossingen. Te veel om in zo’n korte tijd te ontdekken. Er ligt nog een mooie tijd voor ons. Want dit hoofdstuk is nog niet afgesloten. Zeker in combinatie met het vele lezen en zoeken, het vinden van nieuwe software (en die dan onder de knie krijgen) en alle andere iii
iv stappen die in dit werk zijn geleverd bleek er veel te weinig tijd over om een effectenmodule te produceren, die aan onze instrumenten te hangen en urenlang verslaafd te blijven zoeken naar nog betere klanken en effecten. Er is veel werk geleverd en laat dit werk dit samenbundelen en verzamelen naar de toekomst toe, zodat hierop verder gebouwd kan worden door ons, door anderen en door de community. Een dankwoord is hier toch op zijn plaats. Er is niet genoeg plaats op dit blad voor de juiste woorden en een volgorde bestaat er ook niet om de juiste mensen te bedanken. Daarom iedereen even bedankt: Merci Marc pour aider avec les nuances essentielles entre des effets dans le son. Bedankt aan Jan Vandenbrande en concertzaal Het Depot in Leuven voor het gebruik van de zaal en de P.A.-installatie voor testen van onze effecten op grote speakers. Bedankt aan de mensen van de systeemgroep in de kelders van ESAT, Stefaan De Roeck, Kris Demuynck en andere computerkenners. Ondanks jullie uren (echt waar) inbrengen van verschillende commando’s, verplaatsen van files van hier naar ginder en compileren is het ons allen niet gelukt om aubio te installeren of om externals in C in Pure Data te importeren. Toch respect voor jullie ongelooflijke kennis. Bedankt aan alle nalezers die kritisch inhoudeljke en vormelijke commentaar gaven. Ze leerden ons zelfs opnieuw de nederlandse spelling aan: Bart Darius, Jonathan Haasl, Marc Vanden Bempt, Mieke Mommaerts, Tom Gilis, Roeland Veugelen en Toon, Sam en onszelf. Onze oprechte excuses ook voor het opgelegde wetenschapstaaltje. Er moet beseft worden dan schrijven in het passief ervaren wordt als eerder tegenvallend. Mag een tekst niet interessant geschreven zijn opdat de lezer met genot alle vruchten van de gedane studie kan en wil lezen? We willen ook de promoter Marc Moonen bedanken voor het uitschrijven van een dergelijk interessant onderwerp en voor het aandachtig lezen van dit hopelijk even interessant resultaat ervan. Zeer speciale dank gaat uit naar de twee fantastische dagelijkse begeleiders: Toon Van Waterschoot en Sam Corveleyn. Zij vonden officieel de allerbeste weg tussen goede begeleiding en volledige zelfstandigheid. Op een zeer ontspannen manier kunnen bezig zijn met wetenschappelijke, wiskundige en informaticaproblemen en idee¨en, dat hebben nog niet veel mensen ons kunnen voordoen. Ook bedankt voor de moeite die ze zich schijnbaar moeiteloos konden getroosten om ons te helpen. Aan veel kleine details merkten we hoe goed ze zich met ons bezighielden. We denken, nee we weten, dat we met ons gat in de boter gevallen zijn. Bedankt.
Samenvatting Dit werk bespreekt de technieken en resultaten van het ontwerp- en implementatieproces van intelligente digitale audio-effecten. Het probeert een duidelijk beeld te scheppen van de huidige stand van zaken hierin. Dit is een multi-disciplinair onderzoek waarin verschillende domeinen als feature herkenning, muziektheorie, programmeren, digitale audio-effecten, enzovoort mooi aan elkaar gelijmd trachten te worden. Vooraleer dit alles een prachtig geheel kan worden, wordt een korte uiteenzetting gedaan over alle onderzoeksgebieden apart. Dit leidt tot de volgende hoofdstukken: muzikale achtergrond, software tools, digitale audio-effecten en feature-extractietechnieken. Zodoende kan men in het daaropvolgende hoofdstuk leren hoe al deze domeinen bij elkaar kunnen gebracht worden. Er wordt een klein hoofdstuk uiteengezet dat de lezer kort opleidt (indien nodig) om met de noodzakelijke muzikale terminologie om te gaan. Daarna, omwille van de impact ervan op dit werk, wordt er toch een duidelijk overzicht gegeven over de verschillende softwareplatformen binnen het domein van dit project. De lezer kan kennismaken met een grafische, modulaire realtime programmeeromgeving die heel geschikt blijkt voor het ontwerpen van grote audiosystemen op een zeer eenvoudige en snelle manier. Voor het aanvatten van dit project stonden de auteurs voor de keuze: een project waarin gezocht wordt naar ´e´en of enkele concrete, afgewerkte intelligente digitale audio-effecten (iDAFx) en naar een optimale implementatie voor een bepaald hardware platform (zoals DSP’s) of een project waarin gezocht wordt naar een algemeen, modulair opgebouwd framework voor iDAFx. Voor dit laatste blijkt Pure Data een perfect middel te zijn. Muzieksignalen worden door audio-effecten op interessant klinkende manieren bewerkt. De uitvoerder heeft daar vaak controle over aan de hand van bepaalde parameters. Wat intelligente effecten nu juist intelligent maakt, is het feit dat ze die parameters aansturen met informatie die niet door de gebruiker wordt aangegeven, maar door de muziek zelf. Het iDAFx analyseert hiervoor de muziek. Een korte samenvatting is hier op zijn plaats: v
vi Er werden een aantal audio-effecten ge¨ımplementeerd in de vorm van modulair combineerbare blokjes met goed gedefinieerde interfaces. Dit werd in verschillende programmeeromgevingen gedaan. Maar het gros van de resultaten wordt behaald met Pure Data, dat het mogelijk maakt om allerlei soorten effecten realtime te laten lopen. Vermits een doel van dit werk erin bestaat om deze iDAFx in live omstandigheden te gebruiken, is dit realtimeconcept van groot belang. In het domein van muziekanalyse wordt er getracht interessante features uit de muzieksignalen te halen. Wat een interessant kenmerk is, wordt buiten beschouwing gelaten. Er wordt vooral gezocht naar goede methodes om features te herkennen, methodes die voldoen aan de gestelde voorwaarden. Veel methodes worden onderzocht en vergeleken, vooral voor pitch- en beatextractie. Het onderzoek hierin is vooral op het niveau van algoritmes, maar er zijn ook een aantal andere methodes modulair geprogrammeerd in Pure Data. Om deze twee elementen samen te doen werken, moet er een mapping ontworpen worden. Zoals reeds aangehaald gebeurt dit zo algemeen mogelijk. Heel wat verschillende technieken, die samen een uitgebreid framework vormen, worden aangereikt en uitgelegd. Er wordt afgesloten met een aantal concrete implementaties in Pure Data ter illustratie van de oneindigheid aan mogelijkheden dat zo een algemeen framework biedt aan de muzikant, de effectontwikkelaar, de geluidstechnieker en de onderzoeker.
Inhoudsopgave 1 Algemene inleiding 1.1 Probleemstelling 1.2 Toepassingen . . 1.3 State-of-the-art . 1.4 Onze aanpak . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
2 Muzikale achtergrond
6
3 Software tools: Pure Data 3.1 Inleiding . . . . . . . . . . 3.2 Software tools . . . . . . . 3.3 Pure Data . . . . . . . . . 3.3.1 Werkingsprincipes . 3.3.2 Losse objecten . . . 3.3.3 Aubio . . . . . . . 3.4 Conclusie . . . . . . . . . 4 DAFx 4.1 Inleiding . . . . . 4.2 Classificatie . . . 4.3 DAFx . . . . . . 4.3.1 Loudness . 4.3.2 Pitch . . . 4.3.3 Space . . 4.3.4 Time . . . 4.3.5 Timbre . . 4.4 Conclusie . . . .
. . . . . . . . .
1 1 2 3 4
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . .
8 8 8 11 11 12 13 13
. . . . . . . . .
16 16 17 19 19 22 24 27 27 31
5 Feature extraction 33 5.1 Inleiding . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 5.2 Classificatie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 vii
viii
INHOUDSOPGAVE 5.3 5.4 5.5 5.6
Beat detection . Pitch detection Andere features Conclusie . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
35 43 49 49
6 Intelligente DAFX 6.1 Inleiding . . . . . . . . . . 6.2 Mapping . . . . . . . . . . 6.2.1 Algemene mapping 6.2.2 Specifieke mapping 6.3 iDAFx: toepassingen . . . 6.4 Conclusie . . . . . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
. . . . . .
51 51 51 52 57 58 64
7 Algemeen besluit
65
A Documentatie: effecten
69
B Documentatie: feature extractie
71
C Documentatie: iDAFx
73
D Documentatie: losse objecten
75
E Extra figuren
77
Verklarende Woordenlijst 19 inch rack unit: dit is een standaard breedte van flight cases en effectenapparatuur uit de industrie, 16 arpeggiator: een elektronisch apparaat of een algoritme dat aan arpeggio creeert. Een arpeggio is het afspelen van de noten van een akkoord in een snelle, opeenvolgende volgorde in plaats van tegelijk. De manier waarop de volgende noot van een akkoord gekozen wordt varieert van eenvoudig (omhoog of omlaag) tot zeer ingewikkelde patronen, 63 Audacity: een gratis, open -source software voor het opnemen en bewerken van geluid. Het is beschikbaar voor verschillende platformen, 36 droog signaal: het oorspronkelijke audio signaal zonder enige veranderingen, 19 dubbele tracks: twee keer opnemen van dezelfde track na elkaar. Door de kleine verschillen ontstaat er een voller geluid, 22 fonen: dit is een eenheid voor perceptuele luidheid afhankelijk van de frequentie. De Fletcher-Munson curves mappen het dBSPL van een zuivere toon op deze perceptuele luidheid, 19 geluidsintensiteit: een vectorgrootheid die de grootte en de richting van de oppervlaktedichtheid van het geluidsvermogen in een punt in de ruimte aangeeft, 19 Korg MICROkontrol: een compacte MIDI controller met controllers die nodig zijn voor computer-gebaseerde muziek productie en performance. Het heeft drie octaven aan toetsen, 8 draaiknoppen, 8 schuiven en 16 trigger pads die allen met bepaalde codes kunnen aangesproken worden. Een MIDI chart met alle gebruikte knoppen en waarden wordt achteraan bijgevoegd, 19 ix
x
INHOUDSOPGAVE
mastering: is het aanpassen van stereo mixdown van een opname voor een specifiek medium waarop de muziek vermenigvuldigd en verdeeld wordt, 20 Matlab profiler: een grafische user interface om te zien welke lijn code hoeveel tijd in beslag neemt in m-files, 9 MIDI control change messages: dit is een klasse MIDI messages die bestaat uit een reeks hexadecimale waarden die aan elke controller kunnen toegekend worden. Software parameters kunnen ingesteld worden om te reageren op specifieke waarden van deze control change messages, 19 nat signaal: een audio signaal nadat het door een bepaald effect is geweest, 19 PA-systeem: (public address) Elk systeem dat tot doel heeft geluid dat door een bron wordt geproduceerd (zang, muziek) te versterken en te verspreiden zodat het geluid zich over een bepaald gebied, dat groter is dan het natuurlijke bereik van de bronnen zelf, kan verspreiden, 1 parametric equalizer: Een type equalizer met verschillende “parameters” voor controle over verschillende filters voor audiosignalen. Zeer fijne controle is mogelijk met zo’n equalizers. Om parametrisch te zijn moeten er ten minste controls zijn voor gain, Q en frequentie, 20 send/return: een systeem op mengpanelen waarmee een audiosignaal als sidechain van een audiotrack naar andere bronnen kan gestuurd worden (zoals effectenprocessors, andere kanalen, monitors), 12
Lijst van figuren 1.1 3.1
3.2 4.1
Een heel eenvoudige schematische voorstelling van het principe achter iDAFx (intelligent digital audio effects). . . . . . . . . .
4
Een zelf ontworpen dynamics abstractie voor Pure Data. Het implementeert naar keuze een compressor, limiter, expander of noise gate in vier zones tegelijk (zie sectie 4.3.1). . . . . . . 10 (a) Twee mono tracks op een Soundcraft MH2 professionele analoge mengtafel; (b) De mixer abstracties voor Pure Data. . 14
4.2
Een classificatie van audio effecten volgens perceptuele kenmerken loudness, space, pitch, timbre en time [1]. . . . . . . . 18 De lineaire curve die in mapLinear . . . . . . . . . . . . . . . 21
4.3
Schema van de implementatie van het blokje pitchShift∼ . 22
4.4
Eenvoudig schema van de traditionaldelay∼ (a) en de multitapdelay∼ (b) . . . . . . . . . . . . . . . . . . . . . . 28 Onze implementatie in Pure Data van een chorus effect. Zeer duidelijk is het delay netwerk dat bestaat uit vier delays die π rad uit fase zijn ten opzichte van elkaar. . . . . . . . . . . . . 30 2
4.5
5.1
5.2
5.3
Een verzameling features die kunnen gebruikt worden als control parameters, met bijgevoegd de technieken om ze te extraheren (links en volle lijnen) en de bijbehorende perceptuele attributen (rechts, gestreepte lijnen). Schuine woorden duiden op perceptuele attributen [2]. . . . . . . . . . . . . . . . . . . 34 Een Audacity\ sessie met als eerste track de drumpartij en de twee volgende respectievelijk de lage basdrum (zie figuur 5.3) en de hoge hihat toon verkregen door wavelet transformaties [3]. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36 Een schematische drum-setup met benaming van de onderdelen: (1) is de kick of basdrum, (2) is de snare of snaardrum en (3) is de hihat . . . . . . . . . . . . . . . . . . . . . . . . . 37 xi
xii
LIJST VAN FIGUREN 5.4 Schema van de vier stappen van het beat detectie algoritme beschreven in sectie 5.3: (a) opdeling in subbanden, (b) omhullendeextractie, (c) differentiatie en half-wave rectifier en (d) correlatie met kamfilters. . . . . . . . . . . . . . . . . . . . . . . . . 38 5.5 hier wordt door de kamfiltermethode een verkeerde piek gekozen omdat de stapgrootte te groot is. . . . . . . . . . . . . . . . . 41 5.6 Het schema van de pitch-extractie methode harmonic product spectrum met vijfmaal downsampling. Het resultaat van het c sv.mazurka.org.uk product is te vinden in het onderste spectrum. 44 5.7 Het schema van een FFT-gebaseerde pitch-detectiemethode c met fase-evaluatie. DAFx [4] . . . . . . . . . . . . . . . . . 47 5.8 Onze resultaten op een extract van Tom’s Diner van Suzanne Vega met verschillende parameters. De melodie is visueel goed te volgen. (a) grote bloklengte K, (b) kleine bloklengte K, (c) grote verschuiving R. . . . . . . . . . . . . . . . . . . . . . . . 48 6.1 Een schema van iDAFx met verschillende bronnen voor feature extractie: (a) auto-adaptief, (b) extern adaptief en (c) feedback adaptief . . . . . . . . . . . . . . . . . . . . . . . . . 6.2 Een concreet mapping schema voor auto-adaptieve effecten die meerdere features combineren om ´e´en effectparameter aan te sturen (naar het idee van [5]). . . . . . . . . . . . . . . . . . . 6.3 Onze Pure Data abstractie voor de lineaire combinatie van drie features. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6.4 Onze Pure Data abstractie voor de scalering naar de grenzen van een effectparameter . . . . . . . . . . . . . . . . . . . . . . 6.5 (a) Onze implementaie in Pure Data voor de afrondingsmethode, en (b) de adsr-curve . . . . . . . . . . . . . . . . . . . . 6.6 Een concrete Pure Data patch met een aantal ge¨ımplementeerde iDAFx. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
52
53 54 57 59 61
7.1 Een overzicht van alle abstracties ge¨ımplementeerd voor dit onderzoek in Pure Data . . . . . . . . . . . . . . . . . . . . . 66 E.1 de Matlab Profiler\ aan het werk op onze code: (a) op de originele code, (b) met geheugenallocatie voor de for -loop, (c) tijd voor berekening abs en (d) met de nieuwe code. . . . . . . 78 E.2 Fletcher-Munson curve met isofonen . . . . . . . . . . . . . . 79 E.3 De vier panning wetten die ge¨ımplementeerd werden in verband met dit werk . . . . . . . . . . . . . . . . . . . . . . . . 80
Lijst van tabellen 2.1
Het derde, vierde en vijfde octaaf met zijn notennamen, overeenkomende frequenties en MIDI pitch waarden. De gewone do (C) heeft bijvoorbeeld MIDI pitch waarde 60. . . . . . . . . . . . . . . . 7
xiii
Symbolenlijst Symbolen: y(k) f T fs x(k) F (k) M cos (αn + φ) \
uitgangssignaal frequentie periode bemonsteringsfrequentie ingangssignaal een feature parameter een mapping functie α ); α staat voor hoeksnelheid (dus de frequentie is 2π φ staat voor de fase van de cosinus dit is een verwijzing naar de verklarende woordenlijst
Afkortingen: iDAFx intelligent digital audio effects of intelligente digitale audio-effecten, ook adaptieve effecten genoemd in vakliteratuur DAFx digital audio effects of digitale audio-effecten detectie = extractie feature = kenmerk uit een stuk muziek dBSPL decibel sound pressure level bpm beats per minute DSP digital signal processor MFCC Mel frequency cepstrum co¨efficients ITD interaural time difference IID interaural intensity difference FFT fast fourier transform STFT short time fourier transform of een gevensterde FFT
xiv
Hoofdstuk 1 Algemene inleiding Muzikanten en geluidstechniekers hebben veel effectenapparatuur ter beschikking. De rockgitarist met het brede gamma pedaaltjes aan zijn voeten in alle kleuren en klanken is een bekend beeld. Ook de geluidstechnieker heeft naast zijn mengtafel een hele kast effectenmodules staan, alsof de mengtafel nog niet genoeg knoppen heeft.
1.1
Probleemstelling
Effectenmodules voor grote PA-systemen\1 zijn vaak al digitaal, waar de muzikant meestal nog analoge effecten verkiest. Maar voor iedereen die met effecten bezig is, geldt hetzelfde: de parameterwaarden worden gedurende een heel muziekstuk niet veranderd. Eens de gitarist een vuile distortion heeft gevonden door aan de knoppen te draaien, blijft die zoals ze is want hij heeft zijn handen nodig voor het bespelen van zijn instrument. Eens de geluidstechnieker de juiste hoeveelheid galm heeft ingesteld op de stem van de zangeres, blijft hij ervan af want hij heeft zijn handen nodig om de schuiven te bewegen en aan de knoppen te draaien op zijn mengtafel. Met andere woorden: live komen mensen vaak handen te kort. Hiervoor zijn wel al enkele oplossingen gevonden: op pedalen staan voetknoppen om het effect aan en uit te zetten en op delay-modules staat soms een tap-functie zodat de muzikant of technieker het tempo van het nummer kan meetappen. In professionele muziekproductiesoftware vindt men veel verdergedreven idee¨en: algoritmes berekenen het tempo van een nummer, men kan pan en level2 parameters automatiseren, er worden spectrale 1
\ is een indicatie dat dit woord uitgelegd staat in de verklarende woordenlijst in het begin van dit werk 2 zie hoofdstuk 4 DAFx op pagina 16
1
2
HOOFDSTUK 1. ALGEMENE INLEIDING
analyses gedaan, enzovoort. . . Het doel van dit project is de effecten intelligent te maken (in de vakliteratuur ook wel adaptief genoemd). Dit wil zoveel zeggen als dat het effect zelf zijn controleparameters gaat aansturen aan de hand van kenmerken die het uit de muziek haalt. In dit project worden systemen uitgewerkt voor live gebruik: er moet kunnen omgegaan worden met veel achtergrondgeluid (robuuste algoritmes nodig). De systemen moeten ook realtime kunnen werken, dus de signaalvertraging tussen in- en uitgang van het systeem moet minimaal zijn. Enerzijds moet de werking nauwkeurig blijven bij ruis en achtergrondgeluid, anderzijds moet ze wel gevoelig blijven aan de muzikale voorwaarden van de uitvoerder.
1.2
Toepassingen
E´en van de auteurs van dit werk is een overtuigd toetsenist en wel omwille van de flexibiliteit en de grote keuze aan mogelijkheden van die apparatuur. Een modern keyboard kan niet alleen veel instrumenten op een (huidig) zeer hoog niveau imiteren, er kan ook nog eens een breed gamma aan effecten op losgelaten worden die in dezelfde behuizing zitten. Hierdoor kan het effect vaak inherent aanwezige informatie over de performance gebruiken om zichzelf te controleren. Het tempo van een nummer op een keyboard is vaak een gekende variabele die toegepast kan worden op effecten als wahwah, tremolo en autopanner 3. Een toepassing van intelligente effecten kan eruit bestaan dit te extrapoleren naar live muziek door echte instrumenten. Een delay-effect op een ritmegitaar (vraag maar aan Pink Floyd en anderen) zou zijn delay-tijd kunnen aanpassen aan het tempo van het nummer. Als de gitarist dan moet versnellen doordat de drummer wat nerveuzer is die avond, zal het delayeffect gewoon volgen. Zo kan ook een phaser of eender welk sweeping effect aangestuurd worden met tempo-informatie. Een reverb-effect of galm zou kunnen detecteren of een zangstem aan het zingen is, zwijgt of praat. In het eerste geval kan het zich ten volle laten gaan, in de andere gevallen zal het zich uitschakelen. Het kan ook aan de hand van detectie van de muziek zijn galm verhogen als de muziek luider wordt en vooral de galm verminderen in stille passages. Men zou ook kunnen detecteren wanneer de bron van een compressor met zeer hoge versterking geen waardevol signaal aan het doorgeven is. In dat geval kan de compressor zichzelf uitschakelen zodat de ruis die mee versterkt 3
sectie 4.3.3 op pagina 24 over panning
1.3. STATE-OF-THE-ART
3
wordt, wegvalt. Veel creativiteit is niet nodig om nog toepassingen te vinden! Een kleine kantnoot: een effect maakt nog geen goed nummer. Muziek blijft muziek. Effecten zijn een onderdeel van een lange ketting die begint bij de muzikant en eindigt bij de luisteraar en er bestaat een zeer ware vergelijking: garbagein = garbageout
1.3
State-of-the-art
Het onderwerp audio-effecten is een zaak waar nog maar weinig geheimen in bestaan. Analoge effecten kunnen door elke amateur-elektronicus gebouwd worden. Met de digitale revolutie zijn er alleen maar meer mogelijkheden voor de hobbyist. Dit geldt echter ook voor de grote audiomerken. De digitale wereld liet toe om een hele reeks nieuwe toepassingen uit te vinden. Creativiteit naar de output toe is hier even belangrijk of belangrijker geworden dan de manier waarop effecten effectief ge¨ımplementeerd worden. Ook naar feature extractie is al veel onderzoek gedaan. Op dit moment is er bijvoorbeeld heel veel onderzoek naar dit onderwerp in verband met music information retrieval om de grote hoeveelheid muziek en informatie te kunnen classificeren aan de hand van kenmerken in de muziek zelf en niet aan de hand van bijgevoegde labels. Ook voor muziekproductiesoftware is er al veel onderzoek gedaan (bijvoorbeeld bpm-detectie voor temposynchronisatie van twee nummers in DJ-software). Maar voor deze toepassingen is het hele nummer op voorhand al gekend en is er geen sprake van realtime berekeningen. Voor causale feature-extractiemethodes is het iets meer koffiedik kijken. Er is veel onderzoek naar algoritmes, maar geen enkel algoritme volstaat in alle gevallen. In sommige gevallen wordt het probleem van feature-extractie beschouwd als opgelost (bijvoorbeeld monofone pitch-extractie [6]), maar in de meeste gevallen is er nog veel onderzoek te doen om geschikte, effici¨ente, flexibele algoritmes te schrijven. Na veel zoeken langs allerlei internetkabels op deze planeet is er gebleken dat er toch enkele mensen zich op academisch niveau met dit onderwerp hebben bezig gehouden, zij het onder de noemer adaptieve effecten. Het idee op zich is dus blijkbaar niet helemaal nieuw. Dit laat ons onderzoek echter toe om een steentje bij te dragen in dit interessante maar nog prille onderzoek naar de effecten van de toekomst.
4
HOOFDSTUK 1. ALGEMENE INLEIDING
Figuur 1.1: Een heel eenvoudige schematische voorstelling van het principe achter iDAFx (intelligent digital audio effects).
1.4
Onze aanpak
Het onderzoeksgebied is zeer uitgebreid (feature-extractie algoritmes in Matlab, effecten in Pure Data, de wiskunde nodig om interfaces op elkaar af te stemmen, programmeren in C,. . . ). Door een brede literatuurstudie over alle onderwerpen wordt in elk gebied vrij diep gegraven, zelfs over taalgrenzen heen. Het onderzoek wordt dus zowel in de breedte als in de diepte gevoerd, meestal afhankelijk van het onderdeel. Relatief laat in het onderzoek is er op de programmeeromgeving Pure Data gestoten, daar er in het departement ESAT nog geen softwareplatform bestond voor dergelijk onderzoek. Vanaf dan wordt er parallel in alle gebieden tegelijk ontwikkeld. Op die manier wordt er een verzameling kennis en ontwerpen vergaard die dan moeten leiden tot iDAFx. In feite zijn er dus geen beperkingen opgelegd aan het onderzoek. Structuur van dit document In dit document komen vaak algemene termen voor die voor eenieder die zich niet in de wereld van de muziektechniek bevindt vreemd in de oren kan klinken. Deze termen worden vaak uitgelegd in de verklarende woordenlijst aan het begin van dit document. Dit om een teveel aan voetnoten en herhalingen te vermijden. De lezer kan dergelijke termen herkennen aan het herstellingsteken \ dat achter het woord staat. Dit werk is geschreven voor een publiek dat al enige ervaring heeft met signaalverwerking, programmeren en wiskunde. Als extra uitleg nodig is, wordt aangenomen dat dit vooral over muzikale concepten gaat. Het toont enkel aan hoe interdisciplinair dit werk is: het is interessant voor ingenieurs, technici, muzikanten, programmeurs, enzovoort. Na deze inleiding volgt een kort hoofdstuk dat de voor dit werk essenti-
1.4. ONZE AANPAK
5
ele muzikale concepten uitlegt. Een beperkte muziektheorie die handelt over octaven, halve tonen, ritme enzomeer. Hierop volgt een hoofdstuk dat de verschillende softwareplatformen overloopt om uiteindelijk de geschikte software Pure Data voor te stellen en kort uit te leggen. De volgende drie hoofdstukken overlopen de drie onderdelen van iDAFx zoals beschreven in figuur 1.1. Eerst komen de effectimplementaties aan bod, daarna de featureextractie methodes en uiteindelijk in hoofdstuk 6 over iDAFx de lijm die dit alles bij elkaar houdt: de mapping van de features op de controleparameters. In al deze hoofdstukken wordt een stuk algemene uitleg gegeven en er wordt ook geduid wat onze bijdrage is. Achteraan in appendices A tot D, wordt de zeer gedetailleerd bijgehouden documentatie meegegeven van al onze algoritmes in Matlab en al onze algoritmes (abstracties) in Pure Data. Hiervoor verwijzen we ook graag naar de projectwebsite (die opgenomen is in de Pure Data webring): hierop kan men alle documentatie vinden, code downloaden en muziekfragmenten beluisteren. Deze muziekfragmenten worden ook voorzien op de meegeleverde CD. http://idafx.blogspot.com
Hoofdstuk 2 Muzikale achtergrond In deze paragraaf worden een aantal termen uit de muziektheorie nader toegelicht. Deze zijn handig om verdere uitleg over effecten,. . . te begrijpen. Een octaaf is een interval tussen een noot en een andere waarvan de frequentie dubbel zo hoog of half zo laag ligt. Omdat door het menselijk gehoor noten die een octaaf uit elkaar liggen in essentie als dezelfde worden ervaren, krijgen deze noten in de westerse muziekwereld ook dezelfde naam. 200 Hz ligt dus een octaaf hoger dan 100 Hz en een octaaf lager dan 400 Hz. Er moet opgelet worden niet te verwarren met de verschillende harmonischen: bijvoorbeeld. 300 Hz is wel een harmonische van 100 Hz (omdat het een veelvoud is van 100), maar ligt echter geen octaaf hoger, maar ergens tussenin. De schaal tussen 2 noten die een octaaf van elkaar verwijderd zijn, wordt beschreven met halve tonen. Zo zijn er 12 per octaaf. Het verband tussen noten, halve tonen en frequentie (in Hz) vind je in tabel 2.1. Er wordt in muziektheorie ook vaak over pitch gesproken in plaats van frequentie. In de pitch-ruimte heeft een octaaf een grootte 12. Dit is dus in overeenstemming met de 12 halve tonen die tussen 2 noten liggen die een octaaf van elkaar verwijderd zijn. Het wiskundig verband is [7]: p = 69 + 12 log2 ( measure
f ) 440
Een korte uitleg over het metrum in muziek is hier ook op zijn plaats. Elk nummer heeft een bepaald tempo (dat kan vari¨eren doorheen het nummer). Dit is iets anders als de maat van een stuk muziek. Bijvoorbeeld een maat van 44 geeft aan dat er in ´e´en maat vier vierde noten of kwartnoten passen, zo een maat heeft dus vier tellen. 34 telt drie tellen per maat. Beats van een tempo detectie algoritme stemmen overeen met tellen. Ze staan dus ook los van de maatverdeling, ze bepalen enkel het tempo. Het verband tussen tellen (uitgedrukt in beats per minute bpm) en de tijd 6
7 Note ↓ Octave → C C]/D[ D D]/E[ E F F]/G[ G G]/A[ A A]/B[ B
3 130.81 138.59 146.83 155.56 164.81 174.61 185.00 196.00 207.65 220.00 233.08 246.94
(48) (49) (50) (51) (52) (53) (54) (55) (56) (57) (58) (59)
4 261.62 277.18 293.66 311.13 329.63 349.23 369.99 392.00 415.30 440.00 466.16 493.88
(60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71)
5 523.25 554.37 587.33 622.25 659.26 698.46 739.99 783.99 830.61 880.00 932.33 987.77
(72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83)
Tabel 2.1: Het derde, vierde en vijfde octaaf met zijn notennamen, overeenkomende frequenties en MIDI pitch waarden. De gewone do (C) heeft bijvoorbeeld MIDI pitch waarde 60. tussen twee tellen (uitgedrukt in msec) is: time = div
60000 bpm
met div de verdeling tussen twee tellen. Wanneer div bijvoorbeeld wordt een beat-interval opgedeeld in twee stukken.
1 2
is, dan
Hoofdstuk 3 Software tools: Pure Data 3.1
Inleiding
Het doel van dit document bestaat erin om verschillende intelligente effecten werkende te krijgen. Wij doen dat digitaal en softwarematig. Een implementatie moet voldoen aan de verschillende voorwaarden die ons doel oplegt (realtime en dergelijke). Verschillende software-oplossingen kunnen hiervoor gebruikt worden. In dit hoofdstuk wordt overlopen welke programma’s zoal in aanmerking komen. Er wordt ook onderzocht wat de voor- en nadelen ervan zijn in verband met ons project en waarom elk alternatief al dan niet gekozen is. Voor het uitwerken van de intelligente effecten die in dit document worden voorgesteld, is uiteindelijk voor Pure Data gekozen. De werking van deze software wordt kort uitgelegd zodat in de hierop volgende hoofdstukken en op de website alle figuren begrepen kunnen worden.
3.2
Software tools
Matlab Het ontwerp en de implementatie van effecten en feature-extractietechnieken werd eerst gedaan in Matlab. Er zijn enkele ingebouwde routines voor het werken met geluid (zoals wavread en wavplay op Windows), het is een zeer effici¨ente taal voor het verwerken van vectoren (waaronder dus ook geluidsvectoren) en het heeft uitgebreide mogelijkheden voor debuggen en optimaliseren van de code. Het is ook zeer handig om testen te maken en resultaten in figuren weer te geven (zie sectie 5.3 op pagina 35). Voor het beat-detectiealgoritme zijn we blijven werken met Matlab alvorens het om te zetten naar C-code. Daar werd Matlab dus meer gebruikt als rapid prototyping taal en 8
3.2. SOFTWARE TOOLS
9
voor zijn profiler\ . Simulink In het prille begin van het project leek Simulink een goed framework om in Matlab ge¨ımplementeerde systemen gemakkelijk en overzichtelijk met elkaar te verbinden aan de hand van blokjes. Hiervoor heeft Simulink een handige set van blokjes: de signal processing blockset, met blokjes voor filters, audio inputs en outputs, enzovoort. . . Zowel het verbinden van de blokjes als het importeren van Matlab code in Simulink werd snel een grotere opgave dan verwacht. Csound Csound is een programmeertaal speciaal ontworpen en geoptimaliseerd voor het behandelen van geluidsignalen en het verwerken ervan. Deze taal bevat meer dan 450 opcodes. Dit zijn operatiecodes die men gebruikt om een instrument of patches1 samen te stellen. Er verschijnen meer en meer grafische interfaces (graphical ”front-ends”)die gebaseerd zijn op Csound. Hierin is het typisch dat je patches kan modifi¨eren of aanmaken. Dit gebeurt meestal met een tekstverwerker met compilatiemogelijkheden. Het grote voordeel van Csound is de complexiteit die ermee kan behandeld worden. Realtime is mogelijk maar het is er niet echt voor geschikt omwille van de zware processorbelasting. MAX/Msp In de literatuur rond dit onderwerp wordt er buiten Matlab voor niet-realtime toepassingen ook bijna altijd over Max/MSP gesproken als het over realtime gaat. Dit is software die veel weg heeft van Simulink maar dan specifiek op audio toegepast. Deze software is commercieel en vrij duur, maar heeft gelukkig een open source alternatief: Pure Data. Het is geschreven door dezelfde auteur2 en verschilt slechts in beperkte mate van Max/MSP. Pure Data wordt uitgelegd in sectie 3.3 op p 11. Max behandelt enkel controlesignalen voor muzieksynthese omwille van de trage computers toen. Toen de computers sneller werden, werd MSP geschreven dat ook met audiosignalen omkan. 1
patch: een bestand in de Pure Data taal en het functioneert als een standaloneapplicatie 2 Miller Puckette: directeur van het Center for Research in Computing and the Arts en is professort van de University of California, San Diego. In de jaren ’80 werkte hij voor IRCAM en daar heeft hij MAX/Msp geschreven. Later schreef hij ook nog Pure Data
10
HOOFDSTUK 3. SOFTWARE TOOLS: PURE DATA
Figuur 3.1: Een zelf ontworpen dynamics abstractie voor Pure Data. Het implementeert naar keuze een compressor, limiter, expander of noise gate in vier zones tegelijk (zie sectie 4.3.1).
3.3. PURE DATA
11
Er zijn ook nog enkele andere softwaretoepassingen beschikbaar waar we niet dieper op ingaan: Wavewarp [8], SuperCollider [9], ChucK [10], . . .
3.3
Pure Data
De meest geschikte software voor dit project bleek Pure Data: open source (gratis, aanpasbaar en een grote gemeenschap erachter), realtime, goed geimplementeerd (live bruikbaar op laptops), grafisch en modulair (zoals Simulink en Max/MSP), platformonafhankelijk. . . Het is een general purpose computer music environment dat wij enkel gebruikt hebben voor audio en controle, hoewel er nog zoveel meer voorzien is: netwerktoepassingen, multimediatoepassingen met beeld, geluidssynthese en dergelijke meer. De MIDI connectiviteit gebruiken we wel gretig. Een verwaarloosbaar nadeel tegenover de commerciele versie Max/MSP is dat de interface niet zo mooi is en de documentatie soms te wensen overlaat (maar dat wordt goed gemaakt door snelle en veelvuldige reacties op de mailinglijsten). Voor ons project gebruikten we Pd v0.40-2 zonder externe bibliotheken op Windows. Men kan ook Pd-extended installeren die een zeer grote verzameling extensies bevat, maar wij kozen ervoor onze eigen abstracties3 te maken. Er is ook t´ e veel keuze aan bestaande abstracties en externals4 . We installeerden en werkten op Windows op een gewone laptop die ook voor andere doeleinden gebruikt wordt, maar alles loopt vlot. In Linux was het ons iets gemakkelijker geweest om externals in C te schrijven (bijvoorbeeld voor het onderdeel feature-extractie), maar daar kan onze multikanaalsgeluidskaart dan weer niet mee om. Pure Data geeft geen waarborg voor een maximum latency, maar bij gebruik van de juiste drivers is de latency laag genoeg om onhoorbaar te zijn.
3.3.1
Werkingsprincipes
Heel kort leggen we hier uit hoe Pure Data in elkaar zit. Voor meer informatie kunnen we niets anders dan verwijzen naar de documentatie die bij het programma geleverd is, de mailinglists op internet en het online handboek van M.S.Puckette [11]. 3
abstractie: een Pure Data patch die niet tot het standaard Pure Data pakket behoort external: een C-file die volgens de object geori¨enteerde afspraken van Pure Data is geschreven en na compilatie een Pure Data blokje is 4
12
HOOFDSTUK 3. SOFTWARE TOOLS: PURE DATA
Wanneer Pure Data geopend wordt, verschijnt een console. Men kan dan patches openen of nieuwe patches aanmaken. Dit is zeer analoog aan de tandem Matlab/Simulink. Wanneer compute audio aanstaat worden er realtime audio samples berekend in alle openstaande patches (zichtbaar of onzichtbaar). Alle getallen worden opgeslagen als 32 bit floats en de standaard bemonsteringsfrequentie is 44100 Hz. Er zijn vier soorten blokjes in Pure Data: objecten, berichten (message), GUI en commentaar. De blokjes hebben vaak een voor de hand liggende betekenis (+, *, -,. . . ) maar ze kunnen ook heel ingewikkeld worden, tot zelf geschreven externals in C. Blokjes met een ∼ zijn audioblokjes. Dikke verbindingslijnen zijn audiolijnen, dunne lijnen geleiden controleberichten. Berichten geven hun inhoud door wanneer ze geactiveerd worden. En GUI (zoals number boxes) geven feedback over de toestand. Meestal zijn de linkeringangen hot, wat wil zeggen dat een gebeurtenis aan die ingang een gebeurtenis aan de uitgang als gevolg heeft. De rechteringang heeft dat niet en is cold. Hier moet men opletten voor oneindige lussen. Vaak wordt een bang bericht gebruikt in Pure Data. Dit is een soort trigger. Belangrijk is de mogelijkheid tot hi¨erarchische patches zoals in Simulink. Hier zijn twee manieren voor: een one-off subpatch die opgeslagen wordt als een deel van de moederpatch en een abstractie(zie figuur 3.1). Nog een belangrijk concept is het dollarteken voor variabelen. Bijvoorbeeld bij $1-x in een abstractie wordt $1 verwisseld met het eerste argument van de abstractie. Dit laat toe om verschillende instanties van eenzelfde abstractie uniek te gebruiken. Het concept was vrij ingewikkeld in gebruik, maar met de hulp van de auteur en de Pure Data gemeenschap hebben we het nu wel onder de knie. Vanaf hier wordt elk blokje van dit project in de kantlijn getoond.
3.3.2
input∼
Losse objecten
Voor dit project hebben we ook een audioframework gemaakt dat eigenlijk losstaat van het doel op zich: we implementeerden enkele blokjes die de functionaliteit van een analoge mengtafel [12] simuleren (audio input en output, mixfaciliteiten: zie figuur 3.2(b)). Het is gebaseerd op ´e´en track van een mengtafel (zie figuur 3.2(a)). Het input∼ blokje voorziet een gainregeling, een input (men kan kiezen tussen enkele audiotracks of uit de acht inputkanalen van de gebruikte geluidskaart). Men heeft ook een visuele feedback aan de hand van digitale VU-meters. Het equalizer gedeelte\ op een analoge mengtafel is niet ge¨ımplementeerd maar is natuurlijk een niet minder interessante bron voor extra effecten voor iDAFx. Ook het sends gedeelte\ is achterwege gelaten maar door de keuze van blokjes (aparte input, channel en masterblokjes) is er wel dezelfde functionaliteit: in plaats van met een
3.4. CONCLUSIE
13
sends knop een audiosignaal naar een andere bron te sturen verbindt men de uitgang van het input∼ blokje gewoon met de verschillende andere bronnen en dit stuurt men dan elk naar een eigen channel blokje. Het volgende blokje is een channel blokje en dit komt overeen met het verdere gedeelte van de audiotrack uit figuur 3.2(a). Hiervan zijn er drie ge¨ımplementeerd afhankelijk van het aantal in- en uitgangen. Hierin kan men het signaal pannen (zie sectie 4.3.3 op pagina 24), muten, het volume regelen en zelfs het signaal in tegenfase zetten (zie sectie 4.3.5 op pagina 31). De pan-positie en het volume kunnen van buitenaf geregeld worden, wat het zeer bruikbaar maakt als parameter voor gebruik in iDAFx. Uiteindelijk, om alles te kunnen horen, moet er nog een master∼ blokje voorzien worden in de hoofdpatch. Dit blokje ontvangt alle signalen van de channel blokjes en zet ze op de luidsprekers. De mute knop die daar voorzien is, zet het geluid stil door de DSP af te zetten (zie figuur 3.2(b)). Alle berekeningen stoppen dan. Het kan dus ook gebruikt worden als panic! knop5 . Elk van deze blokjes krijgt een argument mee om een unieke werking te waarborgen.
3.3.3
Aubio
Aubio is een externe bibliotheek met een heleboel algoritmes voor featureextractie. Er zit onder andere ook een tempo-detector en pitch-detector in. De installatie van dit pakket is tot op heden nog niet gelukt op de voor dit project gebruikte laptop, noch op computers van het departement zelf. Dit ondanks de hulp van IT-mensen, assistenten, Linux-kenners, de Pure Data gemeenschap en zelfs de auteur van het pakket zelf. We willen hier toch even onze appreciatie laten blijken voor alle pogingen.
3.4
Conclusie
In dit hoofdstuk stelden we het probleem aan de kaak van het zoeken naar een geschikte omgeving op de computer om onze idee3en te implementeren. We legden de voor- en nadelen uit van de platformen waar we ervaring mee opdeden tijdens het onderzoek: Matlab, Simulink, Csound, Max/MSP en Pure Data. Vermits het gros van het onderzoek gedaan werd in Pure Data, deden we een poging om dit programma kort uit te leggen zodat de implementaties in de volgende hoofdstukken kunnen begrepen worden. We stelden 5
panic! knop: soms loopt er iets mis in een MIDI systeem waardoor bijvoorbeeld noten kunnen blijven hangen. De panic! functie verzendt een all notes off -signaal en een reset all controllers-signaal
channelM2M∼ channelM2S∼ channelS2S∼
master∼
14
HOOFDSTUK 3. SOFTWARE TOOLS: PURE DATA
Figuur 3.2: (a) Twee mono tracks op een Soundcraft MH2 professionele analoge mengtafel; (b) De mixer abstracties voor Pure Data.
3.4. CONCLUSIE
15
ook een algemeen framework voor dat dient om audio af te spelen, te routen en te beluisteren.
Hoofdstuk 4 DAFx 4.1
Inleiding
In dit hoofdstuk wordt het effectengedeelte van een iDAFx systeem besproken. We kennen allemaal de pedaaltjes die gebruikt worden door gitaristen. Maar effecten worden live ook in grote mate gebruikt op andere instrumenten en op stemmen. Hiervoor bestaan dan meestal 19 inch rack units \ . Ze bestaan in alle kleuren en geuren (en prijs- en kwaliteitsklassen). Vaak amper zijn ze hoorbaar maar soms is het oorspronkelijke signaal nog amper herkenbaar. Er bestaan verschillende woorden en termen voor audio-effecten. Voor dit document maken we daarin geen onderscheid en we hebben het consequent over hetzelfde proces: signaalverwerkingstechnieken toepassen op geluid en zodoende de klank van dat geluid veranderen. Anders gezegd: een geluid transformeren in een ander geluid met een andere eigenschap of kwaliteit [2]. De effecten die in dit document besproken, ontworpen en ge¨ımplementeerd worden zijn allemaal digitaal. Oorspronkelijk waren alle effecten die in muziek werden gebruikt analoog. Vele digitale effecten hebben ook een analoge voorganger, maar er zijn ook nieuwe, creatieve effecten bijgekomen. Er is vrij veel tijd gestoken in het implementeren van een breed gamma aan effecten, zowel in Matlab als in Pure Data. Er zijn ook verschillende implementaties mogelijk ook al klinkt het effect hetzelfde. In deze tekst wordt vooral uitgelegd hoe al die effecten ingedeeld kunnen worden tot een geordend geheel en dan worden een aantal effecten uitgelegd. Die uitleg zal niet vaak uitwijden over de effectieve implementatie van effecten, eerder zullen hier perceptuele, historische en wiskundige eigenschappen aan bod komen. Als er al eens dieper wordt op ingegaan, is dat omdat het effect in latere hoofdstukken nog gebruikt wordt. 16
4.2. CLASSIFICATIE
4.2
17
Classificatie
Er is een sterke nood aan een systeem om het bos door de bomen te kunnen zien als het over effecten gaat. Er bestaan verschillende benaderingen om een goede classificatie van alle effecten te bereiken [1]. Ze worden alle door elkaar gebruikt: een technische benadering (hoe het effect werkt/ge¨ımplementeerd is: filters, delays, niet-lineaire verwerking,...), een classificatie gebaseerd op het type controle (adaptief/intelligent, cross-adaptive, LFO1 ) of gebaseerd op perceptuele kenmerken. Bij de laatste benadering worden vijf hoofdattributen beschreven : loudness, space, pitch, timbre en time (zie figuur 4.1). Zij beschrijven hoe het effect klinkt voor eenieder (muzikant, instrumentbouwer, componist, luisteraar,. . . ). De effecten in de volgende sectie worden aan de hand van de laatste benadering ingedeeld.
1
Low frequency oscillator
18 HOOFDSTUK 4. DAFX
Figuur 4.1: Een classificatie van audio effecten volgens perceptuele kenmerken loudness, space, pitch, timbre en time [1].
4.3. DAFX
4.3
19
DAFx
De effecten die ge¨ımplementeerd werden voor dit project zijn van alle modulair. De bedoeling is altijd geweest om verschillende ‘blokjes’ met elkaar te kunnen verbinden. Veel aandacht is gegaan naar de interface (onder andere ook in de documentatie-appendices) van elk effect. De effecten die uiteindelijk voor iDAFx gebruikt zullen worden, hebben vooral veel in- en uitgangen om alles van buitenuit te kunnen controleren en gebruiken. De display is altijd sober gehouden. Voor sommige effecten kunnen er parameters veranderd worden door MIDI control change messages \ . Deze zijn in onze implementatie aangepast aan waarden die overeenkomen met specifieke controls van de Korg MICROkontrol \. Wat typisch is aan kant-en-klare effecten, is dat er een level -knop op staat waarmee de balans van het droge \ , oorspronkelijke signaal en het natte \ effectsignaal kan geregeld worden. Dit is bij onze effecten achterwege gelaten daar deze functie al voorzien wordt met de mixer-blokjes. Zo wordt er buiten de level -parameter ook een pan-parameter voorzien buiten het effect. Zo krijgen we een betere, modulair opgebouwde verdeling van alle effecten, door enkele algemene, veel voorkomende variaties buiten het effect te brengen om zo enkel het basiseffect over te houden. In deze paragraaf bespreken we enkele effecten die we maakten met Pure Data ingedeel volgens hoofdattributen loudness, space, pitch, timbre en time. Voor de volledige documentatie van elk blokje, Matlabcodes en dergelijke verwijzen we naar bijlage A op pagina 69.
4.3.1
Loudness
Het loudness-attribuut vertelt hoe luid een geluid gehoord wordt. Het verband met de geluidsintensiteit\ van een geluidsgolf wordt voor sinusvormige signalen uitgedrukt door isofonen\ (zie figuur E.2 op pagina 79). Effecten die dit attribuut veranderen, veranderen de dynamiek van het signaal. Amplification Dit triviale effect versterkt of verzwakt een geluidssignaal met een bepaalde factor. Het is door ons voorzien in de mixer objecten (zie sectie op pagina 3.3.2 op p 12) channelM2M∼, channelM2S∼ en channelS2S∼. Buiten de gainregeling van de input (dat niet tot het domein van de effecten behoort) kan voor elk kanaal (nat signaal\ of droog signaal\ ) het volume (dus luidheid) aangepast worden. Dit kan van buitenuit voor gebruik als intelligent effect.
channelM2M∼ channelM2S∼ channelS2S∼
20
HOOFDSTUK 4. DAFX
Het bekende gitaareffect tremolo is niets meer dan een tijdsvariante amplification. Als variant van een ringmodulator hebben wij een tremolo effect voorzien (zie ringmodulator op pagina 31). Dynamics processing
compressor∼ dynamics
In deze categorie vinden we een reeks intelligente effecten avant la lettre: de compressor, noise gate, limiter en expander. Ze werken allen op dezelfde manier maar hebben een andere uitwerking. Een compressor gaat vanaf een bepaalde drempelwaarde (threshold ) het audiosignaal verzwakken met een bepaalde ratio. Deze ratio wordt uitgedrukt als n : 1. 2 : 1 betekent bijvoorbeeld dat wanneer het oorspronkelijke signaal met 2 dB stijgt, dat het dan door de compressie slechts met 1 dB stijgt. Een limiter heeft een (al dan niet bij benadering) ratio van ∞:1. Een attack en release parameter bepalen hoe snel het effect in werking treedt en hoe lang het blijft werken nadat het signaal terug onder de threshold gaat. Een hold parameter bepaalt hoelang het duurt vooraleer de release-fase in gang schiet. Als dit langer duurt dan ´e´en enkele periode van het laagst hoorbare signaal, zal de compressor lang genoeg wachten tot de volgende periode en zo geen vervorming geven. Een expander doet net het omgekeerde: onder een bepaalde threshold wordt het signaal afgezwakt. Dit kan gebruikt worden om ruis te onderdrukken, om overspraak tussen verschillende signalen te verminderen of ook om het dynamisch bereik van signalen te vergroten (bijvoorbeeld bij platenspelers). Ook hier geldt een limiet waarbij het signaal maximaal (−∞ of benadering) wordt afgezwakt zolang het niet boven de threshold uitkomt. Dezelfde parameters gelden als bij een compressor. In de kern van onze compressor zit een overdrachtsfunctie die alle vorige functies in ´e´en keer kan combineren, zie figuur 4.2. Het eerste stuk is een noise gate. Vanaf threshold x1 begint een expander. Vanaf threshold x2 gebeurt er niets en daarna is er een compressie (als het lijnstuk met richtingsco¨effici¨ent a4 horizontaal zou liggen (a4 = 0) zou het een limiter zijn). Een de-esser is een combinatie van een parametrische equalizer \ en een compressor die enkel op het getunede gebied werkt. Als je de equalizer rond de frequentie van de klank s zet (rond de 4 a ` 5 kHz), zal zo een storende s-klank gecompresseerd worden. Hetzelfde principe geldt voor een multiband compressor. Dit is het algemene geval van de de-esser. Zo kan men de compressie apart per frequentieband regelen. De multiband-compressor wordt vooral gebruikt voor mastering\ doeleinden, maar kan live bijvoorbeeld gebruikt worden om een ophoping van lage frequenties te vermijden door de compressie vooral te laten
4.3. DAFX
21
Figuur 4.2: De lineaire curve die in mapLinear wordt gebruikt en ook de kern vormt van de reeks dynamics abstracties die we maakten voor Pure Data. De xi zijn threshold levels en de ai zijn richtingsco¨effici¨enten of ratios.
22
HOOFDSTUK 4. DAFX
Figuur 4.3: Schema van de implementatie van het blokje pitchShift∼ plaatsvinden onder de 100Hz.
4.3.2
Pitch
In deze klasse van effecten wordt de pitch van een geluid veranderd. Pitch staat logaritmisch in verband met frequentie en drukt de toon uit van bijvoorbeeld de zanger of de noot van de gitarist. Andere parameters die met pitch te maken hebben zijn intonatie, melodie, harmonie (akkoorden), glissando,. . . De Harmonizer van Eventide is de moeder van alle pitch-effecten. Deze effecten-module kan de pitch verschuiven, verdubbelen, dubbele tracks\ simuleren en nog veel meer. Wij implementeerden een pitch shifter en octaver voor gebruik in iDAFx. pitch shifters werken bijvoorbeeld op basis van tijdscompressie of-expansie voor respectievelijk het verhogen of verlagen van de pitch en daarna een herbemonstering om de timing terug juist te krijgen. (Trouwens, het omgekeerde is ook mogelijk: de timing veranderen en de pitch terug naar de oorspronkelijke pitch brengen, maar dat is meer voor de tijdsgebaseerde effecten uit sectie 4.3.4 op pagina 27). Onze implementatie van de pitch shifter verhoogt of verlaagt de frequen-
23
4.3. DAFX
tie over een aantal halve tonen. Het principe van het dopplereffect wordt gebruikt om de pitch te verschuiven. Hiervoor wordt een variabele delaylijn gebruikt [4] (grote delay komt overeen met grotere afstand). De delaytijd wordt variabel gemaakt door deze aan te sturen met een zaagtandgolf (zie figuur 4.3). Hierdoor liggen de grenzen voor de delaytijd tussen d0 en d0 + s (in aantal samples uitgedrukt). d0 moet een minimumwaarde hebben die deze minimum delay toepasbaar maakt. d0 en s zijn meestal parameters die je kan meegeven aan het systeem. De zaagtand golf wordt ook gebruikt om de omhullende van de output van de delaylijn te berekenen, dit om discontinu¨ıteiten te vermijden zoals in figuur 4.3. Hetzelfde diagramma moet nog eens herhaald worden maar deze keer met een faseverschuiving van π rad met het eerste deel. Op deze manier zorg je ervoor dat er geen discontinu¨ıteiten zijn als de samples terug worden samengesteld (zie [11, p.54]). Indien f de frequentie is van de zaagtand, dan overloopt deze periodisch om de ffs samples alle waarden tussen 0 en 1. Als nu x[n] de output is van de zaagtandgenerator, dan volgt: x[n + 1] − x[n] = ffs . Na vermenigvuldiging: sx[n + 1] − sx[n] = s ffs . De optelling heeft geen effect op de steilheid van het verloop van de zaagtand. De transpositiefactor t: t=1−s
pitchShifter∼
f (1 − t)fs ⇒f = fs s
(zie [11, p.206]). De pitch-verschuiving wordt dan meestal bekomen door de frequentie f te veranderen als s eenmaal vastligt. s mag niet te groot gekozen worden om te vermijden dat de twee verschillende delay-lijnen als twee verschillende signalen worden ervaren, want dat is dan een echo, een ander effect. f kan willekeurig veranderd worden, maar bij s moet opgepast worden. Om moeilijk te controleren dopplerverschuivingen te vermijden, mogen deze veranderingen niet discontinu verlopen. Om te verschuiven over halve tonen wordt deze transpositiefactor nu p
t = 2 12 = e
ln(2)p 12
≈ e(0.05776)p
Als parameters voorzien we het aantal halve tonen p omhoog (p > 0) of omlaag (p < 0) en de variatie van de delay aan de hand van d en s uit figuur 4.3. De octaver verhoogt of verlaagt het frequentiespectrum van het inkomende signaal met een factor 2. Om dit te bekomen zijn er verschillende mogelijkheden. Het uiteindelijk resultaat is alleszins een pitch-verschuiving. De meest voor de hand liggende implementatie is om de uitleessnelheid te verhogen of
octaver∼
24
HOOFDSTUK 4. DAFX
verlagen. Dit verandert echter het timbre van het signaal, ook bekend als het chipmunk-effect 2 in de literatuur. Om het inkomend signaal een octaaf te verhogen, wordt er beter op een andere manier te werk gegaan. Deel, door filtering (zie uitleg in A), het oorspronkelijk signaal op in de fundamentele en de harmonische frequenties f , 2f , 3f , 4f , 5f , 6f ,. . . Splits de oneven en de even harmonischen en verwijder uiteindelijk de oneven harmonischen (en ook de fundamentele frequentie). 2f , 4f , 6f ,. . . blijven over. Dit zijn op hun beurt de harmonischen van 2f , een toon die een octaaf hoger ligt dan het origineel signaal. Om het inkomend signaal een octaaf te verlagen, past men ringmodulatie toe. Extraheer de fundamentele frequentie f uit de input. Door f met factor 12 te vermenigvuldigen, bekom je de frequentie van het signaal dat een octaaf lager ligt. Op basis van deze frequentie kan het oorspronkelijk signaal gemoduleerd worden. Dit effect krijgt geen aanstuurbare parameters, maar de linkeruitgang geeft een kopie van het signaal een octaaf hoger en de rechteruitgang een octaaf lager.
4.3.3
Space
Wanneer een effect door dit attribuut gekenmerkt wordt, speelt het in op de plaatsing in de ruimte (afstand, azimut, elevatie), directiviteit en beweging. Heel gekend zijn de room effecten: reverb, echo en delay. Panning pan∼ monopanner∼
Een panner verplaatst een geluid in het panorama of stereospectrum (links/ rechts). Voor gebruik in iDAFx laat een panner toe om die positie van buitenaf te kunnen bepalen. In feite wordt het ingangssignaal (al dan niet stereo) gewoon verzwakt volgens een gekozen functie. In onze implementatie van de monopanner∼ en pan∼ voorzien we vier curves: lineair, sinusvormig, vierkantswortel en een gogin curve. Deze curves zijn ontstaan doordat wanneer de lineaire wet werd gebruikt (het ene kanaal lineair luider, het andere lineair stiller), er een hole-in-the-middle ontstaat (zie figuur E.3 op pagina 80). Verschillende voorstellen zijn dan gedaan om hieraan tegemoet te komen. Een curve van een sinus of vierkantswortel verhoogt de centerpositie met enkele dB. Sommige geluidstechniekers gebruiken deze “hole-in-the-middle” juist als effect om het geluid wat extra kracht te geven wanneer het extreem gepanned wordt. Wij hebben ook een gogin curve geimplementeerd die meer een ronddraaiend effect geeft bij het veranderen van 2
chipmunk-effect : genoemd naar Alvin and the chipmunks, een fictieve muziekgroep uit 1958, met stemmen die op deze manier zijn gecre¨eerd.
4.3. DAFX
25
de pan-parameter, hieronder x. √ 1−x rootLeft = √ rootRight = x
sineLeft = cos π2 x sineRight = sin π2 x
linearLeft = 1 − x linearRight = x √ h i goginLeft = 2 cos πx(k) − π − sin πx(k) − π 2 2 2 √ h i goginRight = 2 cos πx(k) − π + sin πx(k) − π 2 2 2
In DAFx [4] wordt nog een methode op basis van een rotatiematrix voorgesteld. Wij voorzien een pan blokje voor gebruik in Pure Data en tevens wordt er een pan-parameter voorzien op stereokanaalblokjes (channelM2S∼ en channelS2S∼). Reverb Het reverb (galm) effect is een zeer natuurlijk effect dat vaak onhoorbaar aanwezig is. Elke kamer heeft impliciet een reverb, die je bij een effectenmodule als parameters zou kunnen ingeven, afhankelijk van de afmetingen en materialen. Deze specifieke impulsresponsie zou kunnen berekend worden per kamer en dan kan men het signaal hiermee convolueren. Een digitale reverb zal dit ruimtegevoel nabootsen. Er bestaan hierop veel variaties op met nog meer verschillende parameters: gated reverb, reverse reverb, plate reverb, spring reverb met parameters predelay, reverberation time, reverb decay, gate time, gate decay time, gate threshold, feedback percentage, HF damp,. . . Een reverb is de samenstelling van een direct pad en alle reflecties. Die reflecties zijn gedelayde en vervormde versies van het oorspronkelijke signaal. Het ruimtelijk effect wordt nog versterkt doordat onze beide oren incoherente versies van het signaal ontvangen. reverb bestaat uit twee delen: vroege reflecties en late reflecties. De verschillende herhalingen zijn niet apart hoorbaar zoals bij een echo of delay effect, daarvoor volgen ze elkaar te snel op. De vroege reflecties komen het eerst na het directe geluid en zijn over het algemeen goed gedefinieerde en directionele reflecties die rechtstreeks in verband staan met de grootte en vorm van de ruimte en de plaats van de bron. De late reflecties daarentegen komen veel sneller tegelijk aan, zijn minder sterk (exponentieel verval) en zeer diffuus.
26
reverb∼
HOOFDSTUK 4. DAFX
Typische galmtijden (RT603 ) voor gewone muziek duren tot 1, 5s en voor orgel muziek rond de 2, 0s. Onze implementatie werkt op basis van een feedback delay-netwerk. We combineren 16 verschillende delay-lijnen met elkaar en deze combinatie is afhankelijk van de gegeven parameters. Elke delay-lijn heeft een andere en vaste delay tijd. e voorzien ook een HF damp-functie4 om een analoog circuit na te bootsen. Als parameter voorzien we hier liveness (intern feedbackpercentage). Men kan kiezen hoeveel van de vier beschikbare combinaties van delaylijnen men gebruikt als output. Er zijn verschillende mogelijke implementaties: van implementaties waarbij men de kamerafmetingen kan ingeven om door middel van simulatie alle delays te berekenen tot implementaties die gebruik maken van wiskundige technieken om tot een semirandom-verdeling te komen die een mooie reverb geeft, zoals de fiboverb van Andy Farnell5 die gebruik maakt van een fibonacci-reeks voor een snelle berekening van de verschillende delays. Delay De simpelste vorm van een digitale delay is het opslaan van een vaste reeks samples in een buffer (=delay-lijn) om ze na een bepaalde tijd (=delay-tijd) terug uit te lezen: y(k) = x(k − N). In Pure Data komt dit basisproces overeen met het delwrite∼ en delread∼ blokje. In Matlab werkten we een delay uit aan de hand van een kamfilter [4](zie bijlage A), maar de echt uitgebreide implementaties deden we in Pure Data. Twee fundamenteel verschillende delay effecten zijn uitgewerkt volgens het idee van de T.C.Electronic D·Two [13]: een traditional delay (met feedbackloop) en een multitapdelay. Voor een volledige uitleg wordt verwezen naar de documentatie in bijlage A. In figuur 4.4 is een sterk vereenvoudigd schema te zien van onze implementaties. Als externe parameters voorzien we de delay tijd (dly), het feedback niveau (fbk ) van de lus of van de taps, de delay offset per kanaal, de panoramaparameter (pan) en/of de aan- en uitschakelaars van elke tap. 3
RT60 (reverb time -60dB): de decay tijd vooraleer een geluid verzinkt in het achtergrondgeluid van de ruimte. Als dat achtergrond geluid versterkt (bijvoorbeeld door het opzetten van een verwarmingssysteem) zal de reverberation tijd korter klinken. De RT60 specificatie is daarentegen een objectieve meting van de reverberatietijd. Ze zegt dat de reverberatietijd gedefinieerd is als de tijd die de reverb nodig heeft om 60dB te verzwakken 1 van het oorspronkelijke vermogen. in volume, of 1000000 4 HF damp is een low pass filter die de neveneffecten van een analoog circuit nabootst door de hoge tonen af te zwakken. Het reverb effect varieert dan van een zeer heldere digitale reverb naar een doffere vintage analoge reverb. 5 http://obiwannabe.co.uk/html/toys/fiboverb/fiboverb.html
4.3. DAFX
27
In de multitapdelay verhouden de tien verschillende delay-tijden, panoramaposities en feedback-niveaus van de taps zich als: P dly = i i dly pan2i−1 = −pan pan2i = pan f bk i traditional delay werking f bki = P f bki = i f bk reverse delay werking
Zo is de multitapdelay tot verschillende werkingen in staat: traditional delay met selecteerbare taps, reverse delay (als het droge signaal weggelaten wordt uit de mix, dan lijkt dit sterk op het achterstevoren afspelen van een stukje muziek of stem, maar dan causaal), pingpong delay (waarbij de volgende taps altijd veranderen van positie). De hierboven getoonde verbanden tussen de parameters van elke tap zijn arbitrair gekozen omdat geen enkele muzikant die zelf wilt gaan uitzoeken. Maar de mogelijkheden zijn onbeperkt: alles kan, alles mag.
multitapdelay∼ traditionaldelay∼
4.3.4
Time
In deze klasse worden het tempo en de duur van geluiden aangepast. Accelerando en deccelerando notities in partituren behoren hier ook toe. Voor dit project hebben we er geen enkele uit deze klasse ge¨ımplementeerd. We verwezen wel al naar een methode in de sectie over pitch op pagina 22.
4.3.5
Timbre
Timbre gebaseerde effecten bepalen de kleur (formanten), helderheid, kwaliteit, textuur, harmoniciteit,. . . van een audiosignaal. In de muziek komen termen voor als vibrato, trill, legato, pizzicato,. . . die tot deze klasse behoren. Filtereffecten De volgende effecten hebben hoofdzakelijk timbreveranderingen die gehoord wordt. Als secundair kenmerk geldt een filtereffect: bepaalde frequenties worden aangepast. Een flanger stamt uit het analoge tijdperk: door twee tapes tegelijk te laten lopen en licht op ´e´en van de tapes te duwen wordt een variabele delay nagebootst. Door een wisselende delay-tijd veranderen de pieken in de frequentierespontie constant van hoog naar laag. Dit geeft heel karakteristieke veranderingen in het timbre van de audio-input. Voor onze perceptie heeft het
flanger∼
28
HOOFDSTUK 4. DAFX
(a)
(b)
Figuur 4.4: Eenvoudig schema van de traditionaldelay∼ (a) en de multitapdelay∼ (b)
4.3. DAFX
29
geen zin om een delay tijd onder 1, 46ms te nemen. Onze flanger heeft een feedback-lus in zich, wat een dikker geluid oplevert. Als parameters voorzien we de modulatiefrequentie (⇒ rate parameter), het feedback-niveau, de modulatiegolf (MIDI) en een ingang waarin een signaal kan gezonden worden om de variabele delay aan te sturen. Een phase shifter of phaser gaat ook een zeer kleine delay toevoegen zodat het natte signaal een andere fase heeft dan het oorspronkelijke exemplaar. Door dit te moduleren gaan verschillende delen van het frequentiespectrum van het signaal in en uit fase gaan en zo een sweepend geluid produceren. wij hebben dit ge¨ımplementeerd aan de hand van een reeks allpass-filters achter elkaar. De parameters hier zijn de modulatiefrequentie (⇒ rate parameter), de diepte van het modulatiesignaal (depth).
phaser∼
De flanger en de phaser zijn qua klank moeilijk uit elkaar te halen. Het nuanceverschil zit hem in het feit dat de flanger de delay moduleert en de phaser de fase. Natuurlijk is het zo dat wanneer er iets gedelayed wordt, er ook dan aan de fase veranderd wordt. Maar het verschil is dat bij de flanger op een regelmatige manier aan fase veranderd wordt doordat het volledige signaal gedelayed wordt, terwijl bij de phaser op een arbitraire manier aan de fase wordt gesleuteld daar alle frequenties niet op dezelfde manier worden gedelayed. Onder chorus-effecten kunnen alle effecten terecht die een koor simuleren. Het wordt bijvoorbeeld gebruikt om een zangstem te ondersteunen of een gitaarlijn voller te laten klinken door te laten uitschijnen dat de partij door meerdere mensen tegelijk wordt gespeeld. Een chorus wordt altijd ge¨ımplementeerd door verschillende versies van het oorspronkelijke signaal op te tellen bij elkaar. Dit kunnen gedelayde versies zijn, in pitch verschoven versies, versies met verschillende luidheid, fase en zo meer. . . Onze implementatie gebeurt op basis van faseverschillen en een variabel delay-netwerk. Bekijk hiervoor figuur 4.5: Het line∼ blokje zal een lineaire ramp cre¨eren van 50msec bij de overgang naar een nieuwe waarde die langs de inlet binnenkomt. Deze waarde is de frequentie van het phasor∼ blokje dat een zaagtand maakt. Deze zaagtand wordt dan gebruikt als periodische index voor het cos∼ blokje en ook voor de in fase verschoven versies ervan. De amplitude van dit cosinussignaal wordt dan aangepast door vermenigvuldiging met de waarde die binnenkomt langs de modulatie inlet. De vd∼ blokjes krijgen aan hun delay-tijd ingang dus een sinusoidale golfvorm met een bepaalde amplitude die de afwijking van de delays zal bepalen (daarom dat het cosinussignaal naar het positieve is verschoven
chorus∼
30
HOOFDSTUK 4. DAFX
Figuur 4.5: Onze implementatie in Pure Data van een chorus effect. Zeer duidelijk is het delay netwerk dat bestaat uit vier delays die π2 rad uit fase zijn ten opzichte van elkaar. door de optelling met 1). Deze vier nieuwe stemmen worden allen naar een aparte outlet geleid. Een belangrijk verschil met een echt koor is dat de delays in de realiteit negatief kunnen zijn, iemand kan een noot te vroeg inzetten. Dit kan niet in realtime. De parameters hier zijn de modulatiefrequentie (⇒ rate parameter) en de diepte van het modulatiesignaal (depth). Chorus kan ook ge¨ımplementeerd worden aan de hand van een kamfilter: zie in bijlage A (universal combfilter[4]). Kwaliteit effecten Na de volgende effecten hebben geluiden niet alleen een ander timbre, maar ook de kwaliteit wordt aangetast. De hoofdzaak bij distortion effecten (overdrive, distortion, fuzz, metal,...) is het toevoegen van nieuwe harmonischen. Daarvoor zijn niet-lineaire of tijdsvariante functies nodig. Lineaire, tijdsinvariante functies kunnen enkel bestaande harmonischen versterken en verzwakken [14]. In Matlab werkten we een dergelijke functie uit, maar bij gebrek aan idee¨en omtrent het gebruik ervan in iDAFx is er geen implementatie gemaakt voor Pure Data6. 6
het effect kan intelligent in- en uitgeschakeld worden, maar deze functie voorzien wij buiten het effect en het is hier dus niet van toepassing
4.4. CONCLUSIE
31
Vibrato is een effect dat je hoort bij veel zangers wanneer een lange noot wordt gezongen. De pitch gaat dan licht op en neer. Het secundaire attribuut is dus pitch. Ook hiervoor hebben we een Matlab implementatie gemaakt. Door een variabele delay ontstaat er een pitch-verandering (dopplereffect). Let op het verschil met tremolo: vibrato is een cyclische variatie van de pitch over de tijd, tremolo van de amplitude. Andere Het reverse effect zal een vaste fase verschuiving doen van πrad of dus een fase-omkering: y(k) = −x(k) Hierdoor klinkt het geluid wat voller en breder, vooral in een hoofdtelefoon. Het komt overeen met het omdraaien van polariteit van ´e´en van de luidsprekers. Deze faseverandering is natuurlijk slechts hoorbaar relatief ten opzichte van een niet gereverset audiosignaal. Signalen kunnen niet alleen opgeteld worden met elkaar zoals in een mengtafel, of vermenigvuldigd met een traag vari¨erend controle signaal. Een ringmodulator mixt twee audio signalen met als resultaat een metaalachtig geluid dat afhangt van de modulatiegolf die gebruikt wordt. Digitaal is dit effect zeer gemakkelijk te implementeren [4]. In het eenvoudige geval van twee sinuso¨ıdale golfvormen [15] is de som en het verschil van de oorspronkelijke frequenties hoorbaar. Om te begrijpen waar deze som en dit verschil vandaan komen, is het toepasselijk de product formule van cosinussen aan te halen: cos (αn + φ)cos(βn + ξ) 1 = [cos ((α + β)n + (φ + ξ)) + cos ((α − β)n + (φ − ξ))] (4.1) 2 Voor meer uitleg, onder andere over het verband tussen beide fundamentele frequenties, wordt verwezen naar [11]. Als belangrijkste parameter voorzien we in onze implementatie de modulatiefrequentie.
4.4
Conclusie
Er wordt een classificatie voor audioeffecten voorgesteld op basis van perceptuele kenmerken (loudness, pitch, timbre, space en time). Verschillende effecten worden uitgelegd en ge¨ımplementeerd. Enkele effecten in Matlab (die
rev∼
ringmod∼
32
HOOFDSTUK 4. DAFX
niet verder gebruikt zullen worden): vibrato, distortion, unicomb (afhankelijk van parameters: delay, chorus,. . . ) Voor gebruik in hoofdstuk 6 (iDAFx) werd een groot aantal ge¨ımplementeerd uit de verschillende aangebrachte klassen: compressor∼ , dynamics , pitchShifter∼ , tremolo , octaver∼ , pan∼ , monopanner∼ , reverb∼ , traditionaldelay∼ , multitapdelay∼ (met pingpong en reverse opties), flanger∼ , phaser∼ , chorus∼ , rev∼ , ringmod∼ . Elk effect heeft een aantal parameters die van buitenaf aanstuurbaar zijn, deze werden beschreven per effect. De uitgebreide uitleg over de interface van elk effect is te vinden in de documentatie in bijlage A of op de begeleidende website.
Hoofdstuk 5 Feature extraction 5.1
Inleiding
Het eerste systeem in een intelligent effect is een intelligente feature-detector die kenmerken uit de muziek haalt die op hun beurt als aansturing van een effect kunnen gebruikt worden. In dit hoofdstuk proberen we een classificatie te vinden om alle idee¨en te ordenen. We onderzoeken ook tal van methodes om onder andere pitch en tempo uit muziek te halen. Dit zijn zeer dankbare kenmerken om effecten aan te sturen. Ook worden een aantal abstracties voorgesteld of uitgelegd voor de Pure Data omgeving.
5.2
Classificatie
Voiced/unvoiced, silence, beat, MFCC, tempo, spectral slope, pitch, spectral centroid, RMS, akkoorden, ITD/IID, spectral tilt, loudness, rest, attack, harmonic level, residual spectral envelope, vibrato rate, tremolo depth, fundamental frequency, formants, . . .
33
34 HOOFDSTUK 5. FEATURE EXTRACTION
Figuur 5.1: Een verzameling features die kunnen gebruikt worden als control parameters, met bijgevoegd de technieken om ze te extraheren (links en volle lijnen) en de bijbehorende perceptuele attributen (rechts, gestreepte lijnen). Schuine woorden duiden op perceptuele attributen [2].
5.3. BEAT DETECTION
35
Uit muziek kunnen zoveel verschillende features gehaald worden dat het bijna onmogelijk wordt om ze allemaal te ordenen. Desondanks verwijzen we naar een benadering van Vincent Verfaille [2] daaromtrent in figuur 5.1. Hetgeen we hieruit vooral onthouden is zijn benadering die vertrekt vanuit het signaal en langs technieken om features te extraheren uitkomt op lowlevel features. Door combinatie van deze laatste ontstaan high-level features en deze convergeren dan naar de perceptuele attributen van vorig hoofdstuk (zie 4.2 op pagina 17). High-level features liggen dicht bij hoe mensen de muziek ervaren. Low-level features liggen daarentegen dicht bij hoe de computersoftware de muziek ervaart. Deze features zijn dus minder intelligent, maar daarom niet minder bruikbaar in intelligente effecten. Ze worden ook gebruikt als basisblokken voor high-level feature extractie. wij volgen in dit project niet echt een specifieke indeling. wel onderzoeken we manieren om twee high-level features te extraheren uit audiosignalen met algoritmes die voldoen aan onze realtime vereisten, namelijk beat extractie en pitch detectie. Samen met nog enkele low-level features zoeken we naar oplossingen in Pure Data.
5.3
Beat detection
Er zijn verschillende methodes om bpm te berekenen [16][17][3][18]. De meest voor de hand liggende methode is wellicht deze gebaseerd op het detecteren van pieken in het energiespectrum. Als men de gemiddelde energie van een audiosignaal over een bepaald tijdsfragment berekent en ook de ogenblikkelijke (over een veel kleiner interval dus), kan men deze ten opzichte van elkaar vergelijken. Indien het ogenblikkelijke niveau ver boven het gemiddelde uitschiet (bv. met een factor 2) kan met beslissen dat hier een beat aanwezig is. Door de tijd tussen verschillende beats bij te houden is het mogelijk de bpm te berekenen1 . Hierbij treden wat problemen op: Bij snel varierende ritmes heeft het geen zin om over een groot interval de gemiddelde energie te berekenen. Er treedt ook het probleem van overlapping op. De kick (basdrum, zie figuur 5.3), de snaardrum en de hihat van een drumstel zijn vaak signalen die in de tijd zo dicht in elkaars buurt worden geproduceerd dat ze elkaar gaan be¨ınvloeden. Dit fenomeen noemt men overlapping en heeft zijn invloed op het energieverloop in de tijd. Om dit probleem op te lossen deelt men het signaal best op in subbanden, want de overlappende signalen hebben vaak hun fundamentele frequentie in verschillenden subbanden [3]. 1
http://www.gamedev.net/reference/programming/features/beatdetection/
36
HOOFDSTUK 5. FEATURE EXTRACTION
Figuur 5.2: Een Audacity\ sessie met als eerste track de drumpartij en de twee volgende respectievelijk de lage basdrum (zie figuur 5.3) en de hoge hihat toon verkregen door wavelet transformaties [3]. We implementeerden deze methode als een abstractie in Pure Data, maar zoals verwacht waren de resultaten niet goed. Door subband-informatie op een juiste manier te combineren met wegingsfactoren en dergelijke, kan men zo al tot een betere bpm-berekening komen. Het opdelen van het signaal in subbanden is een principe dat ook bij andere technieken wordt toegepast. Men kan hiervoor FFT gebruiken maar bijvoorbeeld ook wavelets [3] (zie figuur 5.2). Deze methode heeft alleen aanvaardbare resultaten voor audiosignalen met een beat die sterk geaccentueerd is, zoals bij techno, house en hiphop. Indien dit niet het geval is of indien er zelfs geen drum aanwezig is [19], is het nog mogelijk om de bpm te berekenen, maar in die context spreekt men niet meer van echte beat-extractie, maar van ritme-extractie. Er wordt verder in de tekst geen onderscheid meer gemaakt tussen deze 2 verschillende termen. Verder worden er nog 2 andere, betere, bpm berekeningsmethodes en hun implementatie in Matlab uitgelegd: ´e´en op basis van combfilter processing en een andere op basis van de autocorrelatiemethode. Methode met kamfilters Het principe van combfilter processing is om via de correlatiefunctie in 5.1 de gelijkenis (similarity) tussen een reeks van pulstreinen yi (n) (kamfilters
5.3. BEAT DETECTION
37
Figuur 5.3: Een schematische drum-setup met benaming van de onderdelen: (1) is de kick of basdrum, (2) is de snare of snaardrum en (3) is de hihat in het frequentiedomein) en het geluidsfragment x(n) te berekenen. N −1 1 X φ(τ ) = x(n)yi (n + τ ) N n=0
(5.1)
Deze pulstreinen zijn kamfilters in het frequentiedomein en ze hebben allemaal een andere periode Ti . Men kan nagaan met welke pulstrein het signaal 60 fs kan men dan zo de de grootste gelijkenis vertoont. Aangezien Ti = bpm principal beats per minute rate afleiden [20]. Het algoritme verloopt in vier stappen2 : zie figuur 5.4. In de eerste drie stappen wordt het signaal opgedeeld in subbanden en houdt men na filtering enkel nog essenti¨ele informatie over. In de laatste stap worden deze signalen geanalyseerd met kamfilters. In de eerste stap deelt men het signaal op in zes verschillende subbanden. Dit door de FFT te berekenen en hieruit voor elke subband het gepaste deel (chunk ) te nemen. Men verkrijgt dus zes frequentiebanden en minimaliseert zo overlappingseffecten. Zoals hierboven vermeld dienen subbanden ten opzichte van elkaar afgewogen te worden. Dit kan door de breedte van de subbanden te vari¨eren. Elke subband is even belangrijk, maar door 2
http://www.owlnet.rice.edu/∼elec301/Projects01/beat sync/beatalgo.html
38
HOOFDSTUK 5. FEATURE EXTRACTION
Figuur 5.4: Schema van de vier stappen van het beat detectie algoritme beschreven in sectie 5.3: (a) opdeling in subbanden, (b) omhullende-extractie, (c) differentiatie en half-wave rectifier en (d) correlatie met kamfilters.
5.3. BEAT DETECTION
39
de subbanden in het lage frequentiegebied smaller te nemen, krijgen deze frequenties meer belang. Door inverse FFT toe te passen verkrijgt men terug zes tijdsignalen. Stap 1 wordt berekend in filterbank.m (zie appendix B) met parameters fs en bandlimits, waarmee de subbandverdeling wordt bepaald. In de tweede stap worden de signalen omgezet naar hun omhullende (envelope) omdat het voldoende is enkel bruuske veranderingen in een signaal op te sporen. Men voert een laagdoorlaatfilteroperatie uit: om dit te bekomen worden de negatieve amplitudes van het tijdsignaal naar de postieve kant gespiegeld om zo de hoogfrequente inhoud van het signaal te verminderen (full wave rectifying). Daarna convolueert men het signaal met de rechterhelft van een Hanning venster met tijdsconstante 0.4s. Deze operatie wordt uitgevoerd als een vermenigvuldiging in het frequentiedomein omdat hierdoor aan berekeningstijd wordt gewonnen. Stap 2 wordt berekend in hwindow.m met parameters fs , bandlimits en winlength = 0, 4s. In de derde stap worden de signalen gedifferentieerd. Zo kan men amplitudeveranderingen van het signaal detecteren. De grootste veranderingen komen dan in principe overeen met de beats in het signaal. Na differentiatie worden de negatieve waarden verwaarloosd. Op die manier kijkt men alleen naar een stijging in amplitude [21]. Stap 3 wordt berekend in diffrect.m met parameter nbands overeenkomend met het aantal subbanden, in dit geval dus zes. In de vierde stap wordt een reeks kamfilters (pulstreinen in het tijdsdomein) opgesteld die elk overeenkomen met een bepaalde bpm. Elk van de zes signalen wordt met iedere pulstrein geconvolueerd. Dit gebeurt in het frequentiedomein als een vermeningvuldiging van de FFT van het subbandsignaal met de FFT van een pulstrein. De FFT van een pulstrein komt overeen met een kamfilter, vandaar dat men in deze context ook spreekt van correlatie met een kamfilter. Voor elk subbandsignaal wordt de energie van het resultaat berekend. Voor elke kamfilter worden voor de zes subbandsignalen deze energiewaarden opgeteld. Zo bekomt men een energiewaarde per bpm. Dit resulteert in een smalle energiepiek voor de fundamentele bpm waarde, gevolgd door bredere pieken op de veelvouden van die bpm waarde. De maximumwaarde komt overeen met de bpm van het audiosignaal. Het spreekt vanzelf dat deze laatste stap het meest rekenintensief is. Dit wordt bevestigd met de Matlab Profiler\ . Immers meer dan 90% van de rekentijd wordt besteed in de laatste stap en dit wijst erop dat het de moeite loont deze stap maximaal te optimaliseren. Stap 4 wordt berekend in timecomb.m met parameters fs , bandlimits, acc (=stapgrootte), minbpm en maxbpm die de grenzen van het interval tussen twee tellen voorstellen waarin gezocht moet worden. toepassen van de volgende stappen leidt tot een optimalisatie van het
40
HOOFDSTUK 5. FEATURE EXTRACTION
algoritme: geheugen alloceren buiten de for -loop en convolutie berekenen als een vermenigvuldiging in het frequentiedomein (zie figuur E.1 op pagina 78). Specifiek heeft het veranderen van ´e´en regel code in timecomb.m tot nog redelijk wat tijdwinst geleid, namelijk x = (abs(dftfil.*dft(:,i))).^2; vervangen door xtemp = dftfil.*dft(:,i); x = xtemp.*conj(xtemp); Op die manier wordt de Matlab abs.m vermeden. Deze neemt veel tijd in beslag (zie figuur E.1(c)). Dat deze code op hetzelfde neerkomt, is omdat een vermenigvuldiging van een complex getal met zijn complex toegevoegde de modulus van dat complex getal oplevert (in het kwadraat). Dit is dus een re¨eel getal. beatdetect.m brengt vorige vier m-files samen. Buiten het signaal sig moet men ook de bemonsteringsfrequentie fs en de stapgrootte acc meegeven. Er wordt gezocht naar bpm waarden binnen het interval [65, 200]. Men kan dit algoritme gebruiken om een iteratief proces op te starten. Begin met een grote stapgrootte en dito bereik, vervolgens een kleinere stapgrootte en bereik, enz. . . . In beatdetect.m kan je voor acc ook een vector meegeven van opeenvolgende stapgroottes. Indien acc=[20 5 1] wordt in de eerst stap gezocht in stappen van 20. Vindt men bijvoorbeeld een bpm waarde van 105 bpm, dan zal in de volgende stap gezocht worden in het interval [105-20/2, 105+20/2] = [95, 115] met stapgrootte 5. Stel dat men dan een bpm waarde 110bpm vindt, dan zoekt men in de volgende stap in het interval [110-5/2, 110+5/2] = [107.5, 112.5] met stapgrootte 1. Op die manier moeten heel wat minder kamfilters opgesteld worden om daarna met de subbandsignalen te correleren. Zo wint men dus berekeningstijd. De resultaten echter zijn teleurstellend: er is geen goed gedefinieerd convergentiegedrag (zoek in bijlage B naar optima1 en optima2, verkregen met optimise.m). Dit komt omdat de bpm curves heel grillig zijn (figuur 5.5(a)) en bij een grote stapgrootte de kans groot is dat men een verkeerde piekwaarde selecteert en daarna dus in het verkeerde gebied gaat verder zoeken (zie figuur 5.5). Er zijn nog andere methodes om de berekeningstijd in te korten. Men kan kiezen voor een statistische stapgrootte: aan onwaarschijnlijke bpm waarden wordt minder aandacht besteed door in deze gebieden een grotere stapgrootte te kiezen. Een bpm van meer dan bv. 180bpm is niet echt gangbaar en men kan voor het interval erboven een grotere stapgrootte nemen. Deze methode werd echter niet ge¨ımplementeerd. Het probleem bij het werken
5.3. BEAT DETECTION
41
Figuur 5.5: hier wordt door de kamfiltermethode een verkeerde piek gekozen omdat de stapgrootte te groot is.
42
HOOFDSTUK 5. FEATURE EXTRACTION
met verschillende stapgroottes is dat men door het verwaarlozen van informatie in het foute gebied kan terechtkomen. De stappen nadien kunnen geen juist resultaat meer opleveren. Wordt een methode gebruikt die in de eerste stap(pen) wel in staat is om een goede gok te doen, kan men nadien gebruikmakend van de kamfiltermethode, met stapgrootte 1, wel een juist resultaat vinden. Dit heeft ook een tijdwinst als gevolg. Deze methode is gebaseerd op het concept van predictie. De autocorrelatiemethode wordt gebruikt als predictiemethode. Autocorrelatiemethode Het principe van autocorrelatie voor het detecteren van bpm maakt gebruik van de periodiciteit van het audiosignaal [16]. Indien je het signaal verschuift over een bepaalde tijdspanne en dit correleert met het oorspronkelijke signaal zal dit pieken geven daar waar de verschuiving overeenkomt met de periodiciteit van het signaal. Leg een verband tussen een verschuiving ti en de s bpm-waarde die ermee overeenkomt3 ti = 4∗60∗f en indien een piek gevonden bpm wordt, kent men de bpm-waarde die ermee overeen komt. De autocorrelatiefunctie is gedefinieerd als [22]: N −τ 1 X x(n)x(n + τ ) φ(τ ) = N − τ n=1
In beatdetect auto.m staat de laatste methode uitgewerkt met de volgende parameters: fs en kleine en grote stapgrootte stepS en stepB. De autocorrelatiemethode blijkt performant genoeg te zijn om op zichzelf te staan en hoeft dus niet per se als predictiemethode gebruikt te worden (zoek in bijlage B naar optima1 auto en optima2 auto voor resultaten, verkregen met optimise auto.m) .Deze methode werkt bovendien ook sneller dan de kamfiltermethode (1 a` 50 ms versus 20 s). Het lijkt alsof deze dan wel geschikt is voor realtime-applicatie. Het is echter zo dat beide methodes op een venster van minstens 3.5 seconden worden toegepast. De bpm kan dus enkel maar met een relatief grote vertraging berekend worden en de kans is dus bestaande dat, wanneer de feature berekend is en klaar voor gebruik, het audiosignaal al van tempo is veranderd. Op dat ogenblik zegt de feature enkel iets over het verleden. Er is dus een probleem bij frequent wisselende ritmes. De methodes gebaseerd op pieken in de energiewaarden zijn wat berekeningstijd betreft het meest geschikt voor realtime, maar deze geven minder goede resultaten. Een trade-off moet dus gemaakt worden. De keuze van het gepaste algoritme hangt af van de situatie. 3
http://pierre.fritsch.free.fr/supelec/bpm/rapport bpm.pdf
5.4. PITCH DETECTION
5.4
43
Pitch detection
Een volgende high-level feature die we dieper hebben onderzocht is pitch of fundamentele frequentie. Zeer veel technieken en onderzoeken zijn hierrond al gedaan in de literatuur en in de praktijk. Het probleem lijkt zelfs opgelost voor monofone signalen. Maar voor polyfone signalen is het probleem nog niet opgelost en er bestaan nog geen algoritmes die in alle situaties de pitch juist berekenen.Er zijn wel veel methodes voorgesteld die allen in bepaalde omstandigheden en gevallen goed werken: Harmonic matching method [23], parallel processing methods [24], Harmonic product/sum spectrum [25], maximum likelihood, LPC [26], Subharmonic-to-harmonic ratio [27], dubbele fourier transformaties [7], cepstrum-biased HPS, (weighted) autocorrelation function [6],. . . pitch detectie algoritmes voor dit project moeten kunnen voldoen aan verschillende voorwaarden in een live setting. Dit betekent dat er veel achtergrondruis is en dat het systeem causaal moet zijn. Er is geen kans meer om achteraf fouten te verbeteren. Fouten moeten zo goed mogelijk vermeden worden door bijvoorbeeld post-processing. Er moet ook goed op de latency gelet worden, de vertraging van het algoritme. Hier is er een verschil tussen attack latency en pitch latency: Er zijn minstens zeven cycli nodig alvorens iemand een pitch kan defini¨eren, terwijl een attack onmiddellijk gehoord wordt [6]. De voorwaarden waaraan het perfecte pitch-detectiealgoritme moet voldoen, zijn: nauwkeurigheid tot op halve tonen, de juiste octaaf detecteren, omkunnen met verschillende harmoni¨en (welgetemperd, gelijkzwevend,. . . ) en het op tijd herkennen van een kwaliteitsvolle pitch. Er is geen enkel algoritme dat dit kan, laat staan dat een mens in elk geval aan deze voorwaarden kan voldoen. De benadering is dus dat een algoritme dezelfde resultaten geeft als een mens. Het begrip pitch bestond al voor dat er gesproken werd van frequentie. Het verband is ongeveer logaritmisch: als de frequentie verdubbelt, verhoogt de pitch een octaaf (maar dit is frequentieafhankelijk en intensiteitsafhankelijk). Bij sinuso¨ıdale signalen is de frequentie duidelijker, terwijl bij meer harmonisch gerelateerde signalen met een rijker spectrum de pitch duidelijker is. Natuurlijke tonen lijken dus meer in tune [28]. Wij onderzochten vier algoritmes voor gebruik in dit project, zowel in het tijdsdomein: de gewogen autocorrelatie functies, als in het frequentiedomein: Harmonic product spectrum (HPS), maximum likelihood [25], en een FFTgebaseerde benadering.
44
HOOFDSTUK 5. FEATURE EXTRACTION
Figuur 5.6: Het schema van de pitch-extractie methode harmonic product spectrum met vijfmaal downsampling. Het resultaat van het product is te c sv.mazurka.org.uk vinden in het onderste spectrum.
5.4. PITCH DETECTION
45
Harmonic product spectrum Dit is de simpelste methode om te implementeren en ze heeft bovendien een zeer lage berekeningslast [6]. We leggen hier onze implementatie uit in Matlab (te vinden in bijlage B). We delen het signaal op in frames, zetten er een Hanning venster op en berekenen de STFT aan de hand van het fft commando. Deze spectrale frames X(ω) downsamplen we enkele keren en dan berekenen we het product: Y (ω) =
R Y r=1
|X(ωr)|
In ons geval is R het aantal harmonischen, gelijk aan 5 (zie figuur 5.6). In Y (ω) wordt nu gezocht naar een maximum voor een bepaalde mogelijke fundamentele frequentie: Yb = maxωi {Y (ωi )}
Bij het gebruik van een STFT voor snelle berekeningen is er een lage frequentieresolutie, hierdoor is er dus sowieso ook een lage pitch-resolutie. De resolutie van de HPS methode is dus maar zo goed als de lengte van de gebruikte FFT. De methode is resistent tegen additieve en multiplicatieve ruis maar maakt veel onjuise beslissingen over de juiste octaaf waarin een noot ligt. Dit laatste kan opgelost worden met extra post-processing. Er is ook nog de cepstrum-biased HPS die zeer robuust is voor multipitchdetectie en vaak gebruikt wordt in de spraakwereld [6]. Maximum likelihood Deze methode wordt gebruikt voor de implementatie van het fiddle∼ blokje in Pure Data. Eerst wordt een lijst van pieken en hun amplitudes gemaakt. Uit deze lijst wordt dan een fundamentele frequentie genomen bij vergelijking met voorgedefinieerde frequentiespectra. De gelijkenis wordt hierbij gemeten door een maximum likelihood-functie.Het blokje fiddle∼ dat standaard in Pure Data aanwezig is, is gebaseerd op dit principe. Als initialisatiewaarden kunnen de venstergrootte worden meegegeven, het aantal pieken die moeten aangeduid worden (standaard 1) en het aantal pieken die geanalyseerd moeten worden (standaard 20). De eerste uitgang geeft een pitch-waarde als er een stabiele waarde gevonden is (door post-processing weet men zeker dat deze waarde bij een stemhebbende klank hoort in geval van zang). De tweede uitgang geeft een bang op een onset, los van het feit of er een pitch is gevonden of niet. De vierde uitgang geeft het signaalvermogen
fiddle∼
46
HOOFDSTUK 5. FEATURE EXTRACTION
in dB. Uit de tests met dit blokje bleek het goed te werken voor instrumenten met een vaste stemming (toetsinstrumenten, fluiten,...) en presteerde het ook goed voor gezongen stem. Dit is zeker goed genoeg voor het gebruik in iDAFx. Gewogen autocorrelatiefunctie Deze methode is analoog aan die bij beat detection in sectie 5.3. Deze tijdsdomeinimplementatie gaat uit van de periodiciteit van een signaal: tussen twee periodes is er een relatieve tijdsinvariantie en die is min of meer onafhankelijk van de amplitude. De autocorrelatiefunctie vergelijkt het signaal met verschoven versies van zichzelf: N −1 1 X x(n)x(n + τ ) φ(τ ) = N n=0
Men kan hiervoor ook de average magnitude difference function(AMDF) gebruiken die pieken zal hebben waar de autocorrelatie functie dalen heeft [6]: N −1 1 X ψ(τ ) = |x(n) − x(n + τ )| N n=0
Doordat deze methode naar de periodiciteit kijkt, is ze vrij ongevoelig voor ruis. Anderzijds is ze rechtstreeks afhankelijk van de bemonsteringsfrequentie fs . Als fs laag is, is ook de pitch-resolutie laag. Om ook de laagste frequenties te kunnen detecteren, moet de venstergrootte minstens twee keer groter zijn dan de langste periode. Bij 44.1kHz en laagste frequentie 20Hz komt dat overeen met ongeveer 1200 samples. FFT-gebaseerde benadering We onderzochten ook een FFT gebaseerde benadering uit DAFx [4]. In de kern gebruikt dit algoritme gevensterde frames waarvan telkens de FFT wordt berekend. De lokale maxima Xi (k) hiervan worden gebruikt als initi¨ele voorspelling voor de fundamentele frequentie. Om de frequentieresolutie te verbeteren gebruiken we de fase-evaluatie. Hieruit komen de pitch kandidaten (zie figuur 5.7). De uiteindelijke voorspelling van de fundamentele frequentie is: 1 φ2u − φ1 1 ˆ Ω0 = fs fˆ0 = 2π 2π R
5.4. PITCH DETECTION
47
Figuur 5.7: Het schema van een FFT-gebaseerde pitch-detectiemethode met c fase-evaluatie. DAFx [4] zie figuur 5.7) Hierna wordt nog een deel post-processing voorgesteld: eerst en vooral wordt de laagste kandidaat geselecteerd. De gemiddelde pitch wordt vergeleken met de gedetecteerde pitch en als de afwijking van de gemiddelde pitch groter is dan een threshold dan wordt het stukje gemarkeerd als unvoiced. Zo worden geen pitch-kandidaten meegerekend van stemloze stukken. Ten tweede voeren we een segmentatie om te korte fragmentjes te elimineren. Deze methode houdt geen rekening met het harmonisch spectrum van het signaal en dit zou een sterke verbetering kunnen opleveren. Men kan deze methode bijvoorbeeld combineren met de HPS-methode. Om te zien hoe dit algoritme presteert op een gezongen stuk verwijzen we naar figuur 5.8. Vergelijking We kunnen alle algoritmes dus typisch indelen in tijdsdomeintechieken (autocorrelatie, AMDF,. . . ) en frequentietechnieken (HPS, cepstrum methodes en maximum likelihood). De tijdsdomeinmethodes zijn in het algemeen goedkoper in uitvoering daar er geen FFT hoeft berekend te worden. Die FFT berekening wordt trouwens duurder naargelang er meer nauwkeurigheid vereist is. Doordat tijdsdomeintechnieken zich vooral richten op de periodiciteit van een signaal, werken deze methodes het best op zeer regelmatig periodische signalen, maar kunnen ze ook enkel monofone signalen aan. Afhankelijk van de implementatie hebben ze last van octaaffouten. Frequentiedomeinmethodes daarentegen richten zich op de harmonische inhoud van signalen en
48
HOOFDSTUK 5. FEATURE EXTRACTION
(a)
(b)
(c)
Figuur 5.8: Onze resultaten op een extract van Tom’s Diner van Suzanne Vega met verschillende parameters. De melodie is visueel goed te volgen. (a) grote bloklengte K, (b) kleine bloklengte K, (c) grote verschuiving R.
5.5. ANDERE FEATURES
49
kunnen daardoor wel polyfone signalen aan, maar zoals gezegd zijn ze vaak rekenintensiever.
5.5
Andere features
Er zijn verschillende andere high-level features die fijn zouden zijn om te gebruiken, daar ze dicht bij de manier staan waarop de mens muziek ervaart. Er is ook een combinatie mogelijk van algoritmes: zo kan enerzijds een algoritme voor akkoordendetectie [29] een tempo-tracker helpen door aan te nemen dat als het akkoord verandert er dan ook een nieuwe maat begint. Onze pitch detector in Pure Data fiddle∼ detecteert onsets van noten [30][31]. We maakten zelf een eerder low-level reeks feature-extractie-abstracties in Pure Data: een attack - of onset-detector, een rust- of stiltedetector, envelope followers voor het meten van de RMS of ogenblikkelijke signaalvermogens, een spectrum analyzer om te kijken waar de attacks zich bevinden,. . . . Een aantal hiervan verzamelen we in het analyzer blokje. Het gebruikt een fiddle∼ , bonk∼ en env∼ blokje voor het verzamelen van allerlei features. De eerste uitgang geeft een stabiele pitch waarde aan, de tweede een RMS berekend op een venster van 65536 samples. Het ogenblikkelijke signaalvermogen wordt gegeven door de bovenste nummerbox. De laatste uitgang geeft een bang wanneer er een onset gedetecteerd wordt. Het bonk∼ blokje wordt gebruikt om een spectrale analyse van 11 banden te maken. De centrale frequenties en bandbreedtes per band zijn, omgerekend naar Hz (bij een fs van 44100Hz) en afgerond: (172, 172), (344, 172), (517, 172), (730, 244), (1032, 344), (1459, 486), (2063, 688), (2918, 973), (4127, 1376), (5837, 1945), (8253, 2751) Ter compensatie voor het niet-verwezenlijken van een high-level beatdetector in Pure Data, maakten we een tap blokje, dat gecombineerd met een afronding (round) en een omrekening naar periode (bpmtotime) een delayparameter berekent.
5.6
Conclusie
In dit hoofdstuk werd een voorstel gedaan voor een indeling van features, maar dat bleek moeilijker dan voor effecten. Hieruit werd geleerd dat er een onderscheid bestaat en moet gemaakt worden tussen low-level en high-level features. Ons onderzoek naar verschillende methodes voor het detecteren
env∼ analyzer bonk∼ fiddle∼
50
HOOFDSTUK 5. FEATURE EXTRACTION
van high-level features tempo en pitch en de geschiktheid van deze algoritmes werd besproken. Beat-detectie-algoritmes die bestudeerd zijn, zijn een methode met kamfilters en een autocorrelatiemethode. Voor pitch-detectie werden volgende algoritmes onderzocht in het tijdsdomein: de gewogen autocorrelatiefuncties en in het frequentiedomein: Harmonic product spectrum, Cepstrum biased HPS, maximum likelihood, en een FFT-gebaseerde benadering. Het in de tijdspanne van dit project omzetten van deze algoritmes naar C-code die interpreteerbaar zijn door Pure Data is onmogelijk gebleken. Hoewel dit vrij eenvoudig kan, moeten er eerst nog wat compatibiliteitsproblemen opgelost worden (platform-afhankelijke compilers, bibliotheken,. . . ). In de plaats werden een reeks Pure Data blokjes gemaakt en voorgesteld die de volgende features extraheren: RMS, ogenblikkelijk signaalvermogen, pitch, onset of attack, rust of stilte en spectrale vermogenverdeling. Voor documentatie over zelfgemaakte objecten en Matlab implementaties van methodes wordt er verwezen naar bijlage B.
Hoofdstuk 6 Intelligente DAFX 6.1
Inleiding
In dit hoofdstuk werken we het eenvoudig schema van iDAFx (figuur 1.1 op pagina 4) verder uit. Het probleem dat hier opgelost wordt, is: hoe verbindt men de resultaten van feature-extractie met een effect. Het allereenvoudigste voorbeeld is een bijectieve transformatie die het kenmerk rechtstreeks mapt op een effect parameter. De mapping kan dus bekeken worden als een controle-curve of als een overdrachtsfunctie, of als een transformatie, enzovoort. Men kan dit op twee manieren aanpakken: ofwel tracht men een zeer algemeen, modulair framework te bouwen, ofwel bedenkt men enkele effecten en werkt die geoptimaliseerd uit. Omwille van Pure Data, dat juist gericht is op modulair werken, werd hier gekozen voor een benadering als een algemeen framework. We werken eerst een algemene mapping uit zoals voorgesteld in [5] en een aantal mapping-functies voor gebruik in onze implementaties van iDAFx. Daarna bespeken we enkele concrete implementaties in Pure Data. Alle uitgebreide informatie voor implementaties is te vinden in bijlage C of op de begeleidende website. Daar zijn ook alle codes en patches te vinden.
6.2
Mapping
Er kan gesproken worden over drie vormen iDAFx afhankelijk van het signaal waarvan kenmerken worden ge¨extraheerd. Auto-adaptieve effecten zoeken features uit hetzelde signaal als het signaal dat in het effect gaat (zie fig 6.1(a)), iDAFx of externe adaptieve effecten halen kenmerken uit minstens ´e´en ander signaal (zie figuur 6.1(b)). Feedback-adaptieve effecten extraheren features uit het uitgangssignaal van het effect [2] (zie figuur 6.1(c)). Er zijn nog mogelijkheden tot combinaties, maar we hebben hier niet tot doel een ex51
52
HOOFDSTUK 6. INTELLIGENTE DAFX
(a)
(b)
(c)
Figuur 6.1: Een schema van iDAFx met verschillende bronnen voor feature extractie: (a) auto-adaptief, (b) extern adaptief en (c) feedback adaptief haustieve classificatie te bekomen. De mapping tussen de features en de effectparameters varieert van zeer eenvoudig (one-to-one) tot zeer complex (N-to-M ). Ze kan lineair zijn of niet-lineair [5]. Ze kan bestaan uit een simpele omrekening tot een complex modulair geheel van combinaties, scalering en zo meer. Meer specifieke systemen zijn te vinden in [32], [33] en [34]. In de subsectie 6.2.1 bespreken we een algemene mapping naar het idee van [5] en in subsectie 6.2.2 werken we nog een aantal andere eenvoudige mappings uit voor gebruik in Pure Data.
6.2.1
Algemene mapping
Deze mapping-methode die we uitkozen voor implementatie in Pure Data is modulair opgebouwd uit drie processen. (die al dan niet toegepast kunnen worden). We combineren meerdere features uit het ingangssignaal x1 (n) (auto-adaptief) die gemapt worden op ´e´en effectparameter. De drie stappen zijn (zoals in figuur 6.2): lineaire combinatie en normalisatie, mapping (nietlineair) en een scalering om de gemapte curve te laten passen op de grenzen van de effectparameter.
6.2. MAPPING
53
Figuur 6.2: Een concreet mapping schema voor auto-adaptieve effecten die meerdere features combineren om ´e´en effectparameter aan te sturen (naar het idee van [5]).
54
HOOFDSTUK 6. INTELLIGENTE DAFX
Figuur 6.3: Onze Pure Data abstractie voor de lineaire combinatie van drie features. Lineaire combinatie combine
N genormaliseerde features Fn (k), k = 1, . . . , KT (met T de stapgrootte) worden gecombineerd door de volgende formule: Fcombined (k) = P
1
n
γn
X n
γn
Fn (k) − Fnm FnM − Fnm
met Fcombined (k) de gewogen en genormaliseerde feature. Fnm = minn∈[1;N ] (|Fn (k)|) is de minimale waarde van alle features en FnM = maxn∈[1;N ] (|Fn (k)|) de maximale waarde. Deze waarden worden dan gebruikt voor een normalisatie. γn is het gewicht van de n-de feature. Onze abstractie voert deze vergelijking rechtlijnig uit in Pure Data voor drie features: Fcombined (k) =
γ1 F1 (k) + γ2 F2 (k) + γ3 F3 (k) γ1 + γ2 + γ3
De bang blokjes werden toegevoegd om te garanderen dat elke update aan een cold inlet onmiddellijk meegerekend wordt. Let wel: de uitgang is slechts genormaliseerd indien de ingangen dat ook waren.
6.2. MAPPING
55
Mapping Het resultaat van de vorige stap wordt nu gemapt volgens een bepaalde gekozen mapping functie M. Wij implementeerden abstracties in Pure Data die de volgende mapping functies uitvoeren:
mapLinear mapLin
M1 (Fcombined (k)) = a ∗ Fcombined (k) + b, lineair met a, b ∈ R 1 + sin(π(Fcombined(k) − 0.5)) , sinus 2 die de controle waarde meer naar 0 of 1 trekt. tm Fcombined (k) < tm tM −tm tM Fcombined (k) > tM M3 (Fcombined (k)) = , truncated tM −tm Fcombined (k) t < F m combined (k) < tM tM −tm M2 (Fcombined (k)) =
die toelaat slechts het interessante gedeelte van de feature te gebruiken dat tussen de ondergrens tm en bovengrens tM ligt. α−F combined (k) ) ( α Fcombined (k) ≤ α sm M4 (Fcombined (k)) = , stretched F (k)α ) ( combined sM 1−α Fcombined (k) > α
mapSine mapTime mapTimeS
mapTrunc mapTruncS
die de feature tot aan α compacteert tussen sm en 1, en vanaf α verwijdt tussen 1 en sM . Dus α verdeelt het domein van de feature in twee delen, het laagste zal compacter worden en het hoogste wordt uitgerokken. sm ≤ 1 is de contractiefactor en sM > 1 de dilatatiefactor. De volgende functies zijn gebaseerd op vensterfuncties, maar ze worden gebruikt als overdrachtsfunctie. Het zijn dus geen vensters in deze context. 2πk 4πk M5 (Fcombined (k)) = b0 − b1 cos + b2 cos Fcombined (k)a K K
waarbij voor Hamming b0 = 0.54, b1 = 0.46 en b2 = 0, voor Hanning b0 = b1 = 0.5 en b2 = 0 en voor Blackman b0 = 0.42, b1 = 0.5 en b2 = 0.08. Men kan langs de tweede inlet van de window -blokjes a aanpassen. Als a > 1 dan verschuift het zwaartepunt van de controlecurve naar rechts, als 0 < a < 1 dan verschuift het naar links. Zo kan meer nadruk gelegd worden op een niet centraal deel van de feature. Voor a = 1 is het midden van het feature-interval het sterkst benadrukt. 1 k Fcombined (k)a , Gauss M6 (Fcombined (k)) = exp − 2 σ K2
windowBig windowSmall
56
HOOFDSTUK 6. INTELLIGENTE DAFX
met σ = 0.25 en a dezelfde betekenis als hierboven. Deze vensterachtige transformaties werden ge¨ımplementeerd aan de hand van tables waarin de waarden van de functie opgeslagen zijn. Men kiest dan een table en zo wordt de ingang op de uitgang gemapt. Men zou ook de functie zelf kunnen implementeren (wat waarschijnlijk gemakkellijker gaat wanneer dit in C gebeurt en men het dan als external gebruikt in Pure Data) en zo de functie nog aanpasbaar maken afhankelijk van de beschikbare parameters. We leggen hier ook nog kort het mapLinear blokje uit dat eigenlijk niet helemaal lineair is. Het bestaat wel uit maximaal vier lineaire delen. Hiervoor verwijzen we naar figuur 4.2. Er werd vanuit gegaan dat de curve begint in 0. Dan is er genoeg informatie om alle snijpunten met de y-as te berekenen als men de richtingsco¨effici¨enten en de knikpunten heeft. De vergelijkingen hiervoor staan ook in figuur 4.2. In het blokje worden eigenlijk vier lijnen gemaakt door het mapLin blokje te gebruiken. De ingangswaarde zal vergeleken worden met de knikpunten door moses blokjes1 en doorgestuurd worden naar de van toepassing zijnde rechte. Vermits deze keuze exclusief is, kunnen de vier rechten tegelijkertijd bestaan. Het mapSine blokje is nog een eenvoudig voorbeeld van een abstractie in Pure Data . sin∼ werd door ons ge¨ımplementeerd als een in fase π2 verschoven versie van het standaard beschikbare cos∼ blokje. De ingewikkeldere en grotere implementaties zijn achteraan te vinden (bijlage C) en op de website.
Scalering D(k) = dm + (dM − dm )M(Fcombined (k)), k = 1, . . . , KT scale scaleS
met dm de ondergrens van de effectparameter en dM de bovengrens. D(k) is nu een controlesignaal dat net op het parameterbereik past van het effect waarop deze mapping toepassing heeft. Al deze stappen kunnen desnoods ook apart gebruikt worden, of er kunnen stappen overgeslagen worden, maar dan moet er opgepast worden met grenzen en dergelijke. 1
moses stuurt alles wat kleiner is dan de waarde die langs zijn rechterinlet is doorgegeven buiten langs zijn linkeroutlet . Alles wat groter is of gelijk aan die waarde gaat langs rechts buiten
6.2. MAPPING
57
Figuur 6.4: Onze Pure Data abstractie voor de scalering naar de grenzen van een effectparameter
6.2.2
Specifieke mapping
We ontwikkelden ook enkele concrete mappings die niet in het vorige rijtje passen: we hebben het over een emphenvelope-blokje adsr , enkele wiskundige omrekeningen ( bpm2time en round ) en een wave generator waves . Envelope
adsr
Deze abstractie is zeer handig in gebruik om overgangsverschijnselen weg te krijgen, of gewoon aan te passen naar believen. Een emphenvelope wordt gekenmerkt door een attack, decay, sustain en release. De attack (in msec uitgedrukt) bepaalt hoelang het duurt vanaf de aanslag (een 1 bericht) vooraleer de waarde het maximum bereikt. De decay (in msec uitgedrukt) is de tijd die de waarde erover doet om naar het sustain niveau te dalen (uitgedrukt in % ten opzichte van het maximale niveau). Dit niveau wordt aangehouden tot er een 0 ontvangen wordt (release). Vanaf dan begint de release-tijd te lopen (uitgedrukt in msec) die bepaalt hoe lang het duurt vooraleer de waarde terug 0 is. De maximale waarde en de ADSR-waarden kunnen meegegeven worden als argumenten. Omrekeningen bpm2time wordt uitgelegd in hoofdstuk 2. Het wordt bijvoorbeeld gebruikt om de delay-tijd te berekenen van een delay-effect aan de hand van het tempo van een nummer (in bpm uitgedrukt) dat verkregen kan zijn door beat-extractie of door het manueel tappen.
bpm2time round
58
HOOFDSTUK 6. INTELLIGENTE DAFX
Pure Data werkt intern enkel met floats voor getalwaarden. Er is een blokje dat integers opslaat ( int ) en doorstuurt als het getriggerd wordt met een bang. Dit blokje kan de functie afknotten vervullen (emphfloor). Maar een echte afrondingsfunctie wordt niet aangeboden. We maakten hier een abstractie voor die aan de hand van het verschil van de integer waarde en de float-waarde weet of het de integer-waarde met rust laat of er een 1 bij optelt om naar boven af te ronden.
waves
Wave generator Hierin worden vijf golven gemaakt die aangestuurd kunnen worden door features en die op hun beurt effect-parameters kunnen aansturen. E´en zaagtand golf wordt gebruikt als periodisch herhalende index voor andere golven. Elke golf wordt verschoven zodat de uitgangswaarden zich tussen 0 en 1 bevinden. Een gebruiker kan in onze implementatie de verschillende golven doorlopen aan de hand van een MIDI control change value \ . Dit wordt verwezenlijkt met een modulo teller. Dit blokje heeft ook een intelligente versie (zie figuur 6.5) waarbij de frequentie van de golf wordt aangestuurd door het tempo van de muziek. Vermits de tijd tussen beats in msec uitgedrukt is, vindt er hier een scalering plaats: f (Hz) =
6.3
1000 T (msec)
iDAFx: toepassingen
Met de verzameling mogelijkheden die we opbouwden gedurende het onderzoek is de lijst combinaties bijna oneindig. Het is een zeer interessante zoektocht die de auteurs alleszins al uren kan gekluisterd houden aan hun computer en instrumenten. Het is een creatieve zoektocht naar de vetste, sterkste en opvallendste effecten enerzijds, en naar de subtiele nuances anderzijds. Het resultaat van de mapping kan z´oveel invloed hebben op het interessantzijn van iDAFx: de ene transformatie kan als input voor de andere gebruikt worden (bijvoorbeeld twee waves-blokjes achter elkaar of twee vensterblokjes achter elkaar of. . . ), verschillende features kunnen gecombineerd worden (zoals reeds aangebracht in sectie 6.2.1), zelfs verschillende inputsignalen kunnen met verschillende kenmerken (al dan niet gecombineerd met kenmerken van andere tracks) en verschillende mappings verschillende effecten aansturen die desnoods weer als input van andere effecten of feature-detectors
6.3. IDAFX: TOEPASSINGEN
59
Figuur 6.5: (a) Onze implementaie in Pure Data voor de afrondingsmethode, en (b) de adsr-curve
60
HOOFDSTUK 6. INTELLIGENTE DAFX
kunnen gebruikt worden, enzovoort, enzovoort. Enkel deze zin al toont dat de mogelijkheden quasi onuitputtelijk zijn.
6.3. IDAFX: TOEPASSINGEN
Figuur 6.6: Een concrete Pure Data patch met een aantal ge¨ımplementeerde iDAFx. 61
62
HOOFDSTUK 6. INTELLIGENTE DAFX
Toch presenteren we hier enkele kant-en-klare iDAFx. We hebben een concrete Pure Data patch gemaakt (zie figuur 6.6) zoals het zo gemakkelijk gaat met dit programma: men begint met enkele blokjes, luistert naar het effect en voegt blokjes toe. Het eindresultaat ziet er grafisch niet zo mooi uit als het met Max/MSP zou zijn, maar alles wordt duidelijk in de volgende paragrafen (zie figuur ?? voor de volledige patch). De patch vertrekt van slechts vier stereo inputs (meer is niet nodig om uren te kunnen musiceren). Deze inputs zijn in de vorm van wave files met exact dezelfde lengte en hetzelfde tempo. Ze kunnen door middel van de replay functie continu afgespeeld worden. De originele signalen en de natte signalen worden alle apart naar de master sectie gestuurd. Zo zijn er, los van andere effecten, reeds zeer veel mogelijkheden om de tracks te mixen: elk kanaal heeft een externe volumeregelaar, pan-positieregelaar en mute-knop. Indien deze niet in gebruik zijn door intelligente parameters, worden deze best aangestuurd met MIDI controls. Hiervoor dienen de ctlin blokjes. Een mechanisme om voorrang te geven aan bepaalde klasses van controle kan nog uitgewerkt worden. De patch bestaat uit enkele idee¨en voor auto-iDAFx die op eender welke manier kunnen uitgebreid worden: een Intelligent Live Bass Arpeggiator, een Intelligent Sample Tuner (met pitchShifter en reversedelay) en een Intelligent Panoramaker. Intelligent Live Bass Arpeggiator Deze effectenmodule bepaalt het tempo van zijn signaalingang. Zoals reeds duidelijk gemaakt is, gebeurt dit nog niet aan de hand van een tempo detector, maar met een tap-functie (zie sectie 5.5). Uit dit tempo, dat uitgedrukt is in bpm, wordt een delaytijd berekend met het bpm2time blokje (zie ook sectie 6.2.2). Met een measure blokje kan men kiezen wat de verhouding van de delay-tijd is tussen twee tellen in (zie ook hoofdstuk 2). Het is door middel van dit blokje dat er nieuwe ritmes kunnen gecre¨eerd worden: de grijze knoppen zorgen dat de herhalingen gesynchroniseerd blijven tussen twee tellen in, de andere knoppen blijven ook gesynchroniseerd, maar dan over meerdere tellen. Bij hele kleine fracties, worden de herhalingen korte noten met een schijnbaar ander timbre. Het ingangssignaal wordt door een banddoorlaatfiltering gestuurd met een variabele center-frequentie. Deze frequentie wordt intelligent gevarieerd door een intelligentwaves blokje. Dit blokje genereert een golfvorm naar keuze (zie sectie 6.2.2). Omdat dit blokje een audiosignaal gebruikt (de berekeningen worden aan de bemonsteringssnelheid uitgevoerd), is er een snapshot∼ [11] blokje gebruikt om hiervan terug een controlesignaal te maken. Deze golfvorm heeft een amplitude die zich bevindt tussen 0 en
6.3. IDAFX: TOEPASSINGEN
63
1. Om dit te mappen op de center-frequentie van de banddoorlaatfiltering maakten we gebruik van de in sectie 6.2.2 voorgestelde theorie: we nemen een window blokje en trekken dat scheef naar de lagere waarden van het domein van de transformatie door een exponent mee te geven aan de rechteringang. Door deze transformatie is er een grotere variatie van de lagere frequenties (waarop deze golf gemapt zal worden). Als laatste stap is er een scalering toegepast tussen 500Hz en 1500Hz. Een intelligentswitch of noise gate kan eerst nog stukken van het signaal selecteren die boven een bepaalde drempel uitkomen, om dan enkel die stukken naar het effect te sturen. Ook een gewone switch heeft hier fijne toepassingen. In combinatie met de banddoorlaatfiltering hebben we zo al bepaalde delen van een drumsignaal geselecteerd. Bijvoorbeeld een ge¨extraheerde snaardrum die dan zichzelf herhaalt en waarop nog een extra effect kan toegepast worden (phaser, flanger, enzovoort. . . ). Intelligent Sample Tuner Deze effectenmodule verandert op verschillende intelligente manieren de pitch van een signaal. Links op de figuur wordt een reversedelay∼ blokje gebruikt. Dit kan voor twee doeleinden gebruikt worden, afhankelijk van de delay-tijd. Als deze aangestuurd wordt door het tempo (zoals in de figuur) dan kan door specifieke taps in- en uit te schakelen een arpeggiator \ nagebootst worden, dit wil zeggen dat men effectief nieuwe ritmes kan vormen. Stel bijvoorbeeld dat de input bestaat uit de snaardrum van een drumpartij (door banddoorlaatfiltering verkregen), dan kan deze totaal een andere richting in gestuurd worden dan de oorspronkelijke snaardrum enkel door varieren van de gekozen taps en de waarde van measure die de delay-tijd verandert als fracties van het tempo. Aan de andere kant (rechts op de figuur) wordt een licht in pitch varierende kopie van het originele signaal gemaakt. Hiervoor gebruiken we een pitchShifter waarvan de ingang die de afstand in halve tonen ten opzichte van de oorspronkelijke pitch bepaalt, een varierend signaal binnenkrijgt. Dit signaal wordt aangestuurd door de pitch van het signaal zelf. Voor het mappen volstond het hier om te delen door 12. Vermits de MIDI pitch typisch waardes heeft tussen de 48 en 60 in het geval van een basgitaar, betekent delen door 12 dat de pitch variatie van de pitchShifter een waarde heeft tussen de vier en vijf halve tonen omhoog. Dit ligt dichtbij een terts2 , wat ervoor zorgt dat de licht valse transformatie toch nog goed klinkt. 2
grote terts: een afstand van 4 zuivere halve tonen tussen twee noten. Een typisch majeurakkoord wordt gevormd door de eerste noot, de terts erboven en de kwint erboven (7 halve tonen)
64
HOOFDSTUK 6. INTELLIGENTE DAFX
Intelligent Panoramaker Deze effectenmodule sweept een signaal heen en weer op het tempo van een nummer. Dit tempo verkrijgt hij door het tempo te extraheren uit het signaal zelf (bij ons vooralsnog een tap-functie). Men kan deze module op het podium gebruiken om een gitaar in het rond te doen zingen of men kan het aan de mengtafel gebruiken en bijvoorbeeld het volledige stereo drumsignaal erop aansluiten. De andere optie is om de toonhoogte van het input-signaal naar het pan-effect te sturen. Wanneer bijvoorbeeld de stem hoger zingt, schuift ze meer naar links of rechts. Deze optie is niet afgebeeld in figuur 6.6. Om het intelligentwaves∼ blokje te laten passen op het pan-effect is er enkel een scalering nodig van 0 tot 1 naar van -127 tot 127. De noodzaak van de andere blokjes ertussen is reeds aangetoond in sectie 6.3. De betekenis van het measure blokje is omgedraaid ( pow -1 ) zodat niet de verdeling tussen twee tellen wordt aangepast, maar het aantal tellen per sweep.
6.4
Conclusie
In dit hoofdstuk werden verschillende systemen voorgesteld voor iDAFx: auto-adaptieve, extern-adaptieve en feedback-adaptieve effecten. Voor autoadaptieve effecten bespraken we een algemene mapping die uit drie delen bestaat: lineaire combinatie van verschillende features, een mapping-functie of transformatie hierop toepassen en dan een herschaling om overeen te komen met de grenzen van de effectparameter. We introduceerden ook enkele specifiekere mapping-abstracties die we maakten voor Pure Data: bpm2time , adsr , round en waves . Daarna toonden we enkele voorbeelden van iDAFx die we concreet implementeerden in Pure Data. Dit is vooral aan oefening gebleken in het kiezen van een bepaalde configuratie van de blokjes zonder te blijven uitbreiden. Dit resulteert dus in een patch die bijna op elke plaats anders had kunnen ge¨ımplementeerd worden. We maakten een Intelligent Sample Tuner, een Intelligent Panoramaker en een Intelligent Live Bass Arpeggiator.
Hoofdstuk 7 Algemeen besluit Voorafgaand wordt muzikale theorie toegelicht die nodig is voor het verstaan van sommige stappen in de verschillende algoritmes. Matlab en Pure Data zijn de twee softwarepakketten die gehanteerd worden voor het verwerken van audio in dit document. Matlab bleek het handigst in het ontwikkelen van ingewikkelde algoritmes en deze op allerlei manieren te testen (plots en de Profiler\ ). Pure Data is anderzijds zeer sterk als tool om snel prototypes te kunnen bouwen en voor realtime audiotoepassingen. Het kan echter evengoed ingewikkelde algoritmes aan door de mogelijkheid om externals in C toe te voegen aan het programma. Er zijn drie grote stappen te onderscheiden in de implementatie van een systeem waarin parameters die een effect aansturen op een intelligente wijze worden bepaald: feature-extractie, mapping en de implementatie van een door parameters van buitenaf te besturen effect (zie figuur 1.1). Matlab wordt gebruikt om enkele effecten uit te werken: vibrato, distortion en unicomb (afhankelijk van parameters: delay, chorus,. . . ). Anderzijds wordt Matlab ook gebruikt als een wiskundige analyse-tool voor het optimaliseren van algoritmes voor high-level pitch- en beat-extractie en het begrijpen van de wiskundige logica ten opzichte van het perceptiedomein. Wat de bpm-bepaling betreft blijkt de kamfiltermethode de beste resultaten te hebben. De berekingstijd is echter te hoog (20 a ` 30 seconden). Door achtereenvolgens met verschillende stapgroottes (nauwkeurigheden) te zoeken binnen opnieuw gekozen domeinen, kan deze berekeningstijd aanzienlijk ingeperkt worden. De resulaten zijn vaak niet meer correct. Dit blijkt dus geen goede methode. Men probeert dit te verbeteren door met een predictor te werken. Deze predictor wordt berekend op basis van de autocorrelatiemethode en dit geeft betere resulaten dan verwacht. Deze kan dus als standalone methode gebruikt worden en heeft bovendien een veel kleinere berekeningstijd nodig (1 a` 50 ms). Het lijkt erop dat deze methode dan wel 65
66
HOOFDSTUK 7. ALGEMEEN BESLUIT
Figuur 7.1: Een overzicht van alle abstracties ge¨ımplementeerd voor dit onderzoek in Pure Data geschikt is voor realtime. Er mag niet uit het oog verloren worden dat beide methodes worden toegepast op een venster dat minstens 3,5 s breed is (bijlage B). De bpm-waarde kan dus enkel met vertraging berekend worden en dit is problematisch als het tempo (en dus bpm) bruusk verandert. De methodes gebaseerd op het selecteren van pieken in het energiespectrum zijn het meest geschikt voor realtime maar de resultaten zijn niet goed en ze kunnen enkel maar gebruikt worden voor een audio-input van signalen die zo weinig mogelijk overlappen. Er is dus sprake van een klassieke trade-off situatie. Voor de pitch-detectie worden verschillende methodes uitgetest, in het tijdsdomein: de gewogen autocorrelatiefunctiemethodes en in het frequentiedomein harmonic product spectrum of HPS -methodes, maximum likelihood en een FFT-gebaseerde benadering. De maximum likelihood is eenvoudig uit te testen op basis van fiddle∼ in Pure Data. De andere methodes worden in Matlab getest. De autocorrelatiemethodes geven goede resultaten voor
67 signalen waarin de periodiciteit sterk geaccentueerd is. Er treden octaaffouten op en het algoritme kan niet om met polyfonie. Het grote voordeel van deze methode is de eenvoudige implementatie ervan. De implementatie van de andere algoritmes is vaak ingewikkelder omdat men een FFT moet berekenen. Door het werken met FFT wordt de harmonische inhoud van het signaal echter wel beter weergegeven. Dit is de reden waarom deze wel geschikt zijn voor polyfonie. De keuze van algoritme hangt concreet dus af van de situatie. Er bestaat niet zoiets als het meest geschikte algoritme. Dit geldt ook voor de beat-extractie-algoritmes. In Pure Data worden een hele reeks effecten ge¨ımplementeerd ( figuur 7.1) en eigenlijk staan de meeste low-level features voor beat en pitch er standaard in: outputs van fiddle∼ , env∼ , bonk∼ (zie analyzer in bijlage B). In het laatste deel van dit document wordt uiteindelijk het aansturen van parameters op basis van ge¨extraheerde features uitgetest (in Pure Data). Er zijn heel wat verschillende implementatiemogelijkheden en deze hangen onder andere af van de gekozen controlecurves die de features op het parameterdomein mappen, maar ook van de structuur van het hele iDAFx-systeem (zie 6.1). Het staat vast dat er enorm veel mogelijkheden zijn. Hiervan worden er een aantal uitgetest: intelligente delays waaronder reverse, feedback, multitap en pingpong, intellingente switch, amplification en panning. (zie sectie 6.3 en de CD voor een demonstratie). De bepaling van de kwaliteit van de geluidsverwerking is deels ook een subjectieve zaak. In dit document wordt abstractie gemaakt van het feit dat een geluidsman/ingenieur zogezegd het beste idee heeft van hoe iets moet klinken. Het is vooral de bedoeling aan te tonen dat het mogelijk is parameters op een intelligente manier aan te sturen en dit gebaseerd op informatie die uit het audiosignaal zelf wordt gehaald. Door tijdsgebrek zijn er geen Pure Data externals kunnen ge¨ımplemteerd worden. Hierdoor zijn de in Matlab ge¨ımplementeerde high-level feature-extractie algoritmes grotendeels niet kunnen gebruikt worden. Er mag gesuggereerd worden dat Pure Data een waardevolle tool is die in de toekomst op deze faculteit kan gebruikt worden voor het verwerken van audio in realtime. De uitgebreide bibliotheek op het internet bevat heel interessante toepassingen en is zeker nog uitbreidbaar. Voor het aanmaken van externals in C moet er nog wat ervaring opgedaan worden (zowel het programmeren in C op zich, als het ter beschikking van Pure Data stellen van deze externals), maar het loont de moeite indien dit project op grootschalige basis kan uitgewerkt worden. We zouden een tool kunnen schrijven om Pure Data patches te vertalen naar C om dan met beschikbare tools deze code te optimaliseren voor DSP’s in effectenmodules. De mogelijkheden zijn al aangetoond en dit met Pure Data als rapid prototyping language.
68
HOOFDSTUK 7. ALGEMEEN BESLUIT
Bijlage A Documentatie: effecten Hieronder volgt de documentatie van alle ontwerpen in verband met dit document. Alle files zijn tevens te vinden op de begeleidende website. chorus∼ v1.0 distortion dynamics v1.0
[pd] [m] [pd]
flanger∼ v1.2 flanger∼ v2.0 monomultitapdelay∼ v1.0 pan∼ v1.0 monopanner∼ v2.1 monophaser∼ v1.0 monotraditionaldelay∼ v1.0 monotraditionaldelaybpm∼ v1.0 multitapdelay∼ v1.0 octaver∼ v1.0 pan∼ v1.1 pitchShifter∼ v1.0 rev∼ v1.0 reverb∼ v1.0 ringmod∼ v1.0 stereomultitapdelay∼ stereotraditionaldelay∼ traditionaldelay∼ universal comb vibrato
[pd] [pd][m] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [pd] [m] [m]
69
twee Matlab implementaties limiter, compressor, expander en noise gate discontinued flanger blokje met feedback-lus discontinued panorama blokje in Pure Data
discontinued discontinued ook reversedelay∼
reverse
discontinued discontinued
70
BIJLAGE A. DOCUMENTATIE: EFFECTEN
Bijlage B Documentatie: feature extractie Hieronder volgt de documentatie van alle ontwerpen in verband met dit document. Alle files zijn tevens te vinden op de begeleidende website. beat detection
[xls][m]
EARdetector∼ v1.0 HPS
[pd] [m]
kamfiltermethode en autocorrelatie alsook resultaten: optima,. . . (16 paginas) envelope, attack en rustdetectie Harmonic product spectrum
71
72
BIJLAGE B. DOCUMENTATIE: FEATURE EXTRACTIE
Bijlage C Documentatie: iDAFx Hieronder volgt de documentatie van alle ontwerpen in verband met dit document. Alle files zijn tevens te vinden op de begeleidende website. adsr v1.0 control curves v1.0 intelligent delay mapWindow v1.1 waves v2.0
[pd] [pd] [m] [pd] [pd]
scale, combine, mapLinear, mapSine, bpm2time,. . . ook mapDelay.m
73
74
BIJLAGE C. DOCUMENTATIE: IDAFX
Bijlage D Documentatie: losse objecten Hieronder volgt de documentatie van alle ontwerpen in verband met dit document. Alle files zijn tevens te vinden op de begeleidende website. mixer v1.1 [pd] round v1.0 [pd] sin∼ v1.1 [m]
input en channel-blokjes ook mapDelay.m
75
76
BIJLAGE D. DOCUMENTATIE: LOSSE OBJECTEN
Bijlage E Extra figuren
77
78
BIJLAGE E. EXTRA FIGUREN
(a)
(b)
(c)
(d)
Figuur E.1: de Matlab Profiler\ aan het werk op onze code: (a) op de originele code, (b) met geheugenallocatie voor de for -loop, (c) tijd voor berekening abs en (d) met de nieuwe code.
79
Figuur E.2: Fletcher-Munson curve met isofonen
80
BIJLAGE E. EXTRA FIGUREN
Root
Sine
1
1
0.9
0.9
0.8
0.8
X: 128 Y: 0.7057
0.7
0.7
0.6
0.6
0.5
0.5
0.4
0.4
0.3
0.3
0.2
0.2
0.1 0
X: 128 Y: 0.7049
0.1 50
100
150
200
250
0
50
(a)
100
150
200
250
200
250
(b)
Linear
Gogin
1 0.9
0.8
0.8
X: 128 Y: 0.7027
0.6
0.7 0.4 0.6
X: 128 Y: 0.498
0.2
0.5 0.4
0
0.3
−0.2
0.2
−0.4
0.1 −0.6 0
50
100
(c)
150
200
250
50
100
150
(d)
Figuur E.3: De vier panning wetten die ge¨ımplementeerd werden in verband met dit werk
Bibliografie [1] V. Verfaille, C. Guastavino, and C. Traube, “An interdisciplinary approach to audio effect classification,” in Proc. of the 9th Int. Conference on Digital Audio Effects (DAFx-06), Montreal, Quebec, Canada, Sept. 2006, pp. 107–113. [2] V. Verfaille, U. Z¨olzer, and D. Arfib, “Adaptive digital audio effects (a-dafx): A new class of sound transformations,” IEEE transactions on audio, speech and language processing, vol. 14, no. 5, pp. 1817–1831, 2006. [3] A. Kapur, M. Benning, and G. Tzanetakis, “Query-by-beatboxing: music retrieval for the dj,” in Proceedings of the 5th International Symposium on Music Information Retrieval, Barcelona, Spain, Oct. 2004, pp. 10–14. [4] U. Z¨olzer and X. Amatriain, DAFX - Digital Audio Effects. John Wiley and Sons, 2002. [5] V. Verfaille and D. Arfib, “A-dafx: Adaptive digital audio effects,” in Proc. of the COST G-6 Conference on Digital Audio Effects (DAFx-01), Limerick, Ireland, Dec. 2001, pp. 10–13. [6] P. de la Cuadra, A. Master, and C. Sapp, “Efficient pitch detection techniques for interactive music,” in In Proceedings of the 2001 International Computer Music Conference, La Habana, Cuba, Sept. 2001. [7] S. Marchand, “An efficient pitch-tracking algorithm using a combination of fourier transforms,” in Proceedings of the COST G-6 Conference on Digital Audio Effects (DAFX-01), Limerick, Ireland, Dec. 2001, pp. 170– 174. [8] Y. Jafri, “A modular real-time pc-based audio processing tool for effect developers, engineers, musicians and educators,” in Proc. of the COST 81
82
BIBLIOGRAFIE G-6 Conference on Digital Audio Effects (DAFx-00), Verona, Italy, Dec. 2000, www.soundslogical.com.
[9] J. McCartney, “Supercollider: A new real-time synthesis language,” in In Proceedings of the International Computer Music Conference, 1996, pp. 257–258. [10] G. Wang and P. R. Cook, “Chuck: A concurrent, on-thefly audio programming language,” in In Proceedings of the 2003 International Computer Music Conference, 2003, pp. 219–226, http://soundlab.cs.princeton.edu/publications/chuck icmc2003.pdf. [11] M. Puckette, The theory and technique of electronic music, online draft: december 30, 2006 ed. http://crca.ucsd.edu/∼msp/techniques/latest/book-html/, Dec. 2006. [12] J. Vereecke, Inleiding tot de P.A.-techniek, geluid - electriciteit - P.A.installaties - mixen. Het depot vzw, Apr. 2006. [13] Manual t.c.electronic multitap rhythm delay D TWO, T.C.Electronic, Risskov,Denmark, 1999. [Online]. Available: http://www.tcelectronic. com/media/D2 US rev 5.pdf [14] J. Clarck, “nordmodularbook,” online, 2003. [Online]. Available: http: //www.cim.mcgill.ca/∼ clark/nordmodularbook/nordmodularbook.pdf [15] H. Haller, Das experimental Studio der Heinrich-Strobel-Stiftung des S¨udwestfunks Freiburg 1971-1989, die Erforschung der Elektronischen Klangumformung und ihre Geschichte. Nomos, 2005. [16] J. Foote and M. Cooper, “Visualizing musical structure and rhythm via self-similarity,” in Proceedings of International Conference on Computer Music, Habana, Cuba, Sept. 2001. [17] J. Foote and S. Uchihashi, “The beat spectrum: A new approach to rhythm analysis,” in Proc. International Conference on Multimedia and Expo 2001, Tokyo, Aug. 2001. [18] M. Alonso, B. David, and G. Richard, “Tempo and beat estimation of musical signals,” in Proceedings of the 5th international symposium on music, 2004, pp. 158–163.
BIBLIOGRAFIE
83
[19] M. Goto and Y. Muraoka, “Real-time beat tracking for drumless audio signals: chord change detection for musical decisions,” Speech Communication, vol. 27, no. 3-4, pp. 311–335, 1999. [20] E. Scheirer, “Tempo and beat analysis of acoustic musical signals,” J. Acoust. Soc. Am., vol. 103, no. 103(1), pp. 588–601, Jan. 1998. [21] P. Leveau, L. Daudet, and G. Richard, “Methodology and tools for the evaluation of automatic onset detection algorithms in music,” in Proc. Int. Symp. on Music Information Retrieval, 2004. [22] J. C. Brown, “Determination of the meter of musical scores by autocorrelation,” J. Acoust. Soc. Am., vol. 94:4, Oct. 1993. [23] B. Doval and X. Rodet, “Fundamental frequency estimation using a new harmonic matching method,” in Proceedings of the international computer music association, Montreal, Quebec, Canada, 1991, pp. 555– 558. [24] B. Gold and L. Rabiner, “Parallel processing techniques for estimating pitch periods of speech in the time domain,” Journal of the acoustic society of america, vol. 46, no. 2, pp. 442–448, Aug. 1969. [25] M. Noll, “Pitch determination of human speech by the harmonic product spectrum, the harmonic sum spectrum, and a maximum likelihood estimate,” in Proceedings of the symposium on computer processing communications, 1969, pp. 779–797. [26] F. Keiler, D. Arfib, and U. Z¨olzer, “Efficient linear prediction for audio effects,” in Proceedings of the COST G-6 Conference on Digital Audio Effects (DAFX-00), Verona, Italy, Dec. 2000, pp. 1–6. [27] X. Sun, “Pitch determination and voice quality analysis using subharmonic-to-harmonic ratio,” vol. 1, Orlando, Florida, 2002, pp. 333–336. [28] D. Gerhard, “Pitch extraction and fundamental frequency: history and techniques,” Department of computer science, University of Regina, Saskatchewan, Canada, Tech. Rep., Nov. 2003. [29] J. Morman and L. Rabiner, “A system for automatic segmentation and classification of chord sequences,” Rutgers University, Department of Electrical and Computer Engineering, Piscataway, NJ, Piscataway, NJ, USA, Tech. Rep., 2006.
84
BIBLIOGRAFIE
[30] M. S. Puckette, T. Apel, and D. D. Zicarelli, “Real-time audio analysis tools for Pd and MSP,” in Proceedings International Computer Music Conference, Michigan, 1998, pp. 109–112. [31] N. Collins, “Using a pitch detector for onset detection,” University of Cambridge, Centre for Music and Science, 11 West Road, Cambridge, CB3 9DP, UK, Tech. Rep.,
[email protected]. [32] V. Verfaille, “Effets audionum´eriques adaptifs: th´eorie, mise en œuvre et usage en cr´eation musicale num´erique,” Ph.D. dissertation, Universit´e m´editerran´ee Aix-Marseille II, Marseille, France, 2003. [33] V. Verfaille and D. Arfib, “Implementation strategies for adaptive digital audio effects,” in Proc. of the 5th int. conference on digital audio effects (DAFx-02), Hamburg, Germany, Sept. 2002, pp. 21–26. [34] D. Arfib, J.-M. Couturier, L. Kessous, and V. Verfaille, “Strategies of mapping between gesture parameters and synthesis model parameters using perceptual spaces,” Org. sound, vol. 7, no. 2, pp. 135–152, 2002.