Experimenter:

Basic Picture

Større font

Lidt pænere (resize efter font)

Første Hul igennem

Følg med i udviklingen her

Når man skal lave buer skal man bruge Bezier kurver. Et lille test program her. Klik nogen gange (4 gange) på bagpladen

ABC noder experiment

Prøv ABC sandkassen

 

30 december 00:42 Så er der sgu kommet et lidt større "hul igennem"

Der mangler bjælker bindinger fortegn og en hel masse andet men, Noderne rammer det rigtige sted.

Prøv selv, Hent nogle forkskelliege melodier på FolkWiki og test

Skal nu prøve at lave nodeværdier osv..

Her kan du se forkellige stadier af udviklingen

 

Hvordan det startede

Jeg blev kontaktet af Bendix Rødgaard, der spurgte om vi på spillefolk er interesseret i at gå over til ABC notation.

Søren har jo talt om abc-noder allerede fra starten af nodesamlingen.

Problemet er, at vores platform (One.com) understøtter ikke det, de andre har lavet. (Vi mangler at installere imagemagick og ghost-script på serveren,
dessuden er der andre programmer som man kan downloade og installere på sin server).
For at gøre det, skal man ha sin egen server, hvor man kan installere software

Idéen er at kigge de andres kode igennem og så oversætte den til PHP.

Jeg fandt dette lidt sjove værktøj FontMaker Det må kunne bruges:

Her er starten:

Test1 (kun bokstaver som jeg dog "har lavet selv")

