Automatisch Mixen van Muzieknummers op Basis van Tempo, Zang, Energie en Akkoordinformatie David Bouckenhove
Promotor: prof. dr. ir. Jean Martens Begeleider: Matthias Varewyck Scriptie ingediend tot het behalen van de academische graad van Burgerlijk ingenieur in de computerwetenschappen
Vakgroep Elektronica en informatiesystemen Voorzitter: prof. dr. ir. Jan Van Campenhout Faculteit Ingenieurswetenschappen Academiejaar 2007-2008
ii
Toelating tot bruikleen De auteur geeft de toelating deze scriptie voor consultatie beschikbaar te stellen en delen van de scriptie te kopi¨eeren voor persoonlijk gebruik. Elk ander gebruik valt onder de beperkingen van het auteursrecht, in het bijzonder met betrekking tot de verplichting de bron uitdrukkelijk te vermelden bij het aanhalen van resultaten uit deze scriptie. David Bouckenhove, 26 juni 2008
ii
Woord vooraf Muzieknummers op een goede manier mixen is werk voor specialisten. Een goede dj gebruikt zijn muzikale kennis en smaak maar ook de reacties op de dansvloer om een dj-mix op te bouwen. Het vergt talent en jaren oefening om het vak goed te beheersen wat ikzelf als dj al jaren ondervindt. Maar het loont niet altijd de moeite om een vakman in huren op plaatsen waar muziek maar een rol in de achtergrond heeft. In veel bars en (praat)caf´es worden softwareprogramma’s gebruikt die een afspeellijst met nummers kunnen afspelen met een kleine overlapping en soms wat beatsynchronisatie. Een logische volgende stap in het automatiseren zou een routine zijn die zelf nummers selecteert en een goede overlap zoekt en genereert. Als dj interesseert het me heel erg om deze uitdaging aan te gaan. Het is namelijk niet de bedoeling om dj’s te vervangen maar om een systeem te ontwikkelen die kan gebruikt worden op plaatsen waar de muziek een mindere belangrijke rol heeft. Ik heb geprobeerd om mijn ervaring als dj te gebruiken om dit systeem intelligenter te maken dan de bestaande software. Ik ben bedank alle personen die meegewerkt hebben aan de evaluatie van het systeem. Ook mijn ouders bedank ik voor alle steun en de mogelijkheden dat ze mij geboden hebben. Tenslotte wil ik mijn promotor Prof. Jean Pierre Martens en begeleider Matthias Varewyck bedanken om me te laten werken aan dit interessante onderwerp en de hulp tijdens het jaar. David Bouckenhove Gent 26 juni 2008
iii
Automatic Mixing of Songs using Tempo, Singing Voice, Energy and Key Information David Bouckenhove Supervisor(s): prof. dr. ir. Jean Martens Matthias Varewyck Abstract—The goal of this work is a system that can be used to generate completely automatic a mix of songs without interaction from the user. To create a mix the system uses tempo, singing voice, energy and key information. The completed system in Matlab makes it possible to generate one complete dj-set starting with one song or a number of different mixes for one song. Not only the audio file is created but also a text file with a number of quality measures and information about the mix. Keywords—Automatic Mixing, Dj-Software, Singing Voice Detection
M
I. I NTRODUCTION
IXING songs is a craft executed by dj’s. It consists selecting suitable songs, selecting fragments to overlap and creating a crossfade. In some places like quiet bars it is not necessary to hire a dj. In those places a software system is used to play a playlist of songs. A system that completely automatic selects songs and intelligently creates a mix using different criteria should be a great improvement. In this work such a system is proposed. In the next sections an overview of the system, the different modules and the evaluation method are described. II. AUTOMATIC M IXING The system consists of two main parts. In a first stage the characteristics of all songs are calculated. These characteristics are tempo, key and singing voice. In a second stage a mix can be generated using the saved info of the previous stage. Creating a mix consists of different parts: selecting a suitable song, selecting fragments to overlap and creating a smooth crossfade. In the next sections these stages are explained. A. Singing Voice Detection To detect singing voice in an audio signal, the signal is divided in frames with a length of 75ms. For each frame 51 features are calculated: 13 MFCCs, 13 deltas, 13 standard deviation and median over 30 previous frames. Using this features and a trained model a Support Vector Machine classifies each frame as a MUS-frame or a VOX-frame. A VOX-frame contains singing voice, a MUS-frame does not. The output of the classifier is smoothed to remove fast frame to frame fluctuations. The model for the SVM is trained using a dataset with 161 manually annotated songfragments with a length of 30s. B. Songselection Songs are selected on tempo and key. For each possible song the tempodifference and keydifference with the current song is calculated. The keydifference is the distance of the keys on the circle of fives. Using the key to select a next song is called harmonic mixing. Both are combined to one criterion. All songs are
sorted by this criterion and the song with the shortest distance to the current song is selected as the most suitable next song. C. Mixing A next step is to mix two selected songs. The tempo of both songs are synchronized by timestretching the second song. To select fragments to overlap during the mix, we need a method to find fragments that suit together. The goal is to create a smooth mix without big differences in energy. The method proposed in this work uses energy patterns. We search fragments that match with different provided patterns. The system makes it possible to easy add patterns, so that it is possible to create different outputs. If suitable fragments are found, the beats are synchronized to create a perfect mix. Finally the system chooses a crossfade that matches the chosen energy pattern. The result is a constant volume and energy during the overlap. III. E VALUATION Two major parts of the system were evaluated. The singing voice detection is tested on a dataset of 161 songfragments with a length of 30s. For each song the singing voice is manually annotated and the set covers a great variety of singers and genres. The average accuracy of the detection on 3 different setups is 78.72%. The evaluation of the complete system is a lot more difficult. There are more outputs possible and the quality of the outputs is subjective. A small group of 8 people gave a score on 9 different mixes. After analysation of the results it appears that the quality measures generated by the system are a good reflection of the scores given by the testgroup. IV. C ONCLUSION Creating an automatic mixing system that gives a quality output for every song within all genres is a very complex problem. Although in this work a basic system is created that makes it possible to create a mix of decent quality completely automatic. To improve the quality and variety of the mixes a lot of extensions on this basic system are possible. R EFERENCES [1] Zheng Fang, Zhang Guoliang, Song Zhanjiang, Comparison of different implementations of MFCC, J. Comput. Sci. Technol., 16(6):582589. ISSN 1000-9000. (2001) [2] D. Cliff, Hang the dj: automatic sequencing and seamless mixing of dancemusic tracks, (2000) [3] S. Dixon, Beatroot: An interactive beat tracking and visualisation system, http://www.elec.qmul.ac.uk/people/simond/beatroot/index.html (2001) [4] O. Parviainen, Soundstretch audio processing utility, URL http://www.surina.net/soundtouch/soundstretch.html (2005)
Inhoudsopgave Woord vooraf
iii
Gebruikte termen & afkortingen
vii
1 Inleiding 1.1 Een goede mix cre¨eren . . . . . . . . . . 1.2 Literatuurstudie . . . . . . . . . . . . . 1.2.1 Algemeen . . . . . . . . . . . . . 1.2.2 Beatdetectie, toonaarddetectie en 1.2.3 Zangdetectie . . . . . . . . . . . 1.3 Bestaande dj-software . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . timestretching . . . . . . . . . . . . . . . . . .
2 Algemene Beschrijving 2.1 Algemeen overzicht . . . . . . . . . . . . . . . . . . 2.2 Trainingsfase . . . . . . . . . . . . . . . . . . . . . 2.3 Afspeelmodus . . . . . . . . . . . . . . . . . . . . . 2.3.1 Een volledige dj-set cre¨eren . . . . . . . . . 2.3.2 Meerdere mixes voor ´e´en nummer genereren 2.4 Configuratie . . . . . . . . . . . . . . . . . . . . . . 3 Traingingsfase 3.1 Berekening van het tempo . 3.2 Detecteren van de toonaard 3.3 Zangdetectie . . . . . . . . 3.3.1 Algemene Methode . 3.3.2 Dataset . . . . . . . 3.3.3 Features . . . . . . . 3.3.4 Classificatie . . . . . 3.3.5 Postprocessing . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
v
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
. . . . . .
. . . . . . . .
. . . . . .
1 2 3 4 5 6 9
. . . . . .
11 11 13 14 14 16 17
. . . . . . . .
19 19 20 20 21 22 22 24 26
vi
Inhoudsopgave 4 Songselectie 4.1 Algemeen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2 Methode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
29 29 30
5 Mixen van twee nummers 5.1 Algemene methode . . . . . . . . . . . 5.2 Timestretching . . . . . . . . . . . . . 5.3 Volume gelijkstellen . . . . . . . . . . 5.4 Audiobestanden splitsen . . . . . . . . 5.5 Selecteren van een geschikt fragment . 5.5.1 Algoritme . . . . . . . . . . . . 5.5.2 Zangmatrix . . . . . . . . . . . 5.5.3 Energiepatronen . . . . . . . . 5.5.4 Best geschikte fragment zoeken 5.6 De overgang cre¨eren . . . . . . . . . .
. . . . . . . . . .
33 33 34 35 35 36 36 38 39 41 47
. . . . . . .
51 51 51 51 52 53 54 55
7 Besluit 7.1 Toekomstig werk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
58 59
A Voorbeeld van een outputbestand met mix-info
60
B Links naar producenten van muzieksoftware
62
Bibliografie
64
6 Evaluatie 6.1 Zangdetectie . . . . . . . . . . . . . 6.1.1 Dataset . . . . . . . . . . . . 6.1.2 Evaluatiemethode . . . . . . 6.1.3 Resultaten . . . . . . . . . . 6.2 Volledige systeem . . . . . . . . . . . 6.2.1 Resultaten . . . . . . . . . . 6.3 Invloed van de duur van de overgang
. . . . . . .
vi
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
. . . . . . . . . .
. . . . . . .
Gebruikte termen & afkortingen Termen Mix Twee nummers samengevoegd tot ´e´en continue song. Dj-set Een opeenvolging van verschillende mixes. Fade-in Het volume van een nummer langzaam laten stijgen vanuit stilte. Fade-out Het volume van een nummer langzaam laten dalen tot stilte. Crossfade Het opgelegd volumeverloop voor beide nummers tijdens een overgang. Dit is de combinatie van een fade-out en fade-in. Timestretching Het proces waarbij het tempo van een nummer aangepast wordt en de toonhoogte onveranderd blijft. Beatmatchen Techniek waarbij de beats van beide nummers gesynchroniseerd worden. Harmonisch mixen Een manier van mixen waarbij tijdens de songselectie rekening wordt gehouden met de toonaard van de songs. CUT Een abrupte en korte overgang tussen twee nummers. Crossfader E´en schuiver die kan een fade-out en fade-in genereren tijdens de overgang tussen twee nummers. Dj-mixer Een audioapparaat om twee of meerdere nummers te mixen speciaal gebouwd voor dj’s. Clipping Het afgekapt worden van pieken in een audiosignaal omdat het dynamisch bereik overschreden wordt.
vii
Hoofdstuk 0. Gebruikte termen & afkortingen
Afkortingen BPM JND DJ MFCC SVM TDHS
Beats Per Minute Just Notable Difference Disc Jockey Mel-frequency cepstral coefficients Support Vector Machine Time Domain Harmonic Scaling
viii
viii
Hoofdstuk 1
Inleiding Twee muzieknummers op een goede manier met elkaar mixen vereist een dj met talent en vakmanschap. Om een naadloze overgang te maken moet een dj niet enkel een goede kennis hebben van iedere song in de verzameling, maar ook de techniek om de beats van beide nummers te synchroniseren en een gepaste overgang te maken. Op plaatsen waar muziek een minder belangrijke rol speelt, is het niet altijd rendabel om een specialist in te huren. Daar is een goed assistentiesysteem dat gebruikt kan worden door een leek beter op zijn plaats. Het doel van dit werk is te onderzoeken of het mogelijk is om zo’n assistentiesysteem te bouwen. Het systeem moet zonder interactie van de gebruiker op een intelligente manier nummers selecteren en een naadloze overgang tussen deze gekozen songs genereren. De gebruiker hoeft het talent of de techniek niet te hebben om nummers te synchroniseren, deze hoeft enkel een eerste nummer te selecteren. Zo’n programma zou gebruikt kunnen worden op plaatsen waar nu andere software gebruikt wordt om afspeellijsten af te spelen zoals rustige bars of (praat)caf´es. Het voordeel van dit systeem is dat de gebruiker niet meer manueel nummers in een afspeellijst hoeft te plaatsen. Ook wordt er automatisch een vloeiende overgang tussen ieder nummer gecre¨eerd wat een aangename luisterervaring bevordert.
In het verdere verloop van deze inleiding wordt eerst uitgelegd hoe een dj aan het werk gaat. De opbouw van het systeem is aan de hand van deze methode opgebouwd. Vervolgens wordt de relevante literatuur voor dit werk besproken. Daarna ga ik in op de al reeds bestaande dj-software en vergelijk ik de functionaliteit met deze van het ontworpen systeem. In de volgende hoofdstukken ga ik dieper in op de opbouw en werking van het systeem. In hoofdstuk 2 bespreek ik de algemene werking van de routine. In hoofdstukken 3, 4 en 5 wordt gedetailleerd uitgelegd hoe het systeem opgebouwd is. Alle evaluatieresultaten zijn terug te vinden in hoofdstuk 6 en er wordt afgesloten met een besluit in hoofdstuk 7.
1
2
Hoofdstuk 1. Inleiding
1.1
Een goede mix cre¨ eren
De manier waarop het systeem werkt, is gebaseerd op de werkmethode van een gewone dj. Daarom leg ik dit in onderdeel enkele basiseigenschappen van het dj-proces uit. In de volgende hoofdstukken wordt op deze methode verder gebouwd. De volgende stappen zijn nodig om een mix te maken: 1. Selecteer een gepast volgend nummer. 2. Stel het tempo van beide nummers exact gelijk. 3. Zoek in beide nummers geschikte fragmenten om een overgang tussen de songs te maken. 4. Synchroniseer de beats van beide nummers in de gekozen fragmenten. 5. Kies een geschikt volumeverloop voor beide nummers tijdens de overgang en cre¨eer de overgang. In de eerste stap kan er gezocht worden naar nummers met een gelijkaardig tempo en een bijpassende toonaard. Indien het tempo van het gekozen te sterk verschilt met het tempo van het huidige nummer, zal het tweede nummer vervormd klinken omdat het afspeeltempo te veel afwijkt van het originele tempo. Een alternatieve aanpak is het tempo gedurende een volledige dj-set op of af te bouwen. Dan wordt het volgende nummer gekozen in functie van het tempotraject. Als een song gekozen wordt met een toonaard die niet past bij de toonaard van het huidige nummer, kunnen deze conflicteren zodat de overgang harmonisch slecht klinkt ondanks het feit dat de beats perfect gealigneerd zijn. Hiermee rekening houden tijdens het mixen heet harmonisch mixen. Daarna stelt een dj het tempo van beide nummers gelijk. Dit gebeurt door het tempo van het tweede nummer zodanig aan te passen dat het exact gelijk is met het tempo van het eerste nummer. Dan kan gezocht worden naar geschikte fragmenten binnen de nummers om een overgang te maken. Dj’s houden met verschillende factoren rekening bij deze keuze. De timing van de overgang is belangrijk dus wordt er gezocht naar fragmenten die goed bij elkaar passen. Een voorbeeld van een goede keuze is de plaats waar de outro begint in het huidige nummer en de intro eindigt in het volgend nummer. Deze kunnen dan perfect overlapt worden zodat er een overgang gecre¨eerd wordt met een constant energieverloop (zie figuur 1.1). Een dj probeert ook te vermijden dat er storende zangoverlap is tijdens de overgang door te zorgen dat niet allebei de fragmenten tegelijkertijd zang bevatten. Het feit dat het tempo van beide nummers perfect gelijk is, is niet genoeg om goede overgang te genereren. Binnen de gekozen fragmenten moeten de beats ook gesynchroniseerd worden1 . 1
Fase gelijkstellen: de duur tot de eerste beat synchroniseren
2
3
Hoofdstuk 1. Inleiding
Figuur 1.1: Het selecteren van het begin van de outro bij het uitgaand nummer en het einde intro bij het inkomend nummer zorgt voor een constant energieverloop tijdens de mix.
Dit wordt goed ge¨ıllustreerd aan de hand van twee figuren uit Cliff (2000). Op figuur 1.2 wordt een slechte overgang afgebeeld. Het tempo van beide nummers is niet gelijk en de beats zijn niet gealigneerd. Figuur 1.3 daarentegen is een afbeelding van een goede overgang. Niet enkel het tempo is gelijkgesteld tussen de beide nummers maar ook de beattijdstippen zijn volledig gesynchroniseerd. Een laatste stap is het kiezen van een geschikt opgelegd volumeverloop voor beide fragmenten. De eenvoudigste oplossing is de amplitude van het eerste audiosignaal lineair te laten afnemen en de amplitude van het tweede audiosignaal gelijkmatig lineair te laten toenemen. Een voorbeeld van deze crossfade is te zien op figuur 1.3.
1.2
Literatuurstudie
Verschillende onderzoeksdomeinen zijn nuttig voor mijn werk. In de volgende secties geef ik een overzicht en bespreek ik de bestaande literatuur en de beschikbare toolboxes in de relevante onderzoeksdomeinen. 3
4
Hoofdstuk 1. Inleiding
Figuur 1.2: Een slechte overgang tussen twee nummers.
1.2.1
Algemeen
Er is in het verleden al onderzoek gebeurd naar automatische dj-software. In Hang the DJ: Automatic Sequencing and Seamless Mixing of Dance-Music Tracks door Cliff (2000) worden enkel basiseigenschappen van dj-software uiteengezet. Het artikel legt het belang van een zelfde tempo van beide nummers en goede beatsynchronisatie uit aan de de hand van figuren 1.2 en 1.3. Er wordt ook besproken hoe een tempotraject kan gebruikt worden om het tempoverloop gedurende een dj-set te vari¨eren. Cross (2003) bespreekt de evolutie van de dj-mixer sinds het ontstaan ongeveer 40 jaar geleden tot de complexe hedendaagse apparaten. De crossfader - ´e´en van de belangrijkste elementen van een dj-mixer - maakt het mogelijk om een naadloze volumeovergang te cre¨eren tussen twee nummers. Er zijn verschillende types crossfaders. De belangrijkste zijn deze met een lineaire volumeverloop. Het volume van het uitgaand nummer neemt lineair af en het volume van het inkomend nummer stijgt gelijkmatig zodat er een constant volume is gedurende de mix. Een tweede belangrijk type crossfader heeft een veel bruusker volumeverloop. Bij het begin van de mix gaat het volume van het inkomend nummer snel naar het maximum en blijven beide nummers op het maximum volume bijna gedurende de volledige mix. Pas op het einde van de mix neemt het volume van inkomend nummer snel af tot het niet meer hoorbaar is. Moderne crossfaders maken het al mogelijk voor de dj om het volumeverloop zelf in te stellen. 4
5
Hoofdstuk 1. Inleiding
Figuur 1.3: Een goede overgang tussen twee nummers.
1.2.2
Beatdetectie, toonaarddetectie en timestretching
Ook beatdetectie en toonaarddetectie zijn grondig onderzocht. Er zijn verschillende toolboxes en programma’s beschikbaar. Beatroot 2 van Dixon (2001) is een java-programma dat de beattijdstippen van een muzieknummer kan detecteren. De broncode van dit programma is beschikbaar onder de GNU General Public License 3 en kan de vrij gebruikt en gedistribueerd worden mits vermelding van de auteur. De MIRtoolbox - Lartillot et al. (2008) - heeft een functie mirkey() dat de toonaard van een nummer kan detecteren. De output van deze functie bevat de toonaard en een kwaliteitsmaat van de detectie (een waarde tussen 0 en 1). Deze toolbox is uitgegeven onder de GNU General Public License. Timestretching is het proces waarbij het tempo van een nummer aanpast zonder de toonhoogte te veranderen. Op gewone platenspelers gebruikt door dj’s kan het afspeeltempo van een song aangepast worden tussen bepaalde grenzen (typisch -8% tot +8%). Maar als het tempo wordt veranderd, verandert de toonhoogte ook. Het timestretchen van een signaal elimeneert dit nadeel aanwezig op standaard dj-apparatuur. Er bestaan verschillende algoritmes en implementaties voor timestretching. Er zijn twee algemene methodes om een signaal te timestretchen4 . De eerste is de phase vocoder. Deze implementatie kan het tempo van een nummer met een grote factor schalen aan een goede kwaliteit maar is redelijk traag en 2
http://www.elec.qmul.ac.uk/people/simond/beatroot/index.html http://www.gnu.org/licenses/gpl-2.0.txt 4 http://www.dspdimension.com/admin/time-pitch-overview/ 3
5
6
Hoofdstuk 1. Inleiding
dus niet interessant voor deze toepassing. Een tweede methode is Time Domain Harmonic Scaling. Dit algoritme kan op een snelle manier het tempo van signalen schalen. Indien de schaling slechts enkele procenten bedraagt (wat de bedoeling is), geeft deze methode een goede kwalitatieve output. Het nadeel van deze methode is dat de kwaliteit sterk daalt als er geschaald wordt met grote factoren. Daarom moet dit vermeden worden door opeenvolgende nummers met een gelijkaardig tempo te kiezen. Het externe programma soundstretch Parviainen (2005) uitgegeven onde de GNU Lesser General Public License 5 implementeert het TDHS algoritme.
1.2.3
Zangdetectie
Er zijn al verschillende methodes onderzocht om zang te detecteren in muzieknummers. In de volgende sectie bespreek ik een aantal van de artikels die handelen over het detecteren van zang of het selecteren van geschikte features voor de detectie. In tabel 1.1 wordt een overzicht gegeven van de besproken artikels. Artikel
Onderwerp
Features
Classifier
Accuraatheid op testset
Berenzweig & Ellis (2001) Nwe & Wang (2004) Leung et al. (2004) Tzanetakis (2004) Rocamora & Herrera (2007) Lukashevich et al. (2007)
Zangdetectie op basis van spraakherkenning Multi model Hidden Markov Model Gebruik van ICA-FX features Gebruik bootstrapping Vergelijken features en classifiers ARMA filtering
PPF LFPC PLP/ICA-FX spectrale featureset MFCC+D MFCC
HMM MM-HMM SVM NN SVM GMM
80% 84.3% 80% 67% tot 75% 78.5% 75% tot 90%
Tabel 1.1: Overzicht literatuur zangdetectie
In het artikel Comparison of Different Implementations of MFCC van Fang et al. (2001) worden verschillende implementaties van deze features besproken. MFCC staat voor MelFrequency Ceptrum Coefficients en worden zowel gebruikt voor spraakherkenning als zangdetectie. De performantie van de co¨effici¨enten is afhankelijk van het aantal filters, de vorm van de filters, hoe de filters geplaatst worden en de manier waarop het spectrum geschaald wordt. Uit de vergelijking van de verschillende implementaties in het artikel blijkt dat: 35 filters een iets betere performantie geven, de vorm van de filters weinig invloed heeft, de mel-schaal de beste keuze is en het beter is de filters te laten overlappen. Ook wordt aangehaald dat het goed is om de nulde co¨effici¨ent te behouden. Deze stelt een verzameling van de gemiddelde energie binnen iedere frequentieband voor. Het is belangrijk op te merken dat deze features getest zijn op spraakherkenning en niet op zangdetectie. Berenzweig & Ellis (2001) stellen een methode voor om zang te detecteren gebaseerd op systemen voor spraakherkenning. Er wordt geprobeerd om zang te herkennen met behulp van een acoustic classifier getraind voor spraakherkenning. Alhoewel zang sterk verschilt van 5
De software mag vrij gebruikt worden binnen andere software onder een andere licentie.
6
7
Hoofdstuk 1. Inleiding
normale spraak, stellen de auteurs methodes voor om zang te herkennen aan de output van de classifier. Een Hidden Markov Model (HMM) laat toe om de beste labels te vinden voor een sequentie van onzekere data. De spraakherkenner bestaat uit een Neuraal Netwerkmodel dat posterior probability features (PPFs) genereert die de basis vormen voor verdere berekeningen. Het audiosignaal wordt opgesplitst in frames met een lengte van 16ms. Uit de tests blijkt dat uitmiddelen over 81 frames (ongeveer 1.3s) een optimaal resultaat geeft. De trainingdatabank bestaat uit 61 fragmenten van 15s lang en er wordt getest op 40 fragmenten met een zelfde lengte. De classifier bereikt op deze test-databank een accuraatheid van 80%. Nwe & Wang (2004) maken gebruik van een Hidden Markov Model om frames als vocaal of niet-vocaal te classifi¨eren. Het verschil met andere methodes is dat men hier gebruikt maakt van verschillende HMMs. Men splitst het muziekstuk op in verschillende klasses en past een verschillende HMM toe op iedere klasse, een Multi Model Hidden Markov Model (MMHMM). Deze methode baseert zich op het feit dat de structuur van een muzieknummer bestaat uit een intro, strofes, refrein, bridge en outro. Deze segmenten hebben een verschillende signaalsterkte. Deze 5 klasses worden dan nog eens opgesplitst in 4 subklasses: laag tempo (threshold 70 bpm), hoog tempo, zacht en luid. Uiteindelijk bekomen we 20 klasses en dus 20 modellen. Men maakt ook gebruik van automatische bootstrapping. Eerst wordt de hierboven beschreven MM-HMM getraind aan de hand van een training-databank. Daarna wordt het testnummer gesegmenteerd en geclassifi¨eerd door het MM-HMM. Het resultaat van deze bewerking wordt gebruikt om een tweede bootstrapped HMM te trainen. Dan wordt zang gedetecteerd in het nummer aan de hand van dit bootstrapped HMM. Het systeem neemt Log Frequency Power Coefficients (LFPC) als features. Het muzieksignaal wordt opgedeeld in frames met een lengte van 20ms en 13ms overlap. Er werd getest aan de hand van een databank van 20 nummers waarvan 6 nummers voor het trainen van de modellen gebruikt wordt en de andere 14 voor het testen. Op deze testset bereikt men 84.3% accuraatheid. De methode voor zangdetectie voorgesteld door Leung et al. (2004) is gelijkaardig aan de andere systemen op ´e´en zaak na. De gekozen PLP (Perceptual Linear Predictive) features worden omgevormd voor de classificatie. Eerst wordt de GLR (Generalized Likelihood Ratio) afstandsmaat gebruikt om de grenzen tussen zangfragmenten en muziekfragmenten te bepalen. Dan wordt de dimensie van de featureset herschaald door ICA-FX (Independent Component Analysis Feature Extraction). Deze ICA-FX features worden dan gebruikt als input voor de SVM. Er werd getest aan de hand van een trainingset van 5 popsongs en een testset van 25 popsongs. De gebruikte lengte van de frames is 16ms. Er wordt een accuraatheid bekomen van 80%. Een semi-automatische methode om zang te detecteren wordt door Tzanetakis (2004) besproken. De gebruiker krijgt een 2s durend fragment voorgeschoteld dat manueel moet ge7
8
Hoofdstuk 1. Inleiding
annoteerd worden. Aan de hand van deze annotatie zal het systeem dan automatisch zang detecteren in de rest van het nummer. Deze procedure heet bootstrapping. Bootstrapping wordt als methode voorgesteld omdat het moeilijk is classifiers te trainen om voor ieder nummer over zeer verschillende genres goed te presteren. De gebruikte featureset bevat verschillende spectrale descriptors en bijhorende statistieken. Het audiosignaal wordt opgedeeld in frames met een lengte van 20ms, maar features worden berekend over segmenten van 2s. Het systeem werd getest op 10 jazz-nummers met gebruik van verschillende classifiers. De prestaties vari¨eerden tussen 67% en 75% met Neurale Netwerken (kort gevolgd door SVM) als beste classifier. Rocamora & Herrera (2007) onderzochten welke features en classifiers het best zijn om zang te detecteren. De training-databank bestaat uit audiofragmenten met een lengte van 0.5s, 1s en 3s (500 elk) uit verscheidene genres die uitsluitend zang of geen zang bevatten. Het systeem wordt gevalideerd door 63 muziekfragmenten die 10s lang zijn (uit Magnatune2 opnames). Als classifier wordt een Support Vector Machine (SVM) gebruikt. Deze blijkt superieur ten opzichte van Artificial Neural Networks, Gaussian Mixture Models, een classifier die het C4.5 algoritme implementeert en 2 verschillende K-Nearest Neighbors (KNN). Het audiosignaal wordt opgesplitst in frames met een lengte van 25ms en een stapgrootte van 10ms. Het grootste deel van de energie van een zangstem valt tussen 200Hz en 2000Hz. De sprectrale descriptors worden voor een frequentierange tussen 200Hz en 16kHz berekend. Omdat classificatie per frame zeer ruisgevoelig is, moet er gebruik gemaakt worden van de informatie over meerdere opeenvolgende frames. Dit kan door segmentering van het audiosignaal bv. gebaseerd op de beattijdstippen of akkoordveranderingen. De descriptors die worden vergeleken zijn: Mel Frequency Cepstral Coefficients (MFCC), Perceptually derived LPC (PLPC), Log Frequency Power Coefficients (LFPC), Harmonic Coefficient (HC) en een verzameling die Spectral Centroid, Roll-off, Flux, Skewness, Kurtosis, Flatness en Pitch bevat. Voor iedere descriptorco¨effici¨ent (ook voor de delta’s en dubbele delta’s) wordt het gemiddelde, de mediaan, standaarddeviatie, skewness en kurtosis berekend. De descriptors worden onderverdeeld in featuresets. Features die geen meerwaarde geven aan een set worden verwijderd. De descriptors worden vergeleken via 10-fold cross-validatie aan de hand van de training-databank. MFCC blijkt het meest geschikt te zijn. Deze featureset bevat 13 MFCC co¨effici¨enten, hun delta’s, de mediaan en standaarddeviatie en behaalt een accuraatheid op frameniveau van 84.5%. De delta’s geven een performantiewinst van 2% maar worden meestal weggelaten. Op de test-databank haalt het systeem een performantie van 78.5%. De focus van het artikel door Lukashevich et al. (2007) is postprocessing. De imperfectie van de classifier zorgt ervoor dat de classificatie snel kan vari¨eren op frameniveau. Daarom wordt voorgesteld om een Autoregressive Moving Average Filter (ARMA Filter) te gebruiken. Er wordt een eenvoudige decisiefunctie opgesteld die gebruikt maakt van de kansen dat een feature vector x behoort tot de klasse VOX (zang) of MUS (geen zang). Aangezien zang 8
9
Hoofdstuk 1. Inleiding
continu is over verschillende frames, kunnen we aannemen dat de de beslissing of frame i zang bevat afhangt van de k vorige frames. Het kan dus ge¨ınterpreteerd worden als een autoregressief proces. In het artikel stellen ze een ARMA filter op met parameters p en q gelijk aan 10. Om het systeem te testen gebruiken ze Gaussian Mixture Models als classifier en MFCC als features. Het audiosignaal werd opgedeeld in frames met een lengte van 30ms en een stapgrootte van 10ms. De testset bevat 46 nummers en de trainingset 38 nummers. De VOX en MUS klasses werden apart ge¨evalueerd omdat het correct voorspellen van een MUS-frame belangrijker is. De gemiddelde resultaten zijn 90,5% voor de MUS-klasse en 75% voor de VOX-klasse. Door het gebruik van de ARMA filter is de accuraatheid gestegen met ongeveer 8%.
1.3
Bestaande dj-software
De bestaande dj-software kan ruwweg opgesplitst worden in drie grote categorie¨en (zie tabel 1.2). De mogelijkheden vari¨eren van software die een eenvoudige overlap mogelijk maakt tot intelligente dj-tools en programma’s die beatgesynchroniseerde mixes mogelijk maken. Categorie
Functie
Doelgroep
Voorbeelden
A B C
Afspelen van afspeellijsten Mixen van songs Automatisch mixen
Thuisgebruikers (Professionele) dj’s eigenaars van bars, radiodj’s...
Itunes, Windows Mediaplayer,... Traktor Dj Studio, BPM Studio,... OtsAv (semi-automatisch)
Tabel 1.2: Overzicht van de bestaande dj-software
Een eerste categorie bevat audiospelers die afspeellijsten kunnen afspelen met een minimale overlap. Dit is standaard mogelijk met software zoals bv. itunes, windows mediaplayer, amarok en rhythmbox. Andere programma’s zoals winamp maken dit mogelijk via plug-ins. De audiospeler overloopt een lijst met muzieknummers en overlapt het einde van het huidige nummer met het begin van het volgende nummer. De instellingen beperken zich meestal tot het instellen van de lengte van de overlap. Er is geen mogelijkheid om het volumeverloop of het moment van de overgang zelf te bepalen. Het tempo van de muzieknummers wordt niet gesynchroniseerd en de software kan zelf geen volgend nummer op een intelligente manier bepalen. Daarom moet de gebruiker een afspeellijst samenstellen en kan deze in vaste of willekeurige volgorde laten afspelen. Geen enkele van de programma’s die tot deze categorie behoren, hebben als hoofddoel om gebruikt te worden als dj-software maar bieden enkel de mogelijkheid aan muziekliefhebbers om hun digitale muziekverzameling op een vlotte continue manier af te spelen. De tweede categorie bevat software die bedoeld is voor de professionele en de amateur-dj. Traktor DJ Studio van Native Instruments, Live van Ableton, BPM Studio van ALCATech, 9
10
Hoofdstuk 1. Inleiding
Jackson DJ van Van Aeken Software, Virtual DJ van Atomix Productions, Deckadance van Image-Line Software en het open-source project Mixxx 6 behoren allemaal tot deze groep. De mogelijkheden van deze programma’s vari¨eren heel sterk, maar in essentie hebben ze allemaal hetzelfde doel. Ze maken het mogelijk voor gebruikers om nummers manueel of semi-automatisch te mixen. Meestal is de gebruikersinterface een emulatie van de klassieke dj-apparatuur: twee of meerdere draaitafels en een mengpaneel. Het tempo van twee muzieknummers kan automatisch gesynchroniseerd worden maar de overgang moet manueel gebeuren. Deze groep software biedt een beperkte automatisering van het dj-proces. Belangrijke kwaliteiten zoals het selecteren van een volgend nummer en bijhorend mixfragment moet manueel door de dj gebeuren. Deze programma’s zijn echte dj-tools en hebben niet het doel volledig automatisch mixes te genereren. Software dat met een minimale inbreng van de gebruiker automatisch een goede mix genereert, behoort tot de derde categorie. Voorlopig bestaat er geen software dat zelf intelligente overgangen kan cre¨eren. OtsAv van Ots Labs kan automatisch mixen maar bijna alle info over de nummers moet door de gebruiker ingegeven worden. Zo moeten plaatsen waar de intro eindigt en de outro begint manueel ingesteld worden. This is my jam 7 is een ander voorbeeld van een project dat tot deze groep behoort. In een webapplicatie kan de gebruiker nummers selecteren en dan wordt automatisch een korte beatmix (jam) gecre¨eerd. De instellingen zijn beperkt tot het kiezen van de lengte van de overlap (2 tot 10s) en er wordt telkens maar een kort fragment van de nummers afgespeeld. Een goed programma dat volledig automatisch nummers kan selecteren en bijpassende overgangen kan genereren bestaat nog niet. Het is dan ook het doel van deze thesis om deze leegte in te vullen. De weblinks naar de producenten van alle vermelde software zijn te vinden in bijlage B.
6 7
Andersen (2005) www.thisismyjam.com
10
Hoofdstuk 2
Algemene Beschrijving Het doel van dit werk is een systeem te ontwerpen dat een vloeiende aaneensluitende mix van nummers automatisch kan genereren. Naast het cre¨eren van een volledige dj-set, maken we het ook mogelijk om verschillende mixes voor ´e´en bepaald nummer te maken. Het systeem dient zelf een song te kiezen uit een verzameling songs en een gepaste overgang te genereren. Dit dient te gebeuren op een intelligente manier. Daarom wordt gebruik gemaakt van het tempo, de zang, de energie en de akkoordinformatie van de verschillende nummers. Deze criteria komen overeen met zaken waarmee een dj rekening houdt tijdens het maken van een dj-set zoals uitgelegd in de inleiding. R 1 . Er werd voor matlab gekozen omdat Deze routine is ontwikkeld met gebruik van Matlab deze goede mogelijkheden biedt voor (audio)signaalverwerking en er al verschillende bruikbare algoritmes ge¨ımplementeerd zijn in de matlab-programmeertaal. Het nadeel van deze keuze is dat matlab redelijk traag is omdat alle commando’s tijdens de uitvoering ge¨ınterpreteerd en niet vooraf gecompileerd worden. Daarom worden enkele tijdkritische berekeningen uitgevoerd door externe programma’s.
In dit hoofdstuk wordt de algemene werking en opbouw van het volledig systeem beschreven. Meer gedetailleerde uitleg over de verschillende onderdelen volgt in latere hoofdstukken.
2.1
Algemeen overzicht
Het mixen van verschillende muzieknummers kan opgedeeld worden in drie stukken. De eerste stap is een geschikt nummer selecteren en het tempo van beide nummers gelijkstellen. Vervolgens moet in het huidige nummer en het volgend nummer een passend fragment gekozen worden om een overgang te maken en worden de beats gealigneerd. Ten laatste wordt er een volumeverloop aan de fragmenten beide nummers opgelegd en wordt de overgang gecre¨eerd. 1
Matlab versie 7.4.0 R2007a
11
12
Hoofdstuk 2. Algemene Beschrijving
Om deze stappen te doorlopen en een goede mix te cre¨eren worden verschillende criteria gebruikt. Het tempo en de toonaard van de nummers bepalen een geschikt volgend nummer. Er wordt namelijk altijd gezocht naar een nummer met een gelijkaardig tempo en een bijpassende toonaard. In plaats van lokaal te zoeken naar akkoordveranderingen, wordt voor een nummer de toonaard bepaald. Als uitbreiding zou er lokaal binnen een nummer kunnen gezocht worden naar verschillende akkoorden, maar in dit werk beperk ik me tot het bepalen van ´e´en globale toonaard per song. Passende toonaarden worden bepaald via de kwintencirkel. Om een geschikt fragment voor een overgang te kiezen worden de plaatsen waar zang aanwezig is en de energieveranderingen binnen een nummer in rekening gebracht. Het energieverloop bepaald in grote mate welk fragment in beide nummers gekozen wordt. In dit energieverloop zoekt de routine het fragment dat het meest gelijkenis toont met ´e´en van de vooropgestelde energiepatronen. Deze patronen komen overeen met fragmenten die een echte dj zou kiezen om twee nummers te mixen. Bij de keuze van fragmenten probeert de routine ook te voorkomen dat in beide fragmenten zang aanwezig is zodat deze niet overlapt tijdens de overgang. Om op een snelle en vlotte manier mixes te kunnen generen wordt het systeem opgesplitst in een trainingsfase en een afspeelmodus. Alle tijdrovende berekeningen zoals het bepalen van het tempo, de toonaard en de zang worden vooraf tijdens de trainingsfase voor ieder nummer in de verzameling uitgevoerd. Tijdens de afspeelmodus wordt deze data gebruikt om ´e´en of meerdere mixes voor een bepaald nummer te genereren. De trainingsfase moet dus eerst eenmaal uitgevoerd worden voordat het mogelijk is om mixes te cre¨eren met de routine. Dit veronderstelt wel dat tijdens de afspeelmodus de collectie songs niet wijzigt. Indien er wijzigingen doorgebracht zijn, moet de trainingsfase opnieuw doorlopen worden. Het gebruik van een trainingsfase bespaart veel tijd tijdens de afspeelmodus zodat een mix sneller gecre¨eerd kan worden. De stappen die uitgevoerd worden tijdens de afspeelmodus komen overeen met de verschillende stappen die nodig zijn om een mix te genereren: songselectie, fragmentselectie en een overgang cre¨eren. Een algemeen schema van het systeem is te vinden op de figuur 2.1. De input van het systeem bestaat uit een huidige song, een pool van songs waaruit nummers kunnen gekozen worden en nog enkele gebruikersinstellingen. Het programma kan enkel nummers als wave-bestanden (.wav) verwerken. Audiobestanden in een ander formaat zoals mp3 of ogg moeten eerst geconverteerd worden. Tijdens het ontwikkelen en evalueren van de routine werd gewerkt met mono wave-bestanden met een samplefrequentie van 22050kHz. Daaruit volgt bijvoorbeeld dat een geluidsfragment van 10s 220500 samples bevat. Er werd gekozen voor deze samplefrequentie om twee redenen. Bij deze samplefrequentie is de snelheid van de verwerking van meerdere audiobestanden binnen matlab aanvaardbaar. En ten tweede blijft het geheugengebruik binnen matlab voldoende laag tijdens het inlezen en verwerken van twee muzieknummers. Wave-bestanden met een hogere samplefrequentie (bv. 44100kHz) kunnen ook behandeld worden maar dan duurt de verwerking langer en wordt meer geheugen 12
13
Hoofdstuk 2. Algemene Beschrijving
Energieverloop
Pool van songs
Selectie van een volgende song
Huidige song
Fragmenten selecteren
Gepaste overgang creëren
Dj-set / Mix(es)
Instellingen
Afspeelmodus
Tempo & toonaard
Zang
Trainingsfase
Figuur 2.1: Schema van het volledige systeem
gebruikt door Matlab. De output van de routine heeft hetzelfde formaat als de input, in dit geval dus een mono wave-bestand met samplefrequentie 22050kHz. De output van het systeem is een volledige dj-set of aparte mixes met de bijhorende informatie in een tekstbestand. De verschillende modules werden ge¨ımplementeerd als matlab-functies. De trainingsfase wordt gestart door het oproepen van het bestand DSSP AUTODJ Train.m. In de afspeelmodus kunnen er twee functies opgeroepen worden. De eerste is ge¨ımplementeerd in het bestand DSSP AUTODJ CreateDjSet.m en cre¨eert voor een nummer een volledige aaneensluitende djset die bestaat uit een opgegeven aantal songs. De tweede functie is DSSP AUTODJ CreateMixes.m en genereert een opgegeven aantal mixes voor de ingegeven song. De werking en opbouw van deze functies wordt in de volgende secties uitvoerig besproken.
2.2
Trainingsfase
Tijdens de trainingsfase wordt het tempo, de toonaard en de zang van een nummer gedetecteerd en opgeslagen in een matlab-object (.mat). De trainingsfase is ge¨ımplenteerd in 13
14
Hoofdstuk 2. Algemene Beschrijving
het bestand DSSP AUTODJ Train.m. Deze functie heeft twee argumenten: de map waar de audiobestanden zich bevinden en de naam van het trainingsbestand dat gecre¨eerd moet worden. Telkens als de collectie nummers gewijzigd wordt, moet de trainingsfase opnieuw doorlopen worden. Het trainingsbestand wordt opgeslagen in de map \train een submap van de hoofdmap. Een voorbeeld van een oproep: train(’C:\Music\’,’trainingsData’); Voor ieder audiobestand wordt dan de volgende data berekend en opgeslagen in een matlabstruct song met de volgende velden: • tempo: het tempo van een audiobestand in beats per minute. • key: de toonaard van een nummer in tekstformaat (bv. Dmin). • singingVoice: een vector die een nul bevat in een interval2 waar geen zang aanwezig is en een ´e´en bevat in een interval waar wel zang aanwezig is. De data van ieder nummer wordt dan samengevoegd in de cell array trainingData die opgeslagen wordt met de opgegeven naam.
2.3
Afspeelmodus
Nadat de trainingsfase doorlopen is, kunnen nummers gemixt worden. Daarbij zijn twee mogelijkheden: er wordt een aaneensluitende dj-set of meerdere mixes met het opgegeven nummer gecre¨eerd. Daarvoor zijn respectievelijk de functies createDjSet(...) en createMixes(...) ge¨ımplementeerd. Beide functies zijn gelijkaardig opgebouwd maar hebben een verschillende output. In de volgende secties worden beide functies besproken.
2.3.1
Een volledige dj-set cre¨ eren
Een dj-set is een aaneenhangende mix van een aantal muzieknummers. Een dj-set kan gegenereerd worden met de functie createDjSet(...). Deze is ge¨ımplementeerd in het bestand DSSP AUTODJ CreateDjSet.m en heeft vijf argumenten: • inputFile: volledige map en naam van het inputbestand bv. C:\Music\Number001.wav. • trainingData: de naam van de trainingsdata die moet gebruikt worden. • nrSongs: het totale aantal songs dat de dj-set moet bevatten. • outputFilename: de naam van het outputbestand. 2
zie configuratie: sectie 2.4
14
15
Hoofdstuk 2. Algemene Beschrijving • outputFolder: de map waar het outputbestand moet opgeslagen worden. Een voorbeeld van een functieoproep: createDjSet(inputFile,trainingData,nrSongs,outputFilename,outputFolder);
De output bestaat uit twee onderdelen. De dj-set wordt opgeslagen als wave-bestand maar ook alle info over gegenereerde overgangen wordt opgeslagen in een bijhorend tekstbestand. Een voorbeeld van zo’n tekstbestand is te vinden in bijlage A. Dit bestand bevat eerst alle instellingen uit DSSP AUTODJ config.ini, daarna volgt info over het eerste nummer en gedetailleerde info over ieder gekozen song en de bijhorende overgang. Voor elk nummer wordt het tempo en de toonaard afgedrukt. Voor iedere overgang wordt het type, de tijdstippen waarop de overgang start in beide nummers en de lengte van de overgang weergegeven. Daarbij worden nog enkele kwaliteitsmaten afgedrukt. De kwaliteit van de selectie van een nummer wordt weergegeven in twee onderdelen: de afstand tussen de toonaarden en het verschil in tempo (zie hoofdstuk 4). De kwaliteit van de overgang wordt opgesplitst in 3 delen: de gemiddelde afwijking tussen de beats van beide nummers in seconden, de mate waarin de signalen gelijken op de gekozen patronen (waarde tussen 0 en 1) en info over eventuele zangoverlap (zie hoofdstuk 5). De betekenis van deze kwaliteitsmaten wordt uitvoerig beschreven in de volgende hoofdstukken. Een dj-set wordt op een iteratieve manier opgebouwd. Daarbij wordt gebruik gemaakt van de functie createMix(...). Deze functie kan voor ´e´en nummer de best passende volgende song selecteren en een gepaste overgang cre¨eren. Een functieoproep kan er zo uitzien: mixInfo = createMix(file,trainingData,outputFolder,outputName); De input van deze functie is het huidige nummer (de struct file), de bijhorende trainingsdata, de outputmap en de naam van het outputbestand. De output van deze functie is een struct die alle info over het gekozen nummer en de overgang bevat. Het algoritme waarmee een dj-set opgebouwd wordt, ziet er als volgt uit: 1. Kopieer de gegevens van de inputsong naar de struct file en verwijder het nummer uit de trainingsdata. 2. Herhaal voor het aantal overgangen dat moet gecre¨eerd worden (nrSongs - 1): (a) Roep createMix op met de map voor tijdelijke bestanden als outputmap. (b) Verwijder het nummer dat gekozen werd voor de mix uit de trainingsdata. (c) Gebruik de output van deze functie als input file voor de volgende iteratie. 15
16
Hoofdstuk 2. Algemene Beschrijving
3. Voeg alle bestanden uit de tijdelijke map samen tot ´e´en outputbestand en schrijf het naar de outputmap. 4. Print alle info over de dj-set naar het scherm en naar een bijhorend tekstbestand. In iedere iteratie wordt het gekozen nummer uit de trainingset verwijderd zodat het geen tweemaal voorkomt tijdens ´e´en dj-set. Telkens wordt de output naar een tijdelijke map geschreven en op het einde worden alle tijdelijke bestanden samengevoegd. Het samenvoegen gebeurt door het externe c-programma joinwav 3 . In Matlab is het laden en wegschrijven van zeer grote audiobestanden niet altijd mogelijk omdat dit te veel geheugen vergt. Daarom worden altijd maximaal twee nummers in Matlab geladen en wordt iedere output weggeschreven naar een tijdelijke map. Pas op het einde worden ze samengevoegd tot een volledige dj-set. Een gevolg van deze iteratieve methode is dat de volledige dj-set een constant tempo heeft. Het tempo van het tweede nummer wordt gesynchroniseerd met het tempo van het eerste nummer, vervolgens wordt het tempo van het derde nummer gesynchroniseerd met het tempo van het tweede nummer, etc. ... Een mogelijke uitbreiding kan het toelaten dat het tempo gedurende een dj-set varieert volgens een opgelegd traject.
2.3.2
Meerdere mixes voor ´ e´ en nummer genereren
Het is ook mogelijk om meerdere mixes te genereren voor eenzelfde huidige song. Dit gebeurt op een analoge manier zoals het cre¨eren van een volledige dj-set. Deze functionaliteit is ge¨ımplementeerd in createMixes. Een voorbeeld van een oproep: createMixes(inputFile,trainingData,nrMixes,outputFilename,outputFolder); Alle argumenten zijn dezelfde als createDjSet behalve nrSongs wordt vervangen door nrMixes. Deze parameter heeft aan hoeveel verschillende mixes er moeten gegenereerd worden voor het inputbestand. De functie maakt ook gebruik van createMix. Het algoritme is gelijkaardig: 1. Kopieer de gegevens van de inputsong naar de struct file en verwijder het nummer uit de trainingsdata. 2. Herhaal k maal voor het aantal mixes dat moet gecre¨eerd worden (nrMixes): (a) Roep createMix op met als naam voor het outputbestand: outputName_k.wav. (b) Print alle info over de mix naar het scherm en naar een bijhorend tekstbestand. (c) Verwijder het nummer dat gekozen werd voor de mix uit de trainingsdata. Het verschil met createDjSet bestaat erin dat er in dat elke mix rechtstreeks naar de outputmap geschreven wordt en dat per mix een tekstbestand uitgeschreven wordt. 3
c joinwav 1.0 - Copyright 2004 Jem E. Berkes (www.sysdesign.ca)
16
17
Hoofdstuk 2. Algemene Beschrijving
2.4
Configuratie
Bij het oproepen van de createDjSet(...) of createMixes(...) kan de gebruiker enkele elementaire instellingen meegeven zoals onder andere het aantal nummers dat de mix moet bevatten en de naam en map van het outputbestand. Maar daarnaast heeft de gebruiker ook de mogelijkheid meer specifieke instellingen te veranderen die de werking van het programma of de output be¨ınvloeden. Deze instellingen kunnen makkelijk aangepast worden in het configuratiebestand DSSP AUTODJ config.ini. Dit bestand kan er als volgt uitzien: [FOLDERS] temp = D:\temp\ exe = D:\UGent\thesis\code\exe\ home = D:\UGent\thesis\code\ [PARAMETERS] alpha = 0.8 minL = 10 maxL = 20 interval = 0.5 buffer = 0.4 nrPatternLengths = 4 maxJndFactor = 2 minJndFactor = 1 songFragment = 0.25
Het configuratiebestand is opgesplitst in twee delen. In het eerste deel is het mogelijk om verschillende mappen aan te passen en in het tweede deel de verschillende parameters. In de volgende opsomming wordt een korte beschrijving van iedere instelling gegeven, voor een gedetailleerde uitleg wordt verwezen naar de respectievelijke hoofdstukken. • temp: de map waar tijdelijke bestanden opgeslagen worden. • exe: in deze map bevinden zich alle externe programma’s die gebruikt worden tijdens het gebruik van de routine. • home: deze map bevat alle bestanden met matlab-code.
• alpha: deze factor bepaald in welke mate het tempo of de toonaard invloed heeft op de songselectie. Als deze factor stijgt, stijgt de impact van het tempo en omgekeerd. alpha ∈ [0, 1]. (zie hoofdstuk 4) 17
18
Hoofdstuk 2. Algemene Beschrijving
• minL & maxL: de minimum en maximum lengte van een overgang tussen twee opeenvolgende nummers in seconden. (zie hoofdstuk 5) • interval: de lengte van het interval waarover zang gedetecteerd en de energie berekend wordt in seconden. (zie hoofdstuk 3 & 5) • buffer & nrPatternLengths: deze parameters hebben invloed op de patronen die gebruikt worden om fragmenten te selecteren. buf f er ∈ [0, 1]. (zie hoofdstuk 5) • maxJndFactor & minJndFactor: deze factoren bepalen de vereiste nauwkeurigheid van de beatsynchronisatie. maxJndF actor > minJndF actor. (zie hoofdstuk 5) • songFragment: dit is de maximum lengte bij het begin of het einde van een nummer waarover een fragment kan gekozen worden. Deze wordt uitgedrukt in een fractie van de lengte van de volledige song. songF ragment ∈ [0, 1]. (zie hoofdstuk 5)
18
Hoofdstuk 3
Traingingsfase Om sneller mixes te kunnen genereren, voeren we verschillende berekeningen vooraf uit tijdens een trainingsfase. Alle rekenintensieve procedures worden indien mogelijk tijdens deze fase uitgevoerd en de resultaten worden opgeslagen in de trainingsdata. Tijdens deze fase wordt het tempo, de toonaard en de zang van een nummer bepaald. Deze data wordt opgeslagen in lijst met matlab-structs. Iedere song heeft de volgende velden: • name: de volledige map en naam van het audiobestand. • tempo: het tempo van een audiobestand in beats per minute. • key: de toonaard van een nummer in tekstformaat (bv. Dmin). • singingVoice: een vector die een nul bevat in een interval waar geen zang aanwezig is en een ´e´en bevat in een interval waar wel zang aanwezig is. In dit hoofdstuk wordt uitvoerig besproken hoe deze data berekend wordt.
3.1
Berekening van het tempo
Het tempo van een nummer wordt gebruikt tijdens de songselectie (zie hoofdstuk 4) en de timestretching (zie hoofdstuk 5). De berekening gebeurt aan de hand van een vector met beattijdstippen. Deze wordt gegeneerd door het extern programma beatroot van Dixon (2001). Omdat deze berekening relatief traag is, gebeurt deze tijdens de trainingsfase. In een eerste stap wordt de vector met beattijdstippen berekend. De output van beatRoot is een vector beatVector met als elementen de beattijdstippen in seconden. Daaruit kunnen we het tempo van het nummer in beats per minute bepalen: tempo = 60/mean(diff(beatVector));
19
20
Hoofdstuk 3. Traingingsfase
De afgeleide van beatVector is een vector waarvan de elementen de lengte van de intervallen tussen de beats weergeven. Door de gemiddelde van deze vector te nemen, bekomen we de gemiddelde lengte van het beatinterval. Om het tempo te berekenen in beats per minute delen we 60 door deze waarde.
3.2
Detecteren van de toonaard
Om opeenvolgende nummers te kunnen mixen met passende toonaard (harmonisch mixen), moeten we de toonaard van ieder nummer bepalen. Dit kan uitgebreid worden door binnen een nummer lokaal akkoordinformatie te gebruiken. Binnen dit werk wordt enkel rekening gehouden de toonaard van de song. Daarvoor gebruik ik een functie uit de MIRtoolbox 1 van Lartillot et al. (2008). De functie mixKey() detecteert de toonaard van een audiosignaal. Om het in een gewenst formaat op te slaan, voeren we de volgende stappen uit: 1. Neem de eerste 60s van een signaal indien dit signaal langer is dan 60s. 2. Detecteer de toonaard van dit audiosignaal met de functie mirKey(). 3. Converteer de output van mirKey() naar tekstformaat. Enkel de eerste minuut van een nummer wordt in rekening gebracht om het proces te versnellen. Daarbij veronderstellen we dat de toonaard in de loop van een nummer niet verandert. Bij de meeste nummers is dit inderdaad het geval. De output van de functie mirKey() zijn twee getallen k en m. k is een getal van 1 tot 12 en stelt de toonhoogte van de grondtoon voor (zie tabel 3.1 voor de conversie naar tekstformaat). Het toongeslacht wordt voorgesteld door m. Deze is 1 voor majeur en 2 voor mineur. Output mirKey(): Toonhoogte in tekstformaat:
1 C
2 C#
3 D
4 D#
5 E
6 F
7 F#
8 G
9 G#
10 A
11 A#
12 B
Tabel 3.1: Conversie van de output van mirKey() naar tekstformaat
3.3
Zangdetectie
De zang van ieder nummer wordt gedetecteerd zodat we kunnen voorkomen dat tijdens een overgang tussen twee nummers zang overlapt. De zang wordt gedetecteerd tijdens de trainingsfase van het systeem en opslagen zodat deze snel opgevraagd kan worden tijdens de afspeelmodus. In deze sectie wordt de zangdetectie in detail uitgelegd. Eerst wordt de algemene 1
http://www.jyu.fi/hum/laitokset/musiikki/en/research/coe/materials/mirtoolbox
20
21
Hoofdstuk 3. Traingingsfase
methode beschreven en daarna ga ik dieper in op verschillende aspecten van de zangdetectie zoals de features, classificatie en postprocessing. In hoofdstuk 6 wordt de zangdetectie ge¨evalueerd.
3.3.1
Algemene Methode
In deze sectie geef ik een overzicht van de algemene methode om zang te detecteren. In latere secties wordt ieder onderdeel dan in meer detail besproken. Het muzieknummer wordt opgedeeld in korte frames en het doel van de zangdetectie is om voor ieder frame te bepalen of het zang bevat of niet. Een frame dat zang bevat noemen we een VOX-frame en een frame dat geen zang bevat een MUS-frame. Een VOX-frame bevat dus zang met of zonder achtergrondmuziek. Voor ieder frame wordt dan een verzameling features berekend. Daarna bepaalt een classifier aan de hand van deze features of een frame tot de VOX-klasse of MUSklasse behoort. Om deze beslissing te kunnen maken gebruikt de classifier een getraind model. Dit model wordt bekomen door de classifier te trainen aan de hand van een verzameling manueel geannoteerde nummers. De output van de classifier is een binaire vector die een 0 bevat op de plaats van een MUS-frame en een 1 op de plaats van een VOX-frame. Deze output kan sterk vari¨eren voor opeenvolgende frames. Daarom wordt op deze vector postprocessing toegepast om beter resultaat te bekomen. Op figuur 3.1 ziet u een schema van deze algemene methode. Model
Audio signaal
Opdelen in frames
Features berekenen
Classifier
Postprocessing
Predictie
Figuur 3.1: Schema van de zangdetectie
Opdat de classifier frames zou kunnen classificeren moet deze getraind worden. Voor 160 muziekfragmenten van 30s is de zang manueel geannoteerd. Deze 160 nummers zijn zeer gevarieerd in genre: popmuziek, klassieke muziek, hiphop, dance, oosterse en afrikaanse muziek. Een deel van de fragmenten bevat zang, andere zijn instrumentaal. Er komen bijna geen fragmenten terug van dezelfde zangers of zangeressen. Er is geannoteerd op het niveau van woorden. Kleine pauzes tussen verschillende woorden komen naar boven in de annotaties. Deze annotaties kunnen gebruikt worden om een classifier te trainen. De output van deze trainingsfase is een model dat de classifier kan gebruiken voor de zangdetectie. Deze methode wordt weergegeven op figuur 3.2.
21
22
Hoofdstuk 3. Traingingsfase
Annotaties
Audiofragmenten
Opdelen in frames
Features berekenen
Classifier
Model
Figuur 3.2: Het trainen van een classifier voor zangdetectie
De keuzes van de features en de classificatiemethode hebben een grote impact op het resultaat van de detectie. Deze keuzes wordt besproken in de volgende secties.
3.3.2
Dataset
Om geschikte parameters te vinden voor de zangdetectie en de zangdetectie te evalueren gebruiken we een verzameling met 160 muziekfragmenten met een lengte van 30s. Voor ieder fragment in de verzameling is de zang manueel geannoteerd. De annotatie gaat tot op het niveau van woorden. Een zin met verschillende pauzes tussen de woorden werd dus niet als ´e´en zangfragment geannoteerd. De verzameling bevat verscheidene genres zoals westerse popmuziek, klassieke muziek, hiphop, dance, oosterse muziek, afrikaanse muziek, etc. ... De set bevat zowel volledig instrumentale nummers alsook fragmenten die volledig uit zang bestaan. De verzameling bevat veel verschillende zangers en zangeressen en fragmenten met meerdere zangstemmen en achtergrondzangers of -zangeressen. Voor het trainen en testen wordt deze dataset opgesplitst in een verzameling trainingnummers en een verzameling testnummers. Voor training nemen we 23 van de set (107 fragmenten), om te testen 31 (de overige 54 nummers). Er wordt altijd gezorgd dat de trainingset ongeveer 50% zangframes en 50% muziekframes bevat. Wanneer er in de volgende onderdelen gebruik wordt gemaakt van een training- en testset, zijn deze sets willekeurig gegenereerd en voldoen ze aan de vermelde voorwaarden.
3.3.3
Features
In het artikel Comparing audio descriptors for singing voice detection in music audio files van Rocamora & Herrera (2007) worden verschillende features voor zangdetectie vergeleken. Een featureset met MFCCs blijkt het beste resultaat te geven. MFCC staat voor Mel-frequency cepstral coefficients en is een representatie van het spectrum van een audiosignaal. De co¨effici¨enten worden berekend tussen 200Hz en 12kHz, analoog aan de methode zoals voorgesteld in Rocamora & Herrera (2007). Er wordt gekozen voor een maximumfrequentie van 12kHz omdat de rekentijd voor de predictie dan aanvaardbaar is. Ik maak gebruik van 22
23
Hoofdstuk 3. Traingingsfase
de matlab implementatie van de MFCC-features van Ellis (2005). De featureset bestaat 52 features en is opgebouwd uit de volgende onderdelen: • 13 Mel-frequency cepstral coefficients. • De afgeleiden van iedere co¨effici¨ent. • De mediaan van iedere co¨effici¨ent over een venster dat de waarden van de vorige frames in rekening brengt. • De standaard deviatie van iedere co¨effici¨ent over hetzelfde venster. Om deze features te bereken moet het signaal opgedeeld worden in overlappende frames. Voor deze toepassing kiezen we een framelengte van 75ms en ieder frame overlapt 25ms. In tabel 3.2 worden verschillende framelengtes vergeleken en daaruit blijkt dat 75ms een goede keuze is. De percentages in de tabel stellen de accuraatheid op frameniveu van de zangdetectie op drie verschillende testsets en getraind door drie verschillende modellen (trainingsets) voor. Framelengte 30ms: 75ms: 150ms:
Testset 1
Testset 2
Testset 3
Gemiddeld
64.66% 67.98% 66.12%
63.59% 67.18% 66.45%
70.79% 70.05% 70.51%
66.35% 68.40% 67.69%
Tabel 3.2: Vergelijking van de framelengtes
Dan kunnen we zoeken naar het optimale venster om de mediaan en standaard deviatie over te berekenen. In tabel 3.3 wordt het resultaat van 5-fold crossvalidatie2 weergegeven over een selectie van 400 frames uit de trainingset van 107 fragmenten. Uit de resulaten volgt dat een venster met een lengte van 0.5s (10 frames) de beste keuze is. Lengte van het venster 0.5s: 1s: 2s:
Testset 1
Testset 2
Testset 3
Gemiddeld
68.5% 69.75% 65%
69.5% 66.5% 67%
67.25% 61.5% 66.75%
68.42% 65.92% 66.25%
Tabel 3.3: Vergelijking van verschillende vensterlengtes
2
5 maal opslitsen in 80% trainingset en 20% testset, zie hoofdstuk 6
23
24
Hoofdstuk 3. Traingingsfase
3.3.4
Classificatie
Nadat de geschikte featureset opgesteld is, moet de beste classifier gekozen worden. De classifier stelt aan de hand van een geannoteerde trainingset een model op. Op basis van dit model kan de classifier dan beslissen aan de hand van de features van een frame of dit frame een zangframe is (VOX) of een muziekframe (MUS). In het artikel Comparing audio descriptors for singing voice detection in music audio files 3 staat beschreven dat een SVM (suppurt vector machine) de beste classifier is voor zangdetectie. Voor deze toepassing wordt de implementatie libSVM 4 met de bijhorende matlab-interface gebruikt. Voor de dataset met fragmenten van 30s is de zang manueel geannoteerd. Een frame dat zang bevat hoort tot de VOX-klasse, een frame dat geen zang bevat behoort tot MUS-klasse. Een VOX-frame kan dus enkel zang bevatten of zang met achtergrondmuziek. De SVM wordt getraind op deze twee klasses. Om een goed model te bekomen moeten twee parameters voor de SVM bepaald worden: c en γ. Om de beste parameters te zoeken, pas ik grid search toe. Ik laat de log2 (c) vari¨eren tussen -1 en 5 en de log2 (γ) tussen -2 en 3 en voor ieder punt op het raster wordt de 5-fold crossvalidation waarde berekend. Daaruit kan dan het beste parameterpaar bepaald worden. Het resultaat van een grid search kan afgebeeld worden met een contourplot (zie bv. figuur 3.3).
Figuur 3.3: Het resultaat van een grid search
Met de beste parameters komen we gemiddeld aan ongeveer 82% 5-fold crossvalidatie over 3 3 4
Rocamora & Herrera (2007) Chang & Lin (2001)
24
25
Hoofdstuk 3. Traingingsfase
trainingsets (zie hoofdstuk 6). De SVM wordt getraind met 1600 frames geselecteerd uit de trainingset. De trainingset bestaat uit 107 fragmenten met een lengte van 30s en om de 50ms wordt een frame gestart met een lengte van 75ms. Dit betekent dat deze verzameling 64093 frames bevat. Omdat de features die berekend worden op de frames met een venster van 10 frames terugkijken (0.5s), selecteren we altijd frames die minstens op een 0.5s van elkaar liggen. Daaruit volgt dat we nog 6409 relevante frames overhouden en ongeveer 25% van deze frames (1600) worden gebruikt om de SVM te trainen. We kiezen voor 1600 frames omdat de trainingsduur van de SVM aanvaardbaar blijft voor dit aantal features (52.1600 = 83200). De accuraatheid van de predictie op frameniveau op een testset van 54 fragmenten bedraagt gemiddeld 75.39%. De zangdetectie wordt uitgebreid ge¨evalueerd in hoofdstuk 6. Op figuur 3.4 staat het resultaat van de detectie op frameniveau van ´e´en fragment met een lengte van 30s afgebeeld. Een frame dat tot de klasse VOX behoort heeft de waarde 1, een MUS-frame heeft de waarde 0. Het is duidelijk te zien dat het resultaat sterk van vari¨eren van frame tot frame. Om de accuraatheid van de zangdetectie te verhogen wordt op het resultaat van de predictie postprocessing toegepast. Dit zorgt ervoor dat de output van de classifier minder varieert.
Figuur 3.4: Voorbeeld van de zangdetectie op frameniveau
25
26
Hoofdstuk 3. Traingingsfase
3.3.5
Postprocessing
Om de fluctuatie van de output van de classifier weg te werken, maken we gebruik van eenvoudige postprocessing. De predictie van ieder frame (0 of 1) wordt vervangen door de gemiddelde waarde van het eigen frame en naburige frames. Er wordt bijvoorbeeld geen gebruik gemaakt van een ARMA filter omdat deze slechts kijkt naar de vorige frames. In deze methode worden de vorige en volgende frames in rekening gebracht. Daarvoor nemen we de gemiddelde waarde van de zangvector met de verschoven versies van deze vector. De vector wordt venstergrootte−1 venstergrootte−1 maal naar rechts verschoven (voorgaande frames) en maal 2 2 naar links verschoven (volgende frames). Op figuur 3.5 staat een voorbeeld van hoe dit gebeurt met een venstergrootte van 5 frames. Voorbeeld postprocessing met venstergrootte 5
Element vervangen door de gemiddelde waarde deze elementen
Figuur 3.5: Postprocessing met venstergrootte 5 frames
Wat is de optimale venstergrootte? Om dit te onderzoeken testen we de zangdetectie met postprocessing opnieuw op drie verschillende testsets bestaande uit 54 fragmenten en getraind door drie verschillende modellen bekomen door een trainingset van 800 frames uit 107 nummers (zie tabel 3.4).
26
27
Hoofdstuk 3. Traingingsfase
Vensterlengte
Testset 1
Testset 2
Testset 3
Gemiddeld
zonder postprocessing
62.08%
67.34%
66.34%
65.25%
10 20 30 40 50 60 70 80 90 100
63.80% 63.91% 64.34% 63.53% 62.97% 62.52% 62.29% 62.33% 62.45% 62.27%
71.02% 72.31% 72.43% 71.95% 71.63% 71.59% 71.50% 71.44% 71.15% 71.38%
68.22% 69.29% 69.00% 69.11% 68.97% 69.06% 69.26% 69.01% 68.34% 67.91%
67.68% 68.50% 68.59% 68.20% 67.86% 67.72% 67.68% 67.59% 67.31% 67.19%
Winst 2.43% 3.25% 3.34% 2.95% 2.61% 2.47% 2.43% 2.34% 2.06% 1.94%
Tabel 3.4: Vergelijking van verschillende vensterlengtes voor postprocessing
Figuur 3.6: Vergelijking van verschillende vensterlengtes voor postprocessing
Uit dit experiment blijkt dat 30 frames (1.5s) de optimale venstergrootte is. Als we de zangdetectie volledig evalueren (zie hoofdstuk 6) bekomen we een accuraatheid op frameniveau 27
28
Hoofdstuk 3. Traingingsfase
na postprocessing van 78.72%. Op figuur 3.7 staat een voorbeeld van zangdetectie voor en na postprocessing.
Figuur 3.7: Zangdetectie voor en na postprocessing
28
Hoofdstuk 4
Songselectie Met de functies createDjSet en createMixes is het mogelijk nummers te mixen. Beide functies roepen de functie createMix op. Deze functie selecteert voor een opgegeven nummer het meest geschikte volgend nummer en cre¨eert een zo goed mogelijke overgang tussen beide nummers. In dit hoofdstuk wordt de songselctie in detail besproken.
4.1
Algemeen
Om een volgend nummer te selecteren worden twee criteria gebruikt. Er wordt namelijk gezocht naar een nummer met een gelijkaardig tempo en een passende toonaard. Een gelijkaardig tempo zorgt ervoor dat het tempo van het gekozen nummer maar met enkele procenten hoeft geschaald te worden. Dit heeft als gevolg dat het nummer afgespeeld zal worden aan een snelheid die maar weinig afwijkt van het originele tempo zodat het verschil met het originele tempo praktisch niet hoorbaar is voor de luisteraar. Volgens Drake & Botte (1993) bedraagt de JND (Just Notable Difference) voor tempo tussen 6.2% en 8.8%. Dit betekent dat de het maar mogelijk is om tempoverschillen hoger dan 6.2% te herkennen. Ten tweede houdt de routine rekening met de toonaarden van de nummers. Er wordt gezocht naar nummers met een toonaard die harmonisch past bij de toonaard van het huidige nummer. Deze manier van mixen staat bekend als harmonisch mixen. De songselectie is ge¨ımplementeerd in het bestand DSSP AUTODJ SelectSongs.m. Een functieoproep ziet er als volgt uit: mix = selectSongs(trainingData_excl_huidige_song,huidige_song); De argumenten zijn de trainingsdata en de de huidige song. De trainingdata is een lijst van songs met de bijhorende info. De huidige song is uit deze lijst verwijderd zodat deze niet kan gekozen worden als volgend nummer. In matlab wordt iedere song voorgesteld als een struct met de volgende velden: 29
30
Hoofdstuk 4. Songselectie • name: volledige map en naam van het audiobestand. • tempo: het tempo van het nummer in beats per minute. • key: de toonaard van het nummer in tekstformaat (bv. Amin).
• singingVoice: een vector die een nul bevat in een interval waar geen zang aanwezig is en een ´e´en bevat in een interval waar wel zang aanwezig is. De output van de functie is dezelfde lijst van songs geordend volgends de meest geschikte song van hoog naar laag. Aan de iedere song zijn twee velden toegevoegd: het verschil in tempo met het huidige nummer en de afstand tussen de toonaarden van het huidige en het gekozen nummer. Deze twee velden geven de kwaliteit van de songselectie weer.
4.2
Methode
Alle info die gebruikt tijdens de songselectie is bevat in de trainingsdata en is dus al vooraf berekend. Dit zorgt ervoor dat het kiezen van een geschikt nummer makkelijk en snel kan gebeuren. Het algoritme waarmee een volgende song gekozen wordt ziet er als volgt uit: 1. Bereken voor iedere song uit de trainingsdata de volgende velden: (a) keyD: De afstand tussen de toonaard van het huidige nummer met het geselecteerde nummer volgens de kwintencirkel. (b) tempoD: Het relatieve verschil in tempo van het huidige nummer en het geselecteerde nummer (in %). 2. Schaal de vector met afstanden tussen de toonaarden tussen 0 en 1 zodat een waarde 1 de toonaard aanduidt met de minimale afstand en de waarde 0 de toonaard aangeeft met de maximale afstand tot de toonaard van het huidige nummer. 3. Schaal analoog aan de vorige stap de de vector met tempoverschillen tussen 0 en 1 zodat de waarde 1 het minimale tempoverschil en de waarde 0 het maximale tempoverschil aanduidt. 4. Combineer beide vectoren tot ´e´en afstandsmaat met gebruik de factor alpha: S = α.tempoD + (1 − α).keyD;
(4.1)
5. Sorteer de trainingsdata volgens de afstandsmaat uit de vorige stap van hoog naar laag en geef deze lijst terug als output.
30
31
Hoofdstuk 4. Songselectie
De factor alpha bepaalt de invloed van de beide criteria op de selectie. De parameter kan aangepast worden in het bestand DSSP AUTODJ config.ini. Alpha heeft een waarde tussen 0 en 1. Indien alpha gelijk is aan 1 wordt enkel het tempo gebruikt, indien 0 enkel de toonaard. In een verzameling nummers met een gelijkaardig tempo, is het aan te raden om alpha laag te nemen. Omdat het tempoverschil tussen alle nummers niet groot is, zal dit nooit leiden tot een slechte selectie. Omgekeerd als het tempo van de verschillende nummers in een verzameling ver uiteen ligt, is het beter de factor alpha hoog te nemen zodat geen nummers geselecteerd worden met een sterk afwijkend tempo.
Figuur 4.1: Kwintencirkel
De berekening van de afstand tussen de toonaard van twee nummers gebeurt aan de hand van de kwintencirkel (zie figuur 4.1). Aan de buitenkant van de cirkel staan de toonaarden in majeur, aan de binnenkant de toonaarden in mineur. Nummers met eenzelfde toonaard passen harmonisch het best bij elkaar. Ook nummers met een aangrenzende toonaarden (afstand 1) zijn geschikt. Als voorbeeld neem ik de toonaard Cmaj. Een nummer met de toonaard Cmaj past harmonisch het best. Ook nummers met een toonaard Fmaj, Gmaj en Amin zijn geschikt.
31
32
Hoofdstuk 4. Songselectie
Daarom kiezen we nummers met een toonaarden die zo dicht mogelijk bij elkaar liggen op de kwintencirkel. Daarvoor vormen we de cirkel om naar een matrix (zie tabel 4.1). Ieder element in deze matrix stelt een toonaard voor en wordt opgeslagen in tekstformaat. Op deze manier is het eenvoudig om de afstand tussen de verschillende elementen te berekenen aan de hand van de co¨ ordinaten van de elementen binnen de matrix. Cmaj Amin
Gmaj Emin
Dmaj Bmin
Amaj F#min
Emaj C#min
Bmaj G#min
F#maj D#min
C#maj A#min
G#maj Fmin
Tabel 4.1: Matrix met toonaarden
32
D#maj Cmin
A#maj Gmin
Fmaj Dmin
Hoofdstuk 5
Mixen van twee nummers Twee nummers met elkaar mixen vergt een goede kennis van de songs, techniek en creativiteit. Eerst moet het tempo en het volume van de songs gelijkgesteld worden. Dan gebruikt de dj zijn kennis van de structuur van de nummers om geschikte fragmenten te selecteren. Vervolgens worden de beats in beide gekozen fragmenten gesynchroniseerd en wordt een gepaste volumeovergang gekozen. Bij het selecteren van een fragment maakt het systeem gebruik van het energieverloop van beide nummers en zorgt het ervoor dat de zang tijdens de overgang niet overlapt. Er wordt voor ieder gekozen fragment gecontroleerd of de beats goed genoeg gesynchroniseerd zijn tijdens de overgang. Dan kiest het systeem afhankelijk van de gekozen fragmenten een gepast volumeverloop voor de overgang. De belangrijkste stap in de procedure is het selecteren van een geschikt fragment. De kwaliteit van de overgang hangt grotendeels af van deze keuze. Als beide fragmenten goed bij elkaar passen en de beats goed gesynchroniseerd zijn, is het eenvoudiger om een goede overgang te cre¨eren. Een dj maakt gebruik van zijn kennis over de structuur van de song. Maar hoe is het mogelijk om automatisch een geschikt fragment te vinden? De methode voorgesteld in dit werk maakt gebruik van het energieverloop van de nummers. Er wordt binnen een nummer gezocht naar fragmenten waarvan het energieverloop zo goed mogelijk lijkt op ´e´en van de vooropgestelde energiepatronen. Deze energiepatronen stellen fragmenten voor die een goede dj zou kunnen kiezen om een overgang te maken. Afhankelijk van de gekozen energiepatronen wordt dan een bijpassend volumeverloop aangemaakt. In dit hoofdstuk worden de stappen van dit proces uitvoerig besproken en uitgelegd.
5.1
Algemene methode
De functie mix2songs kan twee audiobestanden mixen. Een functieoproep ziet er als volgt uit:
33
34
Hoofdstuk 5. Mixen van twee nummers
[mixStrength mixDetails] = mix2songs(song1,song2,outputFolder,outputFilename); De argumenten zijn de twee songs met alle bijhorende info, de outputmap en -bestandsnaam. De functie schrijft de gecre¨eerde mix weg naar de outputmap en geeft enkele kwaliteitsmaten en de details van de overgang terug. Het volgende algoritme is in mix2songs ge¨ımplementeerd: 1. Open beide audiosignalen. 2. Timestretch het tweede nummer zodat het tempo van beide nummers gelijk is. 3. Stel het volume van beide nummers gelijk door de amplitude van het tweede signaal te schalen. 4. Splits beide audiobestanden in twee delen. Enkel het laatste deel van het eerste nummer en het eerste deel van het tweede nummer worden gebruikt om fragmenten te selecteren. 5. Selecteer een gepast fragment in elk nummer. 6. Maak de overgang tussen beide nummers en voeg de afgesplitste delen opnieuw toe. 7. Sla de gecre¨eerde mix op in de outputmap. In de volgende secties worden de verschillende stappen van dit algoritme besproken.
5.2
Timestretching
Het tempo van beide nummers moet gelijk zijn zodat in een latere stap de beats eenvoudig kunnen gesynchroniseerd worden. Timestretching is het proces waarbij het tempo van een nummer aanpast wordt zonder dat de toonhoogte verandert. Er bestaan verschillende algoritmes en implementaties voor timestretching. Zoals besproken tijdens de inleiding is een implementatie van het algoritme Time Domain Harmonic Scaling de beste keuze. Deze methode werkt zeer snel en nauwkeurig voor kleine afwijkingen in tempo. De timestretching wordt uitgevoerd door het externe programma soundstretch 1 . Het tempo van het volgende nummer wordt altijd aangepast aan het tempo van het huidige nummer. Indien dit omgekeerd zou zijn, zou tijdens het cre¨eren van een volledige dj-set telkens het tempo van alle nummers in de huidige set moeten aangepast worden aan het tempo van de nieuwe song. De factor waarmee het tweede audiobestand getimestrecht wordt, is bepaald door het tempo van beide nummers dat berekend is tijdens de trainingsfase van het systeem: 1
Parviainen (2005)
34
35
Hoofdstuk 5. Mixen van twee nummers
f actor =
tempo song1 tempo song2
(5.1)
De resultaten van de timestretching zijn zeer goed. De kwaliteit van het outputbestand is hoog en nauwkeurig. Het duurt ook slechts hooguit enkele seconden om deze te genereren en in te lezen in matlab wat het mogelijk maakt om snel een mix te cre¨eren.
5.3
Volume gelijkstellen
Verschillende audiobestanden hebben een verschillend volume. E´en audiobestand kan veel luider opgenomen dan een ander audiobestand. Om deze verschillen op te vangen, wordt het volume van de nummers gelijkgesteld. Dit zorgt ervoor dat gedurende de mix of dj-set het volume ongeveer constant blijft. Dj’s moeten dit manueel doen door het inputvolume van de nummers aan te passen. In deze routine stellen we het volume tussen twee nummers gelijk aan de hand van de RMS2 waarden g1 en g2 van beide signalen: v u n1 u1 X t y1 (i)2 g1 = n1
(5.2)
v u n2 u1 X t g2 = y2 (i)2 n2
(5.3)
i=1
i=1
met n1 de lengte van y1 en n2 de lengte van y2 . Het tweede signaal kan dan op de volgende manier geschaald worden:
y2 =
g1 .y2 g2
(5.4)
Om clipping (pieken waar de amplitude van een signaal groter is dan 1 en dus moeten afgekapt worden) te vermijden stel ik een maximumgrens aan de schalingsfactor zodat het tweede signaal niet clipt.
5.4
Audiobestanden splitsen
Bij voorkeur wordt een overgang tussen twee nummers gemaakt op het einde van het eerste nummer en het begin van het tweede nummer, zodat beide nummers voldoende lang afgespeeld worden. In het bestand DSSP AUTODJ config.ini is het mogelijk om in te stellen hoe groot de 2
Root Mean Square
35
36
Hoofdstuk 5. Mixen van twee nummers
fractie van de nummers is waar een fragment kan gekozen worden voor de overgang. Standaard staat deze waarde ingesteld op 0.25 (25% van de volledige lengte van het nummer). Dit is het best te illustreren aan de hand van een figuur (zie figuur 5.1). Enkel in het tweede deel van het eerste signaal (y1B) en het eerste deel van het tweede signaal (y2A) kunnen fragmenten geselecteerd worden.
Audiosignaal 1:
y1A
y1B
Audiosignaal 2: y2A
y2B
Figuur 5.1: Splitsen van audiosignalen
Tijdens deze procedure wordt ook de vector die zanginformatie bevat gesplitst zodat enkel verder gewerkt wordt met de relevante delen van deze vector.
5.5
Selecteren van een geschikt fragment
Het selecteren van een fragment is ´e´en van de belangrijkste onderdelen van het systeem. De invloed van de keuze op het kwaliteit van de mix is zeer groot. Om dit op een intelligente manier aan te pakken, is vertrokken van de manier waarop een echte dj fragmenten kiest. Een dj baseert zijn keuze onder andere op het energieverloop van het nummer. Een goede keuze is bijvoorbeeld de intro en outro overlappen zodat beide nummers naadloos in elkaar overgaan en de energie tijdens de overgang niet daalt (zie figuur 1.1 in hoofdstuk 1). Maar omdat het verloop van muzieknummers sterk kan verschillen is het niet aangewezen om bijvoorbeeld specifiek naar de intro of outro te zoeken. Daarom wordt in dit werk een methode voorgesteld aan de hand van energiepatronen. Er worden enkele paren van energiepatronen opgesteld die overeenkomen met het energieverloop van fragmenten die een dj zou kunnen kiezen. Dan wordt in de audiosignalen naar fragmenten gezocht die een zo groot mogelijke similariteit vertonen deze patronen. In de volgende secties bespreek ik de procedure waarmee een geschikt fragment wordt geselecteerd.
5.5.1
Algoritme
Het algoritme waarmee fragmenten worden geselecteerd is ge¨ımplenteerd in het bestand DSSP AUTODJ SelectFragment.m. De argumenten van deze functie zijn de audiosignalen 36
37
Hoofdstuk 5. Mixen van twee nummers
(y1B en y2A), de bijhorende zangvectoren en samplefrequentie. De output de functie is ´e´en struct frag die de geschikte fragmenten in beide nummers voorstelt. Deze struct heeft de volgende velden: • mixP1: het startpunt van het fragment in het eerste audiosignaal in samples. • mixP2: het startpunt van het fragment in het tweede audiosignaal in samples. • L: de lengte van het fragment in samples. • pattern: het type energiepatroon waarmee de selectie overeenkomt. • bv: de vector met beattijdstippen van het fragment in het tweede signaal. • syncError: de gemiddelde afwijking tussen de beattijdstippen van de beide nummers over beide fragmenten in seconden. • patternMatch: een maat die aangeeft in hoeverre de energieverlopen van de signalen overeenkomen met de gekozen energiepatronen. • svOverlap: geeft aan of er zangoverlap in de fragmenten is of niet (0 of 1). Met behulp van het volgend algoritme worden fragmenten geselecteerd: 1. Cre¨eer de zangmatrix S. 2. Bereken voor beide signalen het energieverloop (e1 en e2 ). 3. Stel verschillende energiepatronen op met een lengte tussen de minimum en maximum toegelaten lengte van een overgang. 4. Overloop voor alle gegenereerde patronen met een verschillende lengte de volgende stappen: (a) Overloop voor ieder type patroon met deze lengte deze stappen: i. Stel een matrix P op die aangeeft met welke fragmenten in beide nummers de energiepatronen het best overeenkomen. ii. Transformeer de matrix S naar S0 zodat deze matrix de startpunten van fragmenten zonder zangoverlap aanduidt. iii. Cre¨eer de decisiematrix D door S0 elementsgewijs te vermenigvuldigen met P. iv. Zoek in de decisiematrix D het beste fragment in beide nummers en bereken aan de hand van de beatvectoren de gemiddelde afwijking tussen de beattijdstippen van beide nummers. 37
38
Hoofdstuk 5. Mixen van twee nummers
v. Indien de afwijking van de beattijdstippen beter is dan het voorlopig beste fragment, wordt dit fragment gekozen als het voorlopig beste fragment. (b) Als de afwijking van de beattijdstippen voldoende goed is, wordt het voorlopig beste fragment direct gekozen en wordt de iteratie gestopt. Anders wordt er verder gezocht naar geschikte fragmenten. 5. Geef het best gekozen fragment terug. De verschillende stappen van dit algoritme worden uitvoerig besproken in de volgende secties.
5.5.2
Zangmatrix
Om te vermijden dat zang overlapt tijdens de overgang wordt een zangmatrix opgesteld. Deze matrix wordt gevormd door gebruik te maken van de zangvectoren die berekend zijn tijdens de trainingsfase. Om aan te tonen hoe deze opgebouwd wordt, maak ik gebruik van een voorbeeld. De zangvectoren sv1 en sv2 bevatten een 0 in een interval dat geen zang bevat en een 1 in een interval dat wel zang bevat. De lengte van de intervallen wordt bepaald de paramater interval in het configuratiebestand config . ini . Er wordt over intervallen gewerkt en niet over alle samples omdat de matrices die gecre¨eerd moeten worden tijdens het algoritme veel te groot zouden worden. 1 1 1 1 sv1 = 1 0 0 0 0
en
0 0 0 1 sv2 = 1 1 0 0
(5.5)
Aan hand de van de volgende formule stel ik de matrix S op: S = (sv1 ∗ sv2T ) Toegepast op ons voorbeeld:
38
(5.6)
39
Hoofdstuk 5. Mixen van twee nummers
0 0 0 0 S= 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
1 1 1 1 1 0 0 0 0
1 1 1 1 1 0 0 0 0
1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
(5.7)
Deze matrix bevat een element 0 waar geen zangoverlap is en een element 1 waar wel zangoverlap is. Het aantal rijen komt overeen met de lengte van sv1 en het aantal kolommen met de lengte van sv2 . Een element met index (x,y) geeft weer of er zangoverlap is tussen het interval x uit sv1 en het interval y uit sv2 .
5.5.3
Energiepatronen
In deze sectie bespreek ik de invloed van het energieverloop op de keuze van de fragmenten.
Energievectoren In een eerste stap wordt een energievector voor beide signalen berekend. Ieder element van deze vector bevat de gemiddelde energie over een interval. De lengte van dit interval wordt ook bepaald door de parameter interval in config . ini . De energie van een signaal over een interval wordt als volgt berekend: 2 interval(k) |y(i)|
P
(5.8) L met L = aantal samples in een interval. Na schaling tussen 0 en 1 bekomen we de vectoren e1 en e2 . E(k) =
Opstellen van de energiepatronen In een volgende stap kunnen we de verschillende energiepatronen opstellen. Een energiepatroon stelt de energie van een geschikt fragment voor. Omdat de energie sterk kan varieert tussen verschillende nummers, worden in de patronen geen absolute waarden gebruikt maar enkel binaire waarden (0 of 1). Dit heeft als voordeel dat er het eenvoudig is om patronen op
39
40
Hoofdstuk 5. Mixen van twee nummers
te stellen, maar het nadeel is dat er binnen een signaal geen rekening gehouden wordt met de absolute energiewaarde. Daarom wordt in een latere stap de energie nog in rekening gebracht. Alle patronen komen voor in paren. E´en patroon is bedoeld voor het eerste nummer, het andere is bedoeld voor het tweede nummer. Ieder patroon kan opgesteld worden naar een geschikt fragment dat een dj zou kunnen kiezen voor een overgang. De volgende paren zijn gedefini¨eerd:
Energiepatroon Signaal 1
1
Energiepatroon Signaal 2
1
1
0
0
Figuur 5.2: Energiepatroon 1
Op figuur 5.2 staat het patroon van het type H-H (Hoog - Hoog). Dit is het eenvoudigste patroon. De energie is beide signalen is constant, er zijn dus geen energiesprongen in de fragmenten. Twee fragmenten met een constante energie zijn geschikte om een goede overgang tussen twee nummers te cre¨eren. Er wordt een buffer aan de beide patronen toegevoegd (stippellijn op de figuur). Deze buffer heeft een lengte die bepaald wordt door de parameter buffer in config . ini . Deze buffer behoort niet tot het fragment maar garandeert dat voor of na de overgang de energie nog gelijk blijft. Dit voorkomt storende energiesprongen net voor of na de overgang.
Energiepatroon Signaal 1
1
Energiepatroon Signaal 2
1
1
0
0
Figuur 5.3: Energiepatroon 2
Het tweede type is HL-LH (Hoog Laag - Laag Hoog) (zie figuur 5.3). Dit is een patroon 40
41
Hoofdstuk 5. Mixen van twee nummers
met 1 energiesprong. Voor de eerste signaal daalt de energie van hoog naar laag, voor het tweede omgekeerd. Indien fragmenten die overeenkomen met deze patronen samengevoegd worden blijft de energie tijdens de overgang constant. Dit kan bijvoorbeeld een outro en intro zijn. Als deze samengevoegd worden zodanig dat de sprong in energie perfect samenvalt dan cre¨eren we een naadloze overgang. Er zijn verschillende variaties mogelijk op deze patronen. De energiesprong kan bijvoorbeeld eerder of later in het fragment komen. In de huidige implementatie zijn enkel de types H-H en HL-LH gedefini¨eerd. Maar het is eenvoudig om meerdere types toe te voegen. Deze verschillende types patronen worden gecre¨eerd in verschillende lengtes. In het configuratiebestand is in te stellen in hoeveel verschillende lengtes de patronen aangemaakt moeten worden. Stel dat de minimale lengte van de overgang 7s en de maximale lengte 14s is. Indien de parameter nrPatternLengths 3 bedraagt dan worden patronen met de lengtes 7s, 10.5s en 14s gegenereerd. Daaruit volgt dat voor deze instellingen het totaal aantal gecre¨eerde patronen 6 bedraagt. Er is dus voor gekozen dat het aantal patronen dat moet gegenereerd worden, be¨ınvloed wordt door de parameter nrPatternLengths en dat deze patronen een vaste lengte hebben. Hoe lager de waarde van nrPatternLengths, hoe sneller een mix gecre¨eerd kan worden. Dit komt omdat dan minder fragmenten moeten overlopen worden. Deze methode zorgt ervoor dat er fragmenten geselecteerd worden met een verschillende lengte maar dat door het instellen van nrPatternLengths de rekentijd beperkt kan blijven.
5.5.4
Best geschikte fragment zoeken
Aan de hand van deze patronen kunnen we nu het meest geschikte fragment selecteren. Deze selectie bestaat uit twee stappen: een decisiematrix opstellen aan de hand van de energiepatronen en het beste fragment selecteren op basis van de beatsynchronisatie. De procedure om het beste fragment te zoeken gebeurt iteratief. Er wordt gestart met de langste patronen. Voor alle patronen van deze lengte worden de beste fragmenten gekozen. Indien de beatsynchronisatie voldoet aan de parameter maxJndFactor, worden deze fragmenten direct gekozen en wordt niet verder gezocht naar betere fragmenten. Dit is om het proces te versnellen. Want namelijk het bepalen van de beatvectoren om de beats van beide fragmenten te synchroniseren is de traagste berekening binnen de volledige mixprocedure. Decisiematrix opstellen Eerst wordt voor het paar energiepatronen een matrix P opgesteld. Deze matrix geeft aan hoe groot de similariteit is tussen de energiepatronen en het energieverloop van het audiosignaal. Daarvoor wordt de kruiscorrelatie genomen tussen het patroon het signaal. Eerst stellen we twee vectoren p1 en p2 op. Deze vectoren zijn het resultaat van de kruiscorrelatie tussen de signalen en de patronen. De waarden van deze vectoren zijn geschaald tussen 0 en 1. Er 41
42
Hoofdstuk 5. Mixen van twee nummers
wordt dus geen rekening gehouden met de absolute waarden van de energie. Een constant energieverloop 0 voldoet dus evengoed aan het patroon H-H als een constant verloop 1. De hoogste waarden binnen p1 en p2 duiden de fragmenten aan met de beste gelijkenis met de patronen. Maar om het energieverloop tijdens een overgang zo constant mogelijk te houden, wordt het verschil in energie tussen beide fragmenten ook in rekening gebracht bij het opstellen van de matrix P. Dit gebeurt als volgt:
P(x, y) = max(p1 (x) ∗ p2 (y) − eD(x, y), 0)
(5.9)
waarbij eD(x,y) het gemiddelde van de absolute waarde van het verschil in energie is tussen het fragment in audiosignaal 1 dat start in het interval x en het fragment in audiosignaal 2 dat start in het interval y. In een volgende stap wordt de matrix S getransformeerd tot de matrix S0 . Ieder element S(x, y) bevat info over de zangoverlap tussen de intervallen x en y. Maar we willen weten of er zangoverlap is gedurende het volledige fragment dat start in x en y. Daarom wordt de diagonaalmatrix IL opgesteld. Deze vierkante matrix met grootte L (de lengte van het fragment) laten we over de matrix S lopen. De elementen van S0 worden op de volgende manier bepaald: S0 (x, y) = 1 S0 (x, y) = 0
, als
P
alle elementen IL .
∗ S(x : x + L, y : y + L) == 0
(5.10)
, anders
Daaruit volgt dat S0 een 1 bevat op een plaats waar een fragment met lengte L start zonder zangoverlap en een 0 omgekeerd. Nu is het zeer eenvoudig om de decisiematrix D op te stellen:
D = S0 . ∗ P
(5.11)
Indien S de nulmatrix is, wordt D = P, maar dan is er sowieso zangoverlap tussen de gekozen fragmenten. Ieder element uit D stelt een mogelijk startpunt van een fragment voor. Om het beste fragment te kiezen, moet enkel de maximale waarde uit de D genomen worden. Fragmenten met zangoverlap worden automatisch niet gekozen omdat ze de waarde 0 hebben. De co¨ordinaten van de het element met de maximumwaarde bepalen de startpunten van het fragment. Indien deze co¨ordinaten (x,y) zijn, dan bekomen we volgende tijdstippen: 42
43
Hoofdstuk 5. Mixen van twee nummers startFragment1 = interval_lengte * (x-1); startFragment2 = interval_lengte * (y-1);
Op die manier bekomen we voor het gegeven patroon het meest geschikte fragment. De gekozen waarde uit de matrix D wordt opgeslagen in het veld patternMatch. Deze waarde geeft weer hoe goed de gelijkenis is tussen het energieverloop van het gekozen fragment en het energiepatroon en garandeert dat het energieverschil tussen beide fragmenten laag is. Op figuren 5.4 en 5.5 worden voorbeelden gegeven van gevonden fragmenten.
Figuur 5.4: Voorbeeld patroon type H-H
Beatsynchronisatie Als een geschikt fragment gevonden is, moeten de beattijdstippen bepalen en de beide nummers synchroniseren. De beattijdstippen worden door het externe programma beatroot van Dixon (2001) bepaald. Dit javaprogramma genereert een lijst met beattijdstippen voor een audiofragment. De beatvector wordt berekend op de korte fragmenten omdat op langere bestanden de fout van de beatdetectie groter is. Op figuur 5.6 staat een voorbeeld van het resultaat van van de beatdetectie.
43
44
Hoofdstuk 5. Mixen van twee nummers
Figuur 5.5: Voorbeeld patroon type HL-LH
Aan de hand van de beatvectoren bv1 en bv2 wordt de beste overlapping van beide fragmenten gezocht. De beste overlapping is deze waarvoor de gemiddelde afwijking tussen de beattijdstippen van beide fragmenten het kleinst is. Daarvoor maken we gebruik van de JND: jnd = max(0.006,0.025*mean(diff(bv1/sr))); De JND (Just Notable Difference) is het maximum van 6ms of 2.5% van het gemiddelde interval tussen twee beats 3 . Dit is een grens voor het minimum hoorbare verschil tussen beats. Als de afwijking tussen de beattijdstippen lager is dan deze waarde, zijn beide beats dus niet van elkaar te onderscheiden. Om de beste overlapping te zoeken, convolveren we de eerste beatvector met een gaussiaan waarvoor σ = JN4 D (zie figuur 5.7). Deze waarde wordt gekozen voor σ omdat zolang de afwijking tussen beats kleiner is dan JND, er een goede overlapping is. Hoe kleiner de afwijking, hoe beter. Daarom wordt gekozen voor een gaussiaan. 3
Friberg & Sundberg (1995)
44
45
Hoofdstuk 5. Mixen van twee nummers
Figuur 5.6: Resultaat van de beatdetectie
Figuur 5.7: Resultaat van de convolutie van een gaussiaan en een beattijdstip
45
46
Hoofdstuk 5. Mixen van twee nummers
Daarna wordt de kruiscorrelatie berekend tussen de convolutie van de eerste beatvector met de gaussiaan en de tweede beatvector. Zo bekomen we de optimale de verschuiving van de tweede beatvector (in samples) ten opzichte van de eerste beatvector waarvoor de gemiddelde afwijking tussen de beats het kleinst is. Zo bekomen we de optimale starttijdstippen voor de overgang: het starttijdstip van het eerste fragment en het starttijdstip van het tweede fragment vermeerderd met de berekende optimale verschuiving. Dan kunnen we de gemiddelde synchronisatiefout berekenen. Dit is het gemiddelde van de afwijking tussen de beats van de eerste beatvector en de tweede beatvector. Indien beide beatvectoren niet gelijk zijn in lengte omdat over een deel van ´e´en van beide fragmenten de beats niet gedetecteerd konden worden, zal de synchronisatiefout zeer hoog zijn. Dit komt omdat voor iedere beat de dichtsbijzijnde beat (na synchronisatie) gezocht wordt in de andere beatvector. Indien deze beat niet aanwezig is, wordt een verderopgelegen beat gezocht. Dit heeft als gevolg dat de afwijking zeer hoog wordt en dat deze fragmenten niet zullen gekozen worden (zie verder). Dit geval komt soms voor bij fragmenten met een heel lage energie. Het is niet gewenst dat zo’n fragment gekozen wordt omdat er geen duidelijk beat aanwezig is. BeatRoot heeft dan ook problemen om de beats te detecteren in deze fragmenten. Indien de gemiddelde afwijking tussen de beattijdstippen kleiner is dan de afwijking van het voorlopig beste fragment, dan wordt dit fragment gekozen als voorlopig beste fragment. Op dit moment kan er verder gezocht worden naar betere fragmenten. Maar als de beatsynchronisatie van het huidige fragment voldoende goed is, kan de procedure gestopt worden. Indien de beatsynchronisatie slecht is, wordt het type van de overgang verandert naar CUT. Dit betekent dat de lengte van de overgang ingekort wordt tot 3s zodat een goede beatsynchronisatie niet nodig is. Hoe kan er beslist worden wanneer de beatsynchronisatie goed of slecht is? Daarvoor stellen we twee limieten op gebaseerd op de JND. Om de limieten te bepalen maken we gebruik van twee factoren die aangepast kunnen worden in het configuratiebestand: • maxJndFactor . jnd: indien de gemiddelde afwijking groter is dan deze waarde dan is de beatsynchronisatie slecht en wordt het type van de overgang verandert naar CUT. • minJndFactor . jnd: als de gemiddelde afwijking kleiner is dan deze waarde dan zijn de beats perfect gesynchroniseerd en wordt dit fragment direct geselecteerd. Het invoeren van minJndFactor zorgt ervoor de procedure om een mix te cre¨eren sterk versneld wordt. Het zoeken naar fragmenten en voor ieder fragment de beatvector, convolutie en kruiscorrelatie berekenen, is namelijk het meest rekenintensieve deel van de volledige routine. Een voorbeeld van goed gekozen fragmenten is te vinden op figuur 5.8. Op deze figuur zijn signaal 1 en signaal 2 samengevoegd en worden beide beatvectoren afgebeeld. Het is duidelijk dat de afwijking tussen de beats zeer klein is. 46
47
Hoofdstuk 5. Mixen van twee nummers
Figuur 5.8: Voorbeeld van de beatsynchronisatie
5.6
De overgang cre¨ eren
Als de beste fragmenten in beide nummers voor de overgangen gevonden zijn, dan kan een gepast volumeverloop gegenereerd worden. Het volumeverloop tijdens de overgang of crossfade wordt bepaald aan de hand van het type patroon. Er wordt altijd een crossfade gekozen zodat het energieverloop tijdens de overgang relatief constant blijft. We kunnen dit garanderen omdat er tijdens de selectie van de fragmenten rekening gehouden is met het energieverschil. Het energieverschil tussen beide fragmenten is laag, daardoor krijgen we geen plotse verandering in energie tijdens de overgang. Op de figuren 5.9 en 5.10 staan de volumeverlopen van de twee belangrijkste types afgebeeld. In plaats van het energiepatroon is het natuurlijk volumeverloop afgebeeld. Aangezien er gekozen is voor binaire energiepatronen met een constant verloop (met eventueel een sprong), is het bijhorend natuurlijk volumeverloop gelijk.
47
48
Hoofdstuk 5. Mixen van twee nummers
Natuurlijk volumeverloop
Signaal 1
Signaal 2
Opgelegd volumeverloop
1
1
0
0
1
1
0
0
Figuur 5.9: Crossfade voor een overgang van het type H-H
Natuurlijk energieverloop
Signaal 1
Signaal 2
Opgelegd volumeverloop
1
1
0
0
1
1
0
0
Figuur 5.10: Crossfade voor een overgang van het type HL-LH
De randvoorwaarden voor op het opgelegd volumeverloop f1 van een uitgaand nummer zijn (fade-out): • f1 (0) = 1 48
49
Hoofdstuk 5. Mixen van twee nummers • f1 (L) = 0 met L de lengte van de overgang Omgekeerd voor het inkomend nummer (fade-in): • f2 (0) = 0 • f2 (L) = 1
Om de output van het programma meer gevarieerd te maken, voegen we een beatgesynchroniseerde crossfade toe. Voor een fragment van het type H-H kan dan random gekozen tussen worden de standaard crossfade of een beatgesynchroniseerde crossfade. Voor deze variatie op de gewone crossfade wordt het opgelegd volume van het uitgaand nummer 0 en van het inkomend nummer 1 gedurende 15 van het beatinterval op een beattijdstip. Op figuur 5.11 wordt deze crossfade afgebeeld.
Figuur 5.11: Beatgesynchroniseerde crossfade
Indien de beats van de fragmenten niet goed gesynchroniseerd kunnen worden, opteert het systeem voor een crossfade van het type CUT. Een CUT is een korte, bruuske overgang tussen twee nummers zodat het niet noodzakelijk is dat de beats perfect gesynchroniseerd zijn. Een crossfade van dit type staat afgebeeld op figuur 5.12.
49
50
Hoofdstuk 5. Mixen van twee nummers
Opgelegd volumeverloop
1
Signaal 1
0
1
Signaal 2 0
3s Figuur 5.12: Een crossfade van het type CUT
50
Hoofdstuk 6
Evaluatie In dit hoofdstuk wordt de evaluatie van het volledige systeem en de verschillende onderdelen uitvoerig besproken. Drie onderdelen worden volledig ge¨evalueerd: • Zangdetectie • Volledige systeem • Invloed van de duur van een overgang op de kwaliteit van de mix Alle resultaten worden in de volgende secties weergegeven en geanalyseerd.
6.1 6.1.1
Zangdetectie Dataset
Analoog aan hoofdstuk 3 maak ik voor de evaluatie gebruik van een verzameling met 160 muziekfragmenten met een lengte van 30s. Voor ieder fragment in de verzameling is de zang manueel geannoteerd. De annotatie gaat tot op het niveau van woorden. Een zin met verschillende pauzes tussen de woorden werd dus niet als ´e´en zangfragment geannoteerd. De verzameling bevat verscheidene genres zoals westerse popmuziek, klassieke muziek, hiphop, dance, oosterse muziek, afrikaanse muziek, etc. ... De set bevat zowel volledig instrumentale nummers alsook fragmenten die volledig uit zang bestaan. De verzameling bevat veel verschillende zangers en zangeressen en fragmenten met meerdere zangstemmen en achtergrondzangers of -zangeressen.
6.1.2
Evaluatiemethode
Zangfragmenten worden gedetecteerd door een SVM te trainen en het bekomen model te gebruiken om te bepalen of een frame al dan niet zang bevat. Daarom moet de verzameling fragmenten opgedeeld worden in een trainingset en een testset. Ik gebruik 23 van de volledige 51
52
Hoofdstuk 6. Evaluatie
set (107 nummers) als trainingset en 13 (de overige 54 fragmenten) als testset. Er wordt altijd gezorgd dat de trainingset ongeveer 50% zangframes en 50% muziekframes bevat. De volledige verzameling wordt drie maal opgesplitst zodat ik kan evalueren over drie verschillende setups. Om de SVM te trainen worden er 1600 frames geselecteerd uit de trainingset (zie hoofdstuk 3). Op deze set van 1600 frames pas ik 5-fold cross validation toe. Dat betekent dat er 5 maal 80% geselecteerd wordt om de SVM te trainen en het bekomen model te evalueren op de resterende 20%. De gemiddelde waarde van deze 5 evaluaties wordt in de resultaten weergegeven als de cross validation waarde. Voor de evaluatie op detecteren we de zangfragmenten over de volledige testset (54 fragmenten - 32346 frames). Dit resultaat wordt opgesplitst in twee onderdelen: accuraatheid voor en na postprocessing. Daarenboven bereken ik telkens ook apart de accuraatheid voor de zangframes (VOX) en de muziekframes (MUS).
6.1.3
Resultaten
In tabel 6.1 worden alle resulten van de volledige evaluatie voor de drie verschillende setups weergegeven. Setup 1
Setup 2
Setup 3
Gemiddeld
82.38%
82.06%
82.69%
82.38%
Accuraatheid voor postprocessing Totaal: VOX-klasse: MUS-klasse:
76.41% 74.41% (8085/10865) 77.43% (16633/21482)
75.90% 72.96% (7953/10901) 77.40% (16599/21445)
73.86% 71.39% (7836/10976) 75.13% (16057/21371)
75.39% 72.92% 76.65%
Accuraatheid na postprocessing Totaal: VOX-klasse: MUS-klasse:
79.49% 77.78% (8451/10865) 80.36% (17262/21482)
79.36% 75.48% (8228/10901) 81.33% (17442/21445)
77.30% 73.16% (8030/10976) 79.43% (16975/21371)
78.72% 75.47% 80.37%
5-fold cross validation:
Tabel 6.1: Evaluatie van de zangdetectie op frameniveau
De gemiddelde accuraatheid na postprocessing bedraagt 78.72%. Postprocessing zorgt ervoor dat de accuraatheid stijgt met 3.33%. De gemiddelde waarde van de 5-fold crossvalidatie op de trainingsframes bedraagt 82.38%. Dit is ongeveer 7% beter dan het resultaat op de testset voor postprocessing. Dit komt omdat bij crossvalidatie 1600 frames geselecteerd zijn uit 107 nummers. Deze zijn gelijkmatig verdeeld over deze nummers. Daaruit volgt dus dat 15 frames per nummer gekozen worden. Als deze 1600 frames vijf maal opgesplitst worden in een trainingset en testset, is het dus zeer goed mogelijk dat frames van eenzelfde nummer tot de trainingset en testset behoren. Dit verklaart het hogere percentage bij crossvalidatie over de trainingset. 52
53
Hoofdstuk 6. Evaluatie
De trainingset werd zo opgebouwd dat die bestond uit ongeveer 50% VOX-frames en 50% MUS-frames. Dit heeft als gevolg dat geen van beide klasses een sterke voorkeur zou mogen genieten van de classifier. De accuraatheid van de MUS-frames is ongeveer 5% beter is dan voor VOX-frames. De MUS-frames krijgen dus een lichte voorkeur.
6.2
Volledige systeem
Om de output van het volledige systeem te evalueren, heb ik een beperkte groep van 8 personen een evaluatieformulier laten invullen. De opdracht was 9 verschillende overgangen een score geven op 5. De evaluatieset bestond uit twee dj-sets van 4 nummers en 3 losstaande mixes met dezelfde startsong. Per overgang moesten er enkele criteria beoordeeld worden die overeen kwamen met de verschillende onderdelen en functies van de applicatie. De evaluatie bestond per overgang uit de volgende onderdelen: 1. Songselectie: (a) Tempoverschil tussen beide nummers: is het tempo gelijk tussen beide nummers? (b) Overeenkomst in toonaard: past de toonaard van het tweede nummer bij de toonsoort van het eerste nummer? (c) Algemeen: een algemene score voor de songselectie. 2. Overgang: (a) Beatsynchronisatie: kwaliteit van de beatsynchronisatie tijdens de overgang. (b) Storende zangoverlap: overlapt de zang van beide nummers tijdens de overgang? (c) Keuze van de mixtijdstippen: zijn de mixtijdstippen in beide nummers goed gekozen? (d) Volumeverloop tijdens de overgang: beoordeling van de crossfade. (e) Algemeen: een algemene score voor de overgang. 3. Algemene score: een algemene score voor de mix. Ieder fragment werd 2 of 3 maal beluisterd zodat alle verschillende criteria goed beoordeeld kunnen worden.
53
54
Hoofdstuk 6. Evaluatie
6.2.1
Resultaten
In tabel 6.2 staan de gemiddelde scores voor elk criteria voor ieder nummer. Algemeen zijn de scores vrij goed behalve op de twee laatste mixes. Deze mixes zijn geen eerste keuze tijdens de songselectie maar zijn toegevoegd om de vergelijking te maken. Op figuur 6.1 worden de gemiddelde, maximum en minimum scores weergegeven. Mix 1
Mix 2
Mix 3
Mix 4
Mix 5
Mix 6
Mix 7
Mix 8
Mix 9
Songselectie: Tempo: Toonsoort: Algemeen:
4,6 4,3 4,4
3,9 3,4 3,5
2,9 2,5 2,9
3,1 2,8 2,8
4 3,3 3,8
4,1 3,1 3,6
4,5 3,9 4
2,5 2,7 2,8
2 2,3 2,1
Overgang: Beatsynchronisatie: Zangoverlap: Mixtijdstippen: Volumeverloop: Algemeen:
4,6 5 4,5 4,9 4,9
4,3 4,1 3,9 3,8 4
3,5 4,8 3,9 4,3 3,9
2,9 3,4 2,5 2,9 2,9
3,8 2,3 3 3,3 3,1
3,8 3,5 3,6 3,4 3,9
4,5 2,6 2,9 3,8 3,6
3,1 1,8 2,3 2,9 2,5
1,9 1,8 2,6 3,3 2,5
Algemene score:
4,8
4
3,4
2,9
3,3
3,9
3,8
2,8
2,1
Tabel 6.2: Gemiddelde scores van de algemene evaluatie van het systeem
De laatste drie mixes hebben dezelfde startsong. Mix 7 is volgens het systeem de beste keuze, wat ook blijkt uit de algemene score van deze mix. Mix 8 is de tweede beste keuze en heeft een tempo dat meer afwijkt van de startsong. Dit komt ook naar boven in de evaluatie bij de score voor tempo bij songselectie. De derde song werd geselecteerd op basis van de toonaard. Wat opvalt is dat dit niet blijkt uit de score. Blijkbaar wordt er meer belang gehecht aan een gelijkaardig tempo. De scores voor de beatsynchronisatie en de gemiddelde synchronisatiefout kunnen vergeleken worden. Om dit visueel voor te stellen wordt de de score afgetrokken van 5 en samen op een grafiek geplaatst met de gemiddelde synchronisatiefout (zie figuur 6.2). Deze figuur bevat geen absolute waardes, het is enkel de bedoeling om het verloop van beide curves te vergelijken. Het valt op dat de curves een gelijkaardig verloop hebben. Dit betekent dat de gemiddelde synchronisatiefout inderdaad een goede maat is om de kwaliteit van de beatsynchronisatie weer te geven.
54
55
Hoofdstuk 6. Evaluatie 6 5
Score
4 3
Average Maximum
2
Minmum
1 0 1
2
3
4
5
6
7
8
9
Mix Figuur 6.1: Algemene evaluatiescores
6.3
Invloed van de duur van de overgang
Aangezien de kwaliteit van de output van het programma sterk afhankelijk is van de beatdetectie, is het interessant om te onderzoeken in welke mate de duur van de overgang de output be¨ınvloedt. Hoe langer de overgang is, hoe moeilijker het is om alle beats te synchroniseren. Dit is omdat er nog een klein tempoverschil kan zijn tussen de nummers zodat de beats gedurende de overgang meer gaan afwijken of omdat de beats niet perfect gedetecteerd of gesynchroniseerd kunnen worden over een lange periode. Op figuur 6.3 zie je het verloop van de gemiddelde synchronisatiefout voor verschillende mixlengtes voor zeven verschillende nummers. Voor deze evaluatie is voor de verschillende nummers voor iedere lengte ´e´en mix gecre¨eerd waarbij de maxJNDFactor zeer hoog is zodat er nooit gekozen wordt voor een korte CUT. Het is duidelijk dat de kwaliteit van de beatsynchronisatie daalt naarmate de lengte van de overgang stijgt. Het blijkt dat de korste overgang niet gelijk staat met de kleinste synchronisatiefout. Dit is mogelijk omdat er voor een verschillende lengte verschillende fragmenten kunnen geselecteerd worden en dat voor bepaalde fragmenten het eenvoudiger is om de beats te detecteren. De applicatie kiest voor een noodoplossing (een CUT) als de gemiddelde synchronisatiefout groter wordt dan maxJNDFactor maal de berekende JND. Deze is dus afhankelijk van het tempo van het nummer (JND) en de instelling in het configuratiebestand (maxJNDFactor). De lengte van de overgang heeft ook invloed op de tijd nodig om een mix te genereren. Op 55
56
SyncError / Inverse Score
Hoofdstuk 6. Evaluatie
Inverse Score Synchronization error
1
2
3
4
5
6
7
8
9
Mix Figuur 6.2: Vergelijking van de inverse scores voor beatsynchronisatie en de gemiddelde synchronisatiefout
figuur 6.4 staat de gemiddelde duur om een mix te genereren afgebeeld in functie van de mixlengte voor zeven verschillende nummers. Op de figuur is duidelijk te zien dat naarmate de lengte van de overgang stijgt de rekentijd stijgt. Dit komt voornamelijk omdat de beatvectoren, de convolutie en kruiscorrelatie berekend moeten worden voor langere fragmenten. Indien de parameter nrPatternLengths zou vergroot worden, zou de rekentijd nog stijgen omdat dit ervoor zorgt dat er over meerdere fragmenten gezocht wordt. Daarom werd de parameter minJNDFactor ingevoerd. Zodra gevonden fragmenten voldoen aan de limiet minJNDFactor maal JND, wordt er niet meer verder gezocht naar geschikte fragmenten. Dit zorgt ervoor dat de rekentijd drastisch daalt indien er vlug een geschikt fragment gevonden wordt.
56
57
Hoofdstuk 6. Evaluatie
Synchronization error (ms)
60 50 40 30 20 10 0 5
10
15
20
25
30
Mix Length (s)
Figuur 6.3: De gemiddelde synchronisatiefout in functie van de lengte van de overgang
30
Time to create mix (s)
25 20 15 10 5 0 5
10
15
20
25
30
Mix Length (s)
Figuur 6.4: De duur om een mix te genereren in functie van de lengte van de overgang
57
Hoofdstuk 7
Besluit Automatisch een mix genereren voor een muzieknummer is een complex probleem. Er moet met veel zaken rekening gehouden worden. In dit werk werd een methode voorgesteld om automatisch te mixen die gespiegeld is aan de manier waarop dj’s werken. Er worden songs geselecteerd op basis van het tempo en de toonaard. Fragmenten worden gekozen aan de hand van het energieverloop door te zoeken naar bepaalde patronen die interessant kunnen zijn om een overgang te maken. Zanginformatie wordt toegevoegd zodanig dat tijdens de overgang geen zang overlapt. Het systeem detecteert de beats zodat deze tijdens de overgang kunnen gesynchroniseerd worden. Daarna wordt er een gepast volumeverloop gekozen voor de overgang. Dit alles genereert automatisch een vloeiende mix van audionummers. De zangdetectie aan de hand van MFCC-features en een SVM als classifier haalt een accuraatheid van 78.72% op een testset met nummers uit zeer verscheiden genres en verschillende zangstemmen. Door de goede afweging tussen kwaliteit en rekentijd is deze methode geschikt voor onze toepassing. De synchronisatie tijdens de overgang is sterk afhankelijk van de kwaliteit van de beatdetectie. Om zelfs met een slechte beatdetectie een goede mix te kunnen genereren, past de routine de lengte van de overgang aan zodat de slechte beatsynchronisatie nauwelijks hoorbaar is. De gemiddelde synchronisatiefout blijkt een goede maat te zijn voor de kwaliteit van de beatdetectie. Uit de evaluatie blijkt dat het eenvoudiger is en sneller gaat om overgangen te cre¨eren met een beperkte duur omdat fragmenten dan makkelijk te synchroniseren zijn. De kwaliteit van de mixes stijgt als de pool songs allemaal nummers bevat van eenzelfde genre omdat deze songs logischerwijs beter bij elkaar passen dan songs uit volledig verschillende genres. Ondanks de moeilijkheid om een systeem te ontwerpen dat bruikbaar is voor zeer verschillende songs, blijkt dat het toch mogelijk is om op een intelligente manier automatisch songs te selecteren en te mixen op een kwalitatieve manier. 58
59
Hoofdstuk 7. Besluit
7.1
Toekomstig werk
Naast de criteria die in dit werk voorgesteld worden, zijn er nog zeer veel uitbreidingen voor dit systeem mogelijk. Om de rekentijd drastisch te verlagen zou het systeem in C++ kunnen ge¨ımplementeerd. Het systeem kan aangepast en uitbreid worden om de kwaliteit van de mixes nog te verbeteren. Zo kunnen er meerdere types patronen aan het systeem toegevoegd worden. Nu is het zeer eenvoudig om extra patronen toe te voegen in de code. In toekomstig werk zou er automatisch een crossfade kunnen gecre¨eerd worden uit een gegeven patroon in plaats van te kiezen uit enkele vooropgestelde volumeverlopen. Nu wordt enkel een gepast volumeverloop geselecteerd voor de overgang. Als uitbreiding kan een EQ (equalizer ) toegevoegd worden. Dan zouden bepaalde frequenties verzwakt of versterkt kunnen worden tijdens de overgang. Typisch wordt op een dj-mixer onderscheid gemaakt tussen lage frequenties, midden frequenties en hoge frequenties. Bij het selecteren van een fragment houdt een dj rekening met de volledige structuur van een nummer (zogenaamde phrase matching). Om het kiezen van de fragmenten te verbeteren zou het systeem daar ook rekening mee kunnen houden. Er zou dan een methode moeten ontwikkeld worden die de hogere structuur van een nummer kan detecteren en gebruiken bij de fragmentselectie. Nu worden enkel wav-bestanden aanvaard. De applicatie zou uitgebreid kunnen worden zodat andere formaten zoals mp3, ogg,... gebruikt kunnen worden. Ook om de kwaliteit te verbeteren kan er gebruik gemaakt worden van het genre bij de songselectie. Dit zou bijvoorbeeld mogelijk zijn door het gebruik metadata. Ook het toevoegen van een tempotraject zou de kwaliteit van een complete dj-set verhogen en de output van het systeem meer gevarieerd maken.
59
Bijlage A
Voorbeeld van een outputbestand met mix-info Settings: --------Alpha: 0.8 Minimum mix length: 10 Maximum mix length: 20 Interval: 0.5 Buffer: 0.4 Number of Patterns: 4 Maximum JND factor: 2 Minimum JND factor: 1 Maximum song fragment: 0.25
Input file: Number001 --------------------Tempo: 130.625bpm Key: Dmin
MIX1: Number083 --------------Original Tempo: 130.3287bpm Key: Cmaj Mix type: B Mix point 1: 2m48s Mix point 2: 0m14s 60
Bijlage A. Voorbeeld van een outputbestand met mix-info Mix length: 10s Selection strength - key distance: 2 Selection strength - tempo distance (percent): 0.22681 Mix strength - Synchronization error: 0.010023s Mix strength - Pattern match: 0.91623 Mix strength - Singing voice overlap: 0
MIX2: Number085 --------------Original Tempo: 124.8764bpm Key: Gmaj Mix type: HL-LH Mix point 1: 5m47s Mix point 1 (in song Number085): 3m13s Mix point 2: 0m15s Mix length: 10s Selection strength - key distance: 1 Selection strength - tempo distance (percent): 4.4008 Mix strength - Synchronization error: 0.012744s Mix strength - Pattern match: 0.60777 Mix strength - Singing voice overlap: 0
Mix generated in 93.4553s.
61
61
Bijlage B
Links naar producenten van muzieksoftware Categorie A Itunes www.apple.com Windows Mediaplayer www.microsoft.com Amarok amarok.kde.org Rhythmbox www.gnome.org/projects/rhythmbox
Categorie B Traktor DJ Studio www.native-instruments.com Live www.ableton.com BPM Studio www.alcatech.com Jackson DJ www.vanaeken.com Virtual DJ www.virtualdj.com Deckadance www.deckadance.com Mixxx www.mixxx.org
62
Bijlage B. Links naar producenten van muzieksoftware
Categorie C OtsAv www.otsav.com This is my jam thisismyjam.com
63
63
Bibliografie ´ CHI 05 ´ extended T. H. Andersen (2005). In the mixxx: novel digital dj interfaces. CHI 05: abstracts on Human factors in computing systems, pp. 1136–1137. A. Berenzweig & D. Ellis (2001). Locating singing voice segments within music signals. C.-C. Chang & C.-J. Lin (2001). LIBSVM: a library for support vector machines. Software available at http://www.csie.ntu.edu.tw/~cjlin/libsvm. D. Cliff (2000). Hang the dj: automatic sequencing and seamless mixing of dance-music tracks. D. Cross (2003). A history of the development of DJ mixer features - an S&TS perspective. Afstudeerwerk, Cornell University. S. Dixon (2001). Beatroot: An interactive beat tracking and visualisation system. URL http://www.elec.qmul.ac.uk/people/simond/beatroot/index.html. C. Drake & M.-C. Botte (1993). Tempo sensitivity in auditory sequences: Evidence for a multiple-look model. Perception and Psychophysics, 54(3):277–286. D. P. W. Ellis (2005). PLP and RASTA (and MFCC, and inversion) in Matlab. URL http: //www.ee.columbia.edu/~dpwe/resources/matlab/rastamat/. Online web resource. Z. Fang, Z. Guoliang & S. Zhanjiang (2001). Comparison of different implementations of mfcc. J. Comput. Sci. Technol., 16(6):582–589. ISSN 1000-9000. A. Friberg & J. Sundberg (1995). Time discrimination in a monotonic, isochronous sequence. Journal of the Acoustical Society of America, 98(5):2524–2531. O. Lartillot, P. Toiviainen & T. Eerola (2008). Mirtoolbox public release 1.1. T.-W. Leung, C.-W. Ngo & R. W. H. Lau (2004). Ica-fx features for classification of singing voice and instrumental sound. H. Lukashevich, M. Gruhne & C. Dittmar (2007). Effective singing voice detection in popular music using arma filtering. 64
65
Bibliografie T. L. Nwe & Y. Wang (2004). Automatic detection of vocal segments in popular songs.
O. Parviainen (2005). Soundstretch audio processing utility. URL http://www.surina.net/ soundtouch/soundstretch.html. M. Rocamora & P. Herrera (2007). Comparing audio descriptors for singing voice detection in music audio files. G. Tzanetakis (2004). Song specific bootstrapping of singing voice segments.
65