Incrementele Leadsheet Editor Datum: 21 december 2010 Naam student:Rik Bauwens
Algemene informatie Naam van het bedrijf: Hogeschool Gent Is er in het bedrijf inhoudelijke en technische begeleiding beschikbaar?Ja/Nee Externe promotor(en): Wijnand Schepens E-‐mailadres externe promotor(en):
[email protected] Interne promotor:German Hurtado Martin
Doelstelling van het project Maken van een muziekpartituur editor die draait in een webomgeving, geschreven in Flex (met ActionScript als programmeertaal). De bedoeling is een editor te maken waarbij het mogelijk is om zowel ritme, melodie, tekst als akkoorden in te geven, alsook een combinatie van de voorgaande. Het moet ook mogelijk zijn om de ingegeven partituur af te spelen, waarbij een indicatieteken op elk moment aanduidt wat de positie in de tijd is van het afspelen (noot wordt gekleurd, of caret1 loopt door de partituur). Hoe het geluid zal klinken staat nog niet vast. Het eenvoudigste zijn gewone monotone noten, maar het wordt interessanter als er echte samples2 (vb. pianosamples) gebruikt worden. Er zijn ook verschillende views beschikbaar op dezelfde partituur: een editeermodus, die de volledige partituur weergeeft en de notenbalken onder elkaar plaatst (cfr. editeermodus in Microsoft Word), en een afspeelmodus. Dit is een soort ‘filmrol’ waarbij de volledige partituur als één lange notenbalk getoond wordt, en waarbij bij het afspelen de notenbalk voorbij schuift.
Bestaande situatie en probleemstelling Er werden reeds twee eindwerken rond hetzelfde probleem georganiseerd. Het eerste focuste vooral op akkoorden en tekst, een tweede versie had al de mogelijkheid om noten in te geven op voorziene notenbalken. Het was echter nog niet mogelijk om de ingegeven partituur af te spelen (noch geluid, noch een gewone volgfunctie). Er kan wel voortgebouwd worden op bepaalde delen van dit eindwerk. Deze student is enkele obstakels tegengekomen, waarvan de meeste ook opgelost werden. Dit maakt het mogelijk om dit eindwerk vooral toe te spitsen op geavanceerdere technieken en het uiteindelijk resultaat mooi af te werken en uitgebreid te testen, zodat het – indien nodig – echt bruikbaar wordt als Internetapplicatie. Een greep uit de reeds opgeloste problemen zijn het effectief tekenen van de partituur (er wordt gebruik gemaakt van het lettertype Fughetta) en het gebruik van threads in Flex (Ender Lib bibliotheek). 1 Verticale lijn die een positie aanduidt waar kan ingevoegd worden (cfr. caret in Microsoft Word) In dit geval is dit een positie binnen de partituur. 2 Een sample is een fragment gedigitaliseerde muziek dat de karakteristiek van een stukje geluid beschrijft, en gebruikt wordt bij digitale signaalbemostering.
1
Problemen die moeten opgelost worden – gedetailleerde omschrijving Muzikaal Een belangrijke topic wordt het herhalen van partijen binnen muziekstukken. Een klassiek popnummer bestaat typisch uit een aantal strofen, een refrein en eventueel een intermezzo of solo. Het zou handig zijn als een partituur ook op deze manier kan opgebouwd worden. Het refrein wordt meestal een aantal keer herhaald, en het zou zinloos zijn dit dan altijd opnieuw in te typen. Eenvoudiger is het één keer in typen, en het een label te geven. Het is dan mogelijk om in een soort lijst dit label weer te geven, en aan te duiden of het moet getoond worden, waar het getoond moet worden, en hoeveel keer.
Voorbeeld van GUI, met links een keuzelijst en rechts de partituur Het eerste probleem dat zich stelt is: hoe zetten we deze herhalingen om in een klassieke muzikale partituur (gebruik makend van de klassieke muzikale symbolen die daarvoor voorzien zijn)? Bij het afdrukken kan bijvoorbeeld gekozen worden voor een klassieke partituurvoorstelling in plaats van labels. Als in een partituur een eenvoudige herhaling gebruikt wordt, wordt gebruik gemaakt van een herhalingsteken (het dubbele punt, gevolgd door een dunne en dikke verticale streep op het einde van de notenbalk op onderstaande figuur).
Voorbeeld van een herhaling van een refrein, in muzikale notatie In dit geval is de herhaling zeer eenvoudig. Maar bij complexere muziekstukken is het mogelijk om meervoudige herhalingen te gebruiken met eventueel een alternatief einde, om met behulp van verzendingstekens te springen naar een bepaalde positie binnen de partituur enzovoort. Het omzetten naar een muzikale partituur wordt dan niet meer zo eenduidig en moet zo optimaal en overzichtelijk mogelijk gebeuren (met behulp van de klassieke muzikale symbolen, bijvoorbeeld da capo, da capo al fine, signo, …).
2
Programmatorisch Een eerste probleem dat opduikt is het afspelen van de partituur. Het is immers niet mogelijk om voor elke noot alle mogelijke tijdsduren of variaties als samples door te geven aan het webprogramma, omdat dit zou leiden tot een gigantische hoeveelheid aan dataverkeer. Midi biedt in eerste instantie ook geen oplossing omdat dit (standaard) niet beschikbaar is in Flex. De oplossing hiertoe bestaat er in slechts enkele noodzakelijke samples in te laden, en die door middel van transformaties en frequentiemodulaties om te zetten in de andere benodigde tonen en toonlengtes. Hiervoor wordt mogelijk gebruik gemaakt van de open-‐ source bibliotheek StandingWave, speciaal ontworpen voor audiosynthese binnen het Flex platform. Deze bibliotheek wordt reeds (in een uitgebreide versie) gebruikt bij de online partituureditor Noteflight (http://www.noteflight.com). Het tweede probleem is het volgen binnen de partituur van wat er gespeeld wordt. Hiervoor is goede synchronisatie tussen het afgespeelde geluid en de getoonde positie in de partituur van groot belang. Doordat de applicatie in een webomgeving zal draaien, brengt dit de nodige beperkingen met zich mee. Wat bijvoorbeeld niet mogelijk is, is rechtsklikken (omdat rechtsklikken in Flashapplicaties gebruikt wordt om de Flashplayer zelf in te stellen), dus popupmenu’s zijn uit den boze. Ook is het niet mogelijk alle toetsen van het toetsenbord te gebruiken (vb. de Windows toets). Het zal dus zeer belangrijk zijn een overzichtelijke, duidelijke en intuïtieve gebruikersinterface te bouwen. Gemakkelijk in gebruik en eventueel zelfs aanpasbaar. Er kan bijvoorbeeld onderaan het programma een balk voorzien worden, die bij het klikken op knoppen of het uitvoeren van acties aanvullende informatie of tips weergeeft, een andere optie zouden bijvoorbeeld tooltips kunnen zijn. Een laatste op te lossen probleem is het koppelen van noten, tekst of akkoorden aan een bepaald tijdschema. Het ligt immers niet vast hoe lang bijvoorbeeld één achtste noot duurt. Dit kan door een standaardwaarde ingevuld worden (vb. 120 ms), maar wat als de noten zelf nog geen tijdsduur gekregen hebben (de partituur bevat bijvoorbeeld enkel de melodie). Een bijkomende functie wordt hiervoor voorzien: het vastleggen van een ritme door het te tikken op het toetsenbord (rhythm-‐by-‐tapping). De lengte van de noten wordt hierdoor impliciet vastgelegd: door te tikken wordt enkel het begintijdstip van elke noot aangegeven, en het begin van één noot, impliceert het einde van de vorige (in dit geval, omdat we met één stem per notenbalk werken). Dit natuurlijk enkel als er geen rusten gebruikt worden, of wanneer deze ook zouden getikt worden. Er moet dan wel een keuze gemaakt worden: worden de ingegeven tijdstippen gekwantiseerd, of wordt ‘de menselijke fout’ behouden (dit komt de muzikaliteit van het stuk ten goede). Hier kan de gebruiker enige vrijheid gegeven worden door een extra balk boven de notenbalk te voorzien, die per ingegeven tijdstip een aanduiding weergeeft, die aangepast kan worden. Er kunnen ook tijdstippen tussengevoegd en verwijderd worden.
Voorbeeld van een tijdschema aan de hand van ticks 3
Tijdstippen kunnen een verband houden met individuele noten, tekststukken of akkoordschema’s; een tijdstip mag dus niet toegekend worden aan een individuele noot, maar moet zich in een aparte structuur bevinden, die gekoppeld wordt aan een bepaalde noot, maat, akkoord enz. Als een ritme voor noten ingegeven wordt, bestaan er ook verschillende mogelijkheden: •
De tijdsduur van een noot wordt afgerond naar de best passende noot. Als er bijvoorbeeld de kortste noot die gebruikt wordt een achtste noot is (die kan ingesteld worden), wordt de duur van een noot weergegeven als één noot, of als samenstelling van meerdere, waarbij de afgerond wordt op de tijdsduur van een achtste noot. Hier ligt dan de mogelijkheid open om bij het afspelen de originele tijdstippen, of de gekwantiseerde tijdstippen te gebruiken. De tijdsduur wordt afgeleid uit het tikpatroon (vb. een achtste noot duurt 60ms, maar bij het tikken zal dit soms een 58ms, soms eens 61ms, en heel af en toe eens 60ms zijn; moest men dit puur muzikaal noteren, zou een heel rare constructie bekomen worden, in de zin van: één achtste, gekoppeld met twee 32sten en 5 64sten, wat muzikaal correct, maar héél onoverzichtelijk is).
•
De noten worden weergegeven zoals ze gespeeld worden (met eventuele koppelingen), het is dan aan de gebruiker om de partituur eventueel aan te passen.
Verbetering van functies die al (deels) geïmplementeerd waren in vorige eindwerken Zoals reeds eerder aangehaald, is dit eindwerk in zekere zin een uitbreiding van reeds eerder verschenen eindwerken. Er zal vooral aandacht besteed worden aan volgende elementen, die bij de vorige eindwerken minder (of niet) uitgewerkt werden: •
Het zo eenduidig en eenvoudig mogelijk maken om snel verschillende muzieklijnen (‘parts’) toe te voegen, te verwijderen en van plaats te verwisselen (vb. lyricslijn3, melodielijn en akkoordlijn). Deze topic hangt erg samen met het aangehaalde probleem van timing, terug te vinden onder de vorige subtitel.
•
Iets wat minder prominent aanwezig was in vorige eindwerken, was een grote vrijheid in het aantal mogelijkheden en acties die uitgevoerd kunnen worden op een partituur. Het zal bijvoorbeeld mogelijk zijn om de sleutel (vb. solsleutel, fa-‐sleutel), die hoort bij een notenbalk (beter, die er kan bijhoren), te wijzigen per maat, en daarbij aansluitend een gegeven reeks noten te transponeren naar een andere toonaard. Wat hier ook nog bijkomt is dat de koppeling van muis-‐ en toetsenbordacties aan de aangehaalde editeeracties configureerbaar moet zijn (hetzij met behulp van een configuratiebestand, hetzij door middel van een dialoogvenster), en dat in een bepaalde modus (vb. editeermodus en afspeelmodus, zie hoger) slechts een bepaalde verzameling van acties beschikbaar is.
3 Engelse benaming voor de liedjestekst.
4
•
Een ander belangrijk punt is het weergeven van de partituur. Van zodra men met bijvoorbeeld verbindingsbogen gaat werken, is het niet meer zo eenvoudig om alles mooi uit te lijnen. Zeker wanneer zo’n verbindingsboog een noot moet verbinden op het einde van een lijn en het begin van de volgende lijn. Het tekenen van de partituur moet dus zeer flexibel en transparant zijn.
Voorbeeld van een partituur met verbindingsbogen
Verder wordt ook de mogelijkheid van ‘beaming’ toegevoegd. Beaming is het groeperen van noten door middel van een horizontale lijn, bijvoorbeeld omdat ze samen één tel van de maat voorstellen. Alsook vormt het een uitdaging om beamsautomatisch juist weer te geven en eventueel later aanpasbaar te maken. Voorbeeld van een beam, die een 8ste, een gepunte 8steen een 16denoot groepeert •
Wat ook interessant is, is hoe omgegaan wordt met constraints. Een constraint is in dit geval bijvoorbeeld een maat die voorzien wordt van een maatcijfer, zeg 4/4, en dus aan de inhoud oplegt dat som van alle elementen (noten en rusten) precies 4 4de noten te duren. Wat moet er gebeuren als dit niet het geval is? Wordt de respectievelijke maat dan rood gekleurd? Of wordt dit totaal niet gemeld en de wordt verantwoordelijkheid volledig overgelaten aan de gebruiker? Ook dit moet volledig flexibel en instelbaar zijn.
•
Tenslotte zal importeren en exporteren naar MusicXML4 van de partituur trachten verbeterd te worden (ook door het toevoegen van beaming en andere nieuwe functies zal hier sowieso aan gesleuteld moeten worden). Indien het niet mogelijk is om bepaalde extra opties op te slaan met behulp van een reeds bestaand framework, zal een eigen bestandsformaat gebruikt worden, eventueel gebaseerd op het reeds bestaande Chronicle framework.
4 MusicXML is een open-‐source, XML gebaseerd, bestandsformaat voor muzieknotatie. Het is ontworpen voor het uitwisselen van partituren, vooral tussen verschillende partituureditors. Momenteel (december 2010) wordt het ondersteund door meer dan 135 muziekprogramma’s (o.a. Finale, Sibelius, Cubase en MuseScore), wat het heel universeel maakt, en dus excellent voor het exporteren van de partituur naar andere programma’s.
5
Technologieën die aan bod komen Gebruik van Flex 4 (met als programmeertaal ActionScript), audiosynthese met behulp van de Standing Wave bibliotheek. Bij eventuele integratie van het programma binnen een webomgeving zal ook gebruik gemaakt worden van webtechnologie (vb. ASP.Net, Servlets), maar dit ligt nog niet vast. Tenslotte wordt ook gebruik gemaakt van XML voor het opslaan/exporteren van partituren.
Mogelijke uitbreidingen en opties •
Verregaande integratie binnen een website (Wikifonia), waarbij een zoekfunctie geïmplementeerd wordt die het mogelijk maakt efficiënt en geavanceerd te zoeken in de opgeslagen database van partituren (vb. zoeken op ritme, bepaalde melodie, of bepaalde stukken liedjestekst)
•
Meerdere stemmen op één notenbalk samenvoegen (vb. akkoorden), en ook afspelen
•
Het exporteren van de partituur naar het MIDI formaat. Een midi bestand bevat gestandaardiseerde instructies, die het mogelijk maken de desbetreffende partituur bijvoorbeeld te laten afspelen door een synthesizer, of te importeren in diverse andere muziekprogramma’s zoals Finale, Sybelius of Cubase.
Vernieuwende aspecten Audiosynthese binnen het Flex platform.
Overzicht van de items die in de scriptietekst zullen behandeld worden •
Analyse van het project (UML, opgezochte informatie, technologieën die gebruikt werden)
•
Implementatie (struikelblokken verduidelijken met codevoorbeelden)
•
Grafische gebruikersinterface (opbouw, hoe ermee werken)
•
Audiosynthese binnen het Flex platform
•
Opslaan/exporteren van partituren (met behulp van XML)
6