Eureka: Den første node!!! JUHU!!!
(erkender at der er et stykke endnu før vi er igennem men efter 2 dage at være så langt!!!!

Kode: (sæt selv < før <?php og efter ">" ?> ) Du burde kunne lave alt jeg har lavet!

Tag dette billed

og lav din egen

NodeFont1.gdf

her

(26 bokstaver
start med 'a'
60 * 15 )

Og prøv så på dine gen hjemmeside!!

Nå det var "hul igennem testen"

Nu kommer det sjove..

Vi skal have lavet en abc-notation parser i php. og så skal vi lave en fornuftig object struktur.

Med hensyn til font er det muligt at man kan konvertere andre musikfonte direkte:
Det vil være en genvej, for vi skal bruge ttf fonts når vi skal lave pdf.

Vi skal lave PDF

Ta en kig på http://www.fpdf.org/

Jeg har før lavet midi filer

Valentin Schmidt har lavet noget kode, som jeg har brugt før.

Vi skal lave en ABC parser med bagvedliggende objekt struktur

Jeg foreslår at vi ser på Lils Liberg source som man kan downloade her

Det er godtnok i Python, men man må kunne få nogle ideer. Hans software er bare eminent...

Du skal bare prøve det Du kan downloade det samme sted.

gå til folkwiki.se find en abc-fil at prøve med. Deres ABC-forklaring er eminent (Vi bør lave noget tilsvarende på Dansk)

Se ABCstandarden her

Når vi har lavet et færdigt system er der et par andre småopgaver

Regulære udtryk er gode at lære

(Jeg vil næsten sige nødvændige til denne opgave)

Her er en god artikel på dansk om emnet

Men man kan selvfølgelig finde andre forklaringer

Eksempel:
//Når $TheChar er kommet til en ende (dvs mellemrum eller | eller : )
if(preg_match("/\s|\||:/",$TheChar)==0){

Denne skærer allt hvad der har med en node
Se test resultat

/***********************************************************************

Reg Exp og ABC i en nødeskal

*************************************************************************

Forklaring af dette udtryk som hiver alt der har med en node ud af en ABC streng:
$RegExp= "/[v|u]?(!.*!)*[_|^]?[A-Ga-gz][1-9]?[\/]?[1-9]*[<|>]?[,]*[']*/";

Reg Exp Betyder  
[v|u]?       [Nedstrøg eller opstrøg] (?= 0 eller 1 gang)  
[P]? Praller (dette er vist en speciel svensk implementering) Se ABCstandarden her  
(!.*!)*    !triller osv.! der bruges almindelige parenteser fordi der kan være mange tegn (ikke kantede "[" kun nøgatig det alntal tegn der står)  
  * .                        *=0 eller mange  
.  .                       .= Der kan være mange bogstaver <br />  
   .                        (+-qualifieren der betyder en eller mange bliver ikke brugt i dette
.                         exempel, men jeg nævner den fordi dette er både en Reg Exp
.                         og ABC forklaring)
 
[A-Ga-gz]     [toner og pause] obs. ingen ? * eller + efter toner dvs. de skal være der  
[1-9]?    Alle tal (0 eller 1 gang)  
[\ /]?       Her er tegnet / "escapet" med en \ (Ligner et "V" men er to tegn / og \)  
[1-9]?    Alle tal (0 eller 1 gang) (igen)  
[<|>]?   punkterede åttendele + sekstendel (eller lignende <= kort node først >= kort node sidst  
[,]*      oktaven under (mange kommaer giver flere oktaver ned på denne måde er der næstnen ingen grænser for hvad man kan skrive med ABC  
[']*       Oktaven over  
/ / Regeksp starter og slutter med det samme tegn /  

Der mangler lige en forklaring om at tonerne går fra nøglehuls C og derefeter DEFGAHcdefgah, (h=4. finger på e-strengen)herefter kommer c'd'e'f'g'a'h'c''d'' osv.(Under Nøglehuls-C 'det C der ligger ved nøglehullet på klavert bruges komma (,). nodelængen gives i headeren med et L:X hvor X=1/8 er standard og betyder åttendele. Efterfølgende tal giver dobelt længde C2 er en fjerdel hvis L:1/8 er brugt C/ eller C/2 eller C1/2 er ækvivalente og betyder 16-del Hvis L:1/4 vil det være åttendel. Dvs. nedad H,A,G, som er G-strengs-G-et (osv)

Obs. Der kan kommer mere til når jeg lærer mere om ABC

*/

//Obs

//Koden (jeg opdaterer hele tiden den kan være lidt forskellig fra forklaringen):
$RegExp="/[v|u]?(!.*!)*[_|^]?[\[]?[A-Ga-gz][1-9]?[\/]?[1-9]*[<|>]?[,]*[']*[\]]?/";
preg_match_all($RegExp,$TheString,$Sub);

foreach($Sub[0] as $q){
        //Put ind i NodeEvents
       $this->NodeEvents[]=new ABC_Node_Event($q,$this->TimeDiv,$cntNodeEvents);
       $cntNodeEvents++;

}

Her kommer flere regexp exempler

Jeg er ved at lære det nu, det er ikke så svært:
(Men jeg må indrømme at det ser nørdet ud)
Du må selv gætte hvad det bruges til

function Make_Node_Length($TheValue,$TimeDiv){

//CommonDivider=1024;
$NodeLen=$this->CommonDivider/$TimeDiv;
$GangMedHalvanden=false;
$DelMedTo=false;

//************* Punkteret med < og > tegnet ***

$r="/[<][A-Ga-gz]/";
if(preg_match($r,$TheValue,$a)){
$NodeLen=$NodeLen*1.5;

}

$r="/[A-Ga-gz][1-9]?[\/]?[0-9]*[>]/";
if(preg_match($r,$TheValue,$a)){
$NodeLen=$NodeLen*1.5;
}
$r="/[>][A-Ga-gz]/";
if(preg_match($r,$TheValue,$a)){
$NodeLen=$NodeLen/2;
}
$r="/[A-Ga-gz][1-9]?[\/]?[0-9]*[<]/";
if(preg_match($r,$TheValue,$a)){

$NodeLen=$NodeLen/2;
}
//*********Dele med / tegn
$r="/[A-Ga-gz][\d]?[\/](\d)/";
if(preg_match($r,$TheValue,$a)){
//Find hvad der skal deles med
$NodeLen=$NodeLen/$a[1];
}
elseif(preg_match("/[A-Ga-g][\/]/",$TheValue,$a)){
//Kun "/"
$NodeLen=$NodeLen/2;

}
//*****************Gange med tal efter Nodetal
$r="/[A-Ga-gz](\d)/";
if(preg_match($r,$TheValue,$a)){
$NodeLen=$NodeLen*$a[1];

}

return $NodeLen; //helnode=1024 halvnode =512 quiver=256

}