Chapître 2 : La bibliothèque de fonctions biblimusi et les logiciels lirevoix.php et poly.php

On peut développer des fonctions en langage php, pour traiter en ligne quelques aspects de l'analyse musicale.

Un premier ensemble de fonctions concerne la saisie des données musicales.

Un deuxième ensemble de telles fonctions concerne le codage et le décodage de l'écriture des phrases musicales et des accords.

Le logiciel lirevoix.php utilise ces fonctions pour saisir et jouer des phrases musicales, des gammes, des accords...

Logiciel lirevoix.php pour saisir et jouer des arpèges, des gammes, des accords...

Un troisième groupe contient les fonctions de traitement proprement dit, c'est-à-dire des fonctions de reconnaissance des échelles musicales, des armures, des changements de tonalité...

Le logiciel poly.php donne un exemple de traitement des polycordes, pour les replacer dans un contexte tonal.

Logiciel poly.php pour le traitement des polycordes.

Vous trouverez des exemples de telles fonctions écrites en langage php, dans les bibliothèques biblimusi.php et biblilire.php

Vous pouvez copier de telles fonctions pour les inclure dans un programme en langage php, ou vous en inspirer pour créer vos propres fonctions.

Le chapître suivant décrit la syntaxe et le rôle de ces fonctions.

Chapître suivant : description des fonctions des bibliothèques musicales biblimusi.php et biblilire.php

retour dans la table des matières

Terminez et retourner dans la page index du site studyvox.free.fr

Source des fonctions de la bibliothèque biblimusi

function tabla($midi,$para) { $abc=substr($midi,strlen($midi)-4,4); if($abc==".abc") { echo "

$midi

"; $midi=file_get_contents($midi); } else ;//echo "

tabla $midi

"; $voix=""; $mesure[0]=0; $lon=strlen($midi); $tona="C"; $armu=""; $rythme="4/4"; $mesure[1]=" "; $lpara=strlen($para); $nunite=""; $ntona=""; for($i=0;$i<$lpara;$i++) { $l2=substr($para,$i,2); $l2=strtoupper($l2); if($l2=="V:") $nvoix=substr($para,$i+2,1); elseif($l2=="L:") $nunite=substr($para,2,1); elseif($l2=="K:") { $ntona=substr($para,$i+2,2); if(substr($tona,1,1)==" ") $tona=substr($tona,0,1); } } for($i=0;$i<$lon;$i++) { $l1=substr($midi,$i,1); $l2=substr($midi,$i,2); if($l2=="M:") { $rythme=substr($midi,$i+2,3); echo "

mesure : $rythme

"; } elseif($l2=="L:") { $unite=substr($midi,$i+3,3); echo "

unité : $unite

"; } elseif($l2=="K:") { $tona=substr($midi,$i+2,2); if(substr($tona,1,1)==" ") $tona=substr($tona,0,1); $armu=armure($tona); afficher("Tonalité $tona armure :",$armu); $deb=$i+3; } elseif($l2=="V:") { $nv=substr($midi,$i+2,1); if($nv=="$nvoix") $itest=1; else $itest=0; } if($itest==1) $voix=$voix.$l1; } if($voix != "") { echo "

Voix : $voix

"; $midi=$voix; } if($ntona != "") { $tona=$ntona; $armu=armure($tona); echo "

nouvelle tonalité $tona

"; } $j=2; $mesure[2]=""; $r[2]=""; $alt=""; for($i=$deb;$i<$lon;$i++) { $l1=substr($midi,$i,1); $l2=substr($midi,$i,2); if($l1=="^" or $l1=="_" or $l1=="=") $alt=$l1; elseif($l1=="[" or $l1=="(" or $l1=="." or $l1=="-") $r[$j]=$r[$j].$l1; elseif($l1=="]" or $l1==")") $r[$j]=substr($r[$j],0,strlen($r[$j])-1).$l1." "; elseif($l2=="!p" or $l2=="!f") { $r[$j]=$r[$j].$l2; $i++; } $n=ord($l1); if($l1=="z" or $l1=="p" or ($n>96 and $n<104) or ($n>64 and $n<72)) { $ls=substr($midi,$i+1,1); if($ls=="#" or $ls=="b" or $ls=="0") { $i++; $alt=$ls; } elseif($alt=="^") $alt="#"; elseif($alt=="_") $alt="b"; elseif($alt=="=") $alt="0"; $note=$l1.$alt; $n=decodernotetona($note,$tona); $mesure[$j]=$mesure[$j].$n." "; $alt=""; $ls=substr($midi,$i+1,1); if($ls==" " or $ls=="]") $r[$j]=$r[$j]."="; else { if($ls=="/" or intval($ls)>0) $r[$j]=$r[$j].$ls; $ls=substr($midi,$i+2,1); if($ls=="/" or intval($ls)>0) { $r[$j]=$r[$j].$ls; $ls=substr($midi,$i+3,1); if($ls=="/" or intval($ls)>0) $r[$j]=$r[$j].$ls; } } $r[$j]=$r[$j]." "; } elseif($l1=="|") { $mesure[$j]=mesure($mesure[$j]); //afficher("mesure $j :",$mesure[$j]); $r[$j]=rythme($r[$j]); //afficher("rythme $j",$r[$j]); $j++; $mesure[$j]=""; $r[$j]=""; } } if($nunite=="") { $mesure[0]=$j-1; $mesure[1]=mesure($armu); return $mesure; } else { $r[0]=$j-1; $r[1]=rythme($para); return $r; } }; function coderarpege($arpege) { $arpege=$arpege." "; $arpege=normaliser($arpege); $lon=strlen($arpege); $n=""; $prov=""; for($i=0;$i<$lon;$i++) { $l1=substr($arpege,$i,1); if($l1==" ") { if(intval($n)==0) { $prov=$prov.$n." "; $n=""; } else { $acc=substr($n,0,1); if($acc=="+") { $n=intval($n)+1; $note=codernote($n,"#"); } elseif($acc=="-") { $n=-intval($n)-1; $note=codernote($n,"b"); } else $note=codernote($n,"d"); $n=""; $prov=$prov.$note." "; } } else $n=$n.$l1; } return $prov; }; function codernote($n,$db) { if($n==0) return "p"; if($n>12) { $n=$n-12; $itest=1; } else $itest=0; if($db != "b") $db="#"; if($db=="#") { if($n==1) $note="c"; elseif($n==3) $note="d"; elseif($n==5) $note="e"; elseif($n==6) $note="f"; elseif($n==8) $note="g"; elseif($n==10) $note="a"; elseif($n==12) $note="b"; elseif($n==2) $note="c"; elseif($n==4) $note="d"; elseif($n==7) $note="f"; elseif($n==9) $note="g"; elseif($n==11) $note="a"; } if($db != "b") $db="#"; if($db=="b") { if($n==1) $note="c"; elseif($n==3) $note="d"; elseif($n==5) $note="e"; elseif($n==6) $note="f"; elseif($n==8) $note="g"; elseif($n==10) $note="a"; elseif($n==12) $note="b"; elseif($n==2) $note="d"; elseif($n==4) $note="e"; elseif($n==7) $note="g"; elseif($n==9) $note="a"; elseif($n==11) $note="b"; } if($itest==1) $note=strtoupper($note); if($n==2 or $n==4 or $n==7 or $n==9 or $n==11) $note=$note.$db; return $note; }; function decodernote($note) { if($note=="p" or $note=="0") return "0"; if(strlen($note)>1) $alt=substr($note,1,1); else $alt=""; $note=substr($note,0,1); if(ord($note)<72) { $itest=1; $note=strtolower($note); } else $itest=0; if($note=="c") $n=1; elseif($note=="d") $n=3; elseif($note=="e") $n=5; elseif($note=="f") $n=6; elseif($note=="g") $n=8; elseif($note=="a") $n=10; elseif($note=="b") $n=12; if($itest==1) $n=$n+12; if($alt=="#") $n++; elseif($alt=="b") $n--; if($n==0) $n=$n+12; elseif($n>24) $n=$n-12; return $n; }; function decodernotetona($note,$tona) { if(strlen($note)>1) $acci=substr($note,1,1); else $acci=""; if($acci != "") { $n=decodernote($note); return $n; } $armu=armure($tona); $n=decodernote($note); if($armu[0]==0) return $n; if($armu[1]>0) { $nalt=$n+1; if($nalt<=0) $nalt=$nalt+12; elseif($nalt>12) $nalt=$nalt-12; for($j=1;$j<=$armu[0];$j++) { if($nalt==$armu[$j]) { $n=$n++; $j=$armu[0]; } } //fin du traitement des dièses } else { $nalt=$n-1; if($nalt<=0) $nalt=$nalt+12; elseif($nalt>12) $nalt=$nalt-12; for($j=1;$j<=$armu[0];$j++) { if($nalt==$armu[$j]) { $n=$n--; $j=$armu[0]; } } } return $n; }; function afficher($titre,$me) { if($titre != "") echo "

$titre

"; echo "

"; $mesure=""; for($j=1;$j<=$me[0];$j++) { echo $me[$j]." "; $mesure=$mesure.$me[$j]." "; } return $mesure; }; function tirage($m,$n) { $s[0]=$n; for($i=1;$i<=$n;$i++) { $j=rand(1,$m[0]); $s[$i]=$m[$j]; } return $s; }; function tirageinstru() { $n=rand(0,9); if($n==0 or $n==1 or $n==3) return $n; if($n==2) return 20; if($n==4) return 25; if($n==5) return 41; if($n==6) return 50; if($n==7) return 68; if($n==8) return 72; if($n=9) return 91; }; function tiragemode($type,$deg,$n) { $mo=mode($type,$deg); $s[0]=$n; for($i=1;$i<=$n;$i++) { $j=rand(1,$mo[0]); $s[$i]=$mo[$j]; } return $s; }; function coderinter($i) { if($i==1) $int="s"; elseif($i==2) $int="S"; elseif($i==3) $int="t"; elseif($i==4) $int="T"; elseif($i==5) $int="Q"; elseif($i==6) $int="v"; elseif($i==7) $int="V"; elseif($i==8) $int="x"; elseif($i==9) $int="X"; else $int=""; return $int; }; function decoderarpege($arpege) { $li=substr($arpege,0,1); $ls=strtoupper($li); if($ls=="S" or $ls=="T" or $ls=="Q" or $ls=="V" or $ls=="X" or $ls=="O" or $ls=="+" or $ls=="-") $arpege="13".$arpege; $lon=strlen($arpege); $prov=""; for($i==0;$i<$lon;$i++) { $l1=substr($arpege,$i,1); if($l1==" " or $l1=="[") { $li=substr($arpege,$i+1,1); $ls=strtoupper($li); if($ls=="S" or $ls=="T" or $ls=="Q" or $ls=="V" or $ls=="X" or $ls=="O" or $ls=="+" or $ls=="-") { $i++; $l1=$l1."13".$li; } } $prov=$prov.$l1; } $arpege=$prov; $lon=strlen($arpege); $itest=0; $ipar=0; $arp=""; $prov=""; for($i=0;$i<$lon;$i++) { $l1=substr($arpege,$i,1); $l3=substr($arpege,$i,3); if($l1=="[") { $arp=$arp.$l1; $l1=""; } elseif($l1=="]") { $ipar=1; $l1=""; } if($l3=="chr" or $l3=="ton" or $l3=="dem" or $l3=="maj" or $l3=="har" or $l3=="mel" or $l3=="pen") $itest=1; if($l1==" ") { if(intval($prov)>0 and $itest==0) { $a=accordinter($prov); $m=arpegeaccord($a); for($k=1;$k<$m[0]-1;$k++) $arp=$arp.$m[$k]." "; $arp=$arp.$m[$m[0]-1]; } else $arp=$arp.$prov; $itest=0; if($ipar==1) $arp=$arp."] "; else $arp=$arp." "; $ipar=0; $prov=""; } else $prov=$prov.$l1; } if(strlen($arp) != $lon) echo "

Traitement des intervalles : $arp

"; return $arp; }; function decoderinter($inter) { $l1=$inter; if($l1=="s") $i=1; elseif($l1=="S") $i=2; elseif($l1=="t") $i=3; elseif($l1=="T") $i=4; elseif($l1=="Q") $i=5; elseif($l1=="v") $i=6; elseif($l1=="V") $i=7; elseif($l1=="x") $i=8; elseif($l1=="X") $i=9; else $i=0; return $i; }; function codermesure($me,$symb) { $h=coder($symb); $harmome[0]=$me[0]; for($i=1;$i<=$me[0];$i++) { if($me[$i]==0) $harmome[$i]="p"; else { if($me[$i]>36) $me[$i]=$me[$i]-12; if($me[$i]>24) $me[$i]=$me[$i]-12; $harmome[$i]=$h[$me[$i]]; } } return $harmome; }; function harmomesure($me,$tona) { if($tona=="" or $tona=="C") { $harmome=codermesure($me,"d"); return $harmome; } if($tona=="C" or $tona=="D" or $tona=="E" or $tona=="G" or $tona=="A" or $tona=="B" or $tona=="C#" or $tona=="F#" or $tona=="Cm" or $tona=="Dm" or $tona=="Em" or $tona=="Gm" or $tona=="Am" or $tona=="Bm" or $tona=="C#m" or $tona=="F#m") $symb="d"; else $symb="b"; $harmo=coder($symb); $harmome[0]=$me[0]; $armu=armure($tona); for($i=1;$i<=$me[0];$i++) { for($j=1;$j<=$armu[0];$j++) { if($me[$i]==abs($armu[$j])) { $harmome[$i]=substr($harmo[$me[$i]],0,1); $j=$armu[0]; } else $harmome[$i]=$harmo[$me[$i]]; } } return $harmome; }; function coderbasevoix($base,$nvoix) { $base=$base." "; $lon=strlen($base); $note=""; $n=0; $itest=0; $if=0; $prov=""; for($i=0;$i<$lon;$i++) { $c=substr($base,$i,1); $l2=substr($base,$i,2); if($l2=="35") { $i++; $c="#"; } elseif($l2=="43") { $i++; $c="+"; } elseif($l2=="45") { $i++; $c="-"; } elseif($l2=="!f") { $c=""; $if=1; } elseif($l2=="!p") { $c=""; $if=0; } elseif($l2==" ") $c=""; if($c=="[") { $c=""; $itest=1; $note=""; } elseif($c=="]") { $c=""; $itest=0; if($n==$nvoix-1) $prov=$prov.$note." "; $n=0; $note=""; } if($itest==1 and $note != "" and $c==" ") { $n++; if($n==$nvoix) $prov=$prov.$note." "; $note=""; } if($c==" " and $itest==0 and $note != "") { if($nvoix != 1 and $if != 1) $note="p"; $prov=$prov.$note." "; $note=""; } else $note=$note.$c; } if(substr($prov,0,1)==" ") $prov=substr($prov,1,strlen($prov)-1); return $prov; }; function coderbaseharmo($baseharmo,$tona) { if($tona=="" or $tona=="C") return $baseharmo; $armu=armure($tona); $coderarmu=coderarmure($armu); for($j=1;$j<=$coderarmu[0];$j++) { $larmu[$j]=substr($coderarmu[$j],0,1); } $symb=substr($coderarmu[1],1,1); if($symb !="#") $symb="b"; $baseanharmo=""; $lon=strlen($baseharmo); for($i=0;$i<$lon;$i++) { $l1=substr($baseharmo,$i,1); $ls=substr($baseharmo,$i+1,1); if($ls==" ") { for($j=1;$j<=$coderarmu[0];$j++) if(strtolower($l1)==$larmu[$j]) $l1=$l1.$symb." "; } $baseanharmo=$baseanharmo.$l1; } return $baseanharmo; }; function coderbase($base) { $php=substr($base,strlen($midi)-4,4); if($php==".php" or $php==".abc") { echo "

fichier $base

"; $base=file_get_contents($base); if($php==".abc") $base="v:1".$base; } $base=$base." "; $lon=strlen($base); $prov=""; for($i=0;$i<$lon;$i++) { $l1=substr($base,$i,1); $l2=substr($base,$i,2); $l3=substr($base,$i,3); if($i==0 and $l2=="1-") { $i++; $l1="12"; } if($l3==" 1-") { $i=$i+2; $l1=" 12"; } $prov=$prov.$l1; } $base=$prov; $prov=""; $itest=0; $rep=""; for($i=0;$i<$lon;$i++) { $c=substr($base,$i,1); if($i==0 and $c=="0") $c="p"; $l2=substr($base,$i,2); if($l2==" 0") { $i++; $c=" p"; } elseif($l2=="35") { $i++; $c="#"; } elseif($l2=="43") { $i++; $c="+"; } elseif($l2=="61") { $i++; $c="="; } elseif($l2=="|:") { $itest=1; $c=""; $i=$i+2; } elseif($l2==":|") { $n=intval(substr($base,$i+2,1)); if($n==0) { $n=1; $i=$i+3; } else $i=$i+4; for($j=1;$j<=$n;$j++) $prov=$prov.$rep; $rep=""; $itest=0; $c=""; } elseif($l2==" ") $c=""; if($itest==1) $rep=$rep.$c; $prov=$prov.$c; } return $prov; }; function coder($symb) { $coder[0]=24; $coder[1]="c"; $coder[3]="d"; $coder[5]="e"; $coder[6]="f"; $coder[8]="g"; $coder[10]="a"; $coder[12]="b"; $coder[13]="C"; $coder[15]="D"; $coder[17]="E"; $coder[18]="F"; $coder[20]="G"; $coder[22]="A"; $coder[24]="B"; if($symb=="b") { $coder[2]="db"; $coder[4]="eb"; $coder[7]="gb"; $coder[9]="ab"; $coder[11]="bb"; $coder[14]="Db"; $coder[16]="Eb"; $coder[19]="Gb"; $coder[21]="Ab"; $coder[23]="Bb"; } else { $coder[2]="c#"; $coder[4]="d#"; $coder[7]="f#"; $coder[9]="g#"; $coder[11]="a#"; $coder[14]="C#"; $coder[16]="D#"; $coder[19]="F#"; $coder[21]="G#"; $coder[23]="A#"; } $harmo=$coder; return $harmo; }; function decoder($harmome) { $hd=coder("d"); $hb=coder("b"); $me[0]=$harmome[0]; for($i=1;$i<=$me[0];$i++) { $m=$harmome[$i]; for($j=1;$j<=24;$j++) { $d=$hd[$j]; $b=$hb[$j]; if($m==$d or $m==$b) { $me[$i]=$j; $j=24; } } } return $me; }; function decoderharmo($harmome,$tona) { $me=decoder($harmome); afficher("test me",$me); if($tona=="C" or $tona==" " or $tona=="") return $me; $armu=armure($tona); afficher("test armu :",$armu); for($i=1;$i<=$me[0];$i++) { for($j=1;$j<=$armu[0];$j++) { if(($me[$i]+1==$armu[$j] or $me[$i]-11==$armu[$j]) and intval($armu[$j])>0) $me[$i]=$me[$i]+1; elseif(($me[$i]-1==-intval($armu[$j]) or $me[$i]+11==-intval($armu[$j])) and intval($armu[$j])<0) $me[$i]=$me[$i]-1; if($me[$i]<1) $me[$i]=$me[$i]+12; elseif($me[$i]>24) $me[$i]=$me[$i]-12; } } return $me; }; function codermode($type,$deg,$tona) { $mo=mode($type,$deg); $codermo=codermesure($mo,$tona); return $codermo; }; function modetona($type,$deg,$ntona) { $mo=mode($type,$deg); if($ntona>24) $ntona=$ntona-24; $ntona=$ntona-1; for($i=1;$i<=$mo[0];$i++) { $mo[$i]=$mo[$i]+$ntona; if($mo[$i]>24) $mo[$i]=$mo[$i]-12; } return $mo; }; function mode($type,$deg) { if($deg=="I") $deg=1; elseif($deg=="II") $deg=2; elseif($deg=="III") $deg=3; elseif($deg=="IV") $deg=4; elseif($deg=="V") $deg=5; elseif($deg=="VI") $deg=6; elseif($deg=="VII") $deg=7; elseif($deg=="") $deg=1; if($type=="chroma" or $type=="chr") { $mo[0]=12; for($i=1;$i<=12;$i++) $mo[$i]=$i; return $mo; } if($type=="ton") { $mo[0]=6; $mo[1]=1; for($i=1;$i<6;$i++) $mo[$i+1]=$i+2; return $mo; } if($type=="dim") { $mo[0]=8; $deg=$deg-1; $g[1]=1; $g2=2; $g3=4; $g[4]=5; $g[5]=7; $g[6]=8; $g[7]=10; $g[8]=11; $g[9]=13; for($i=1;$i<=8;$i++) $mo[$i]=$g[$i+$deg]; return $mo; }; if($type=="pen") { $mo[0]=5; $deg=$deg-1; $g[1]=1; $g2=3; $g3=5; $g[4]=8; $g[5]=10; $g[6]=13; $g[7]=15; $g[8]=17; $g[9]=20; $g[10]=22; for($i=1;$i<=8;$i++) $mo[$i]=$g[$i+$deg]; return $mo; }; if($type=="maj" or $type=="") { $mo[0]=7; $deg=$deg-1; $g[1]=1; $g[2]=3; $g[3]=5; $g[4]=6; $g[5]=8; $g[6]=10; $g[7]=12; $g[8]=13; $g[9]=15; $g[10]=17; $g[11]=18; $g[12]=20; $g[13]=22; $g[14]=24; for($i=1;$i<=7;$i++) $mo[$i]=$g[$i+$deg]; return $mo; } if($type=="har") { $mo[0]=7; $deg=$deg-1; $g[1]=1; $g[2]=3; $g[3]=4; $g[4]=6; $g[5]=8; $g[6]=9; $g[7]=12; $g[8]=13; $g[9]=15; $g[10]=16; $g[11]=18; $g[12]=20; $g[13]=21; $g[14]=24; for($i=1;$i<=7;$i++) $mo[$i]=$g[$i+$deg]; return $mo; } if($type=="mel") { $mo[0]=7; $deg=$deg-1; $g[1]=1; $g[2]=3; $g[3]=4; $g[4]=6; $g[5]=8; $g[6]=10; $g[7]=12; $g[8]=13; $g[9]=15; $g[10]=16; $g[11]=18; $g[12]=20; $g[13]=22; $g[14]=24; for($i=1;$i<=7;$i++) $mo[$i]=$g[$i+$deg]; return $mo; } if(intval($type)==0) { $mo[0]=0; echo "

pas d'échelle

"; return $mo; } $m=mesure($type); $s=serie($m); if($s[0]<8) { $n=$s[0]; for($i=$n+1;$i<=$n+7;$i++) { if($s[$i-$s[0]]<12) $s[$i]=$s[$i-$s[0]]+12; else $s[$i]=$s[$i-$s[0]]; } $s=serie($s); $s[0]=$s[0]+7; } for($i=$deg;$i<=$s[0]+$deg;$i++) $mo[$i]=$s[$i+$deg-1]; $mo[0]=$s[0]; return $mo; }; function serie($m) { //$s=sort($m,SORT_STRING); $it=0; $n=$m[0]; $m[0]=100; for($k=1;$k<=$n;$k++) { $min=min($m); if($min==100) { $i=$n; $s[0]=$it; return $s; } else $s[$k]=$min; for($i=1;$i<=$n;$i++) { if($m[$i] != 100 and $m[$i]==$min) { $s[$k]=$min; $m[$i]=100; $it++; } } } $s[0]=$it; return $s; }; function serieinverse($m) { $it=0; $n=$m[0]; $m[0]=0; for($k=1;$k<=$n;$k++) { $max=max($m); if($max==0) { $i=$n; $s[0]=$it; return $s; } else $s[$k]=$max; for($i=1;$i<=$n;$i++) { if($m[$i] != 0 and $m[$i]==$max) { $s[$k]=$max; $m[$i]=0; $it++; } } } $s[0]=$it; return $s; }; function normaliser($chaine) { $lon=strlen($chaine); $prov=""; for($i=0;$i<$lon;$i++) { $l1=substr($chaine,$i,1); $ls=substr($chaine, $i+1,1); if($i==0 and $l1==" ") $l1=""; elseif($l1==" " and $ls==" ") $l1=""; elseif($l1=="]" and $ls=="[") $l1="] "; $prov=$prov.$l1; } return $prov; }; function mesure($mesure) { normaliser($mesure); $lon=strlen($mesure); $j=0; $note=""; $acc=""; for($i=0;$i<$lon;$i++) { $l1=substr($mesure,$i,1); if($l1=="[" or $l1=="]") $l1=""; if($l1=="+" or $l1=="-") { $acc=$l1."1"; $l1=""; } if($l1==" " and $note != "") { if($note=="z" or $note=="p") { $j++; $m[$j]=$note; $note=""; } else { $n=intval($note); if($n==0) $n=decodernote($note); if($n>0) { $j++; $m[$j]=$n+$acc; $acc=""; } $note=""; } } else $note=$note.$l1; } $m[0]=$j; return $m; }; function silence($m) { //echo "

test sil m0 $m[0]

"; if($m=="") return mesure("p "); for($i=1;$i<=$m[0];$i++) { //echo "

test sil $m[$i]

"; if($m[$i] != "p") return $m; } return mesure("p "); }; function rythme($rythme) { $rythme=$rythme." "; $lon=strlen($rythme); $j=0; $prov=""; for($i=0;$i<$lon;$i++) { $l1=substr($rythme,$i,1); if($l1==" " and $prov != "") { $j++; $r[$j]=$prov; $prov=""; } else $prov=$prov.$l1; } $r[0]=$j; return $r; }; function motif($motif) { $lon=strlen($motif); $prov=""; $mot=""; for($i=0;$i<$lon;$i++) { $l1=substr($motif,$i,1); if($l1==":" or $l1=="|") { $ls=substr($motif,$i+1,1); $n=intval($ls); for($j=0;$j<=$n;$j++) $mot=$mot.$prov; if($ls==" ") $i++; else $i=$i+2; $prov=""; } else $prov=$prov.$l1; } $motif=$mot.$prov; $motif=$motif." "; $lon=strlen($motif); $j=0; $note=""; for($i=0;$i<$lon;$i++) { $l1=substr($motif,$i,1); if($l1==" ") { $note=intval($note); if($note>0) { $j++; $imot[$j]=$note; } $note=""; } else $note=$note.$l1; } $imot[0]=$j; return $imot; }; function melanger($m,$imot) { $j=0; for($i=1;$i<=$imot[0];$i++) { if($imot[$i]<=$m[0]) { $j++; $mel[$i]=$m[$imot[$i]];} } $mel[0]=$j; return $mel; }; function polycorde($type,$deg,$poly) { $mo=mode($type,$deg); $po[0]=$poly; for($i=$mo[0];$i<=$mo[0]+$poly;$i++) $po[$i]=$mo[$i]; return $po; }; function ajoutermesure($m1,$m2) { $m[0]=$m1[0]+$m2[0]; for($i=1;$i<=$m1[0];$i++) $m[$i]=$m1[$i]; for($i=1;$i<=$m2[0];$i++) { $j=$i+$m1[0]; $m[$j]=$m2[$i]; } return $m; }; function arpegeaccord($a) { $m[1]=$a[1]; $m[0]=$a[0]+1; for($i=1;$i<$a[0];$i++) { $m[$i+1]=$m[$i]+$a[$i+1]; if($m[$i+1]>24) $m[$i+1]=$m[$i+1]-12; elseif($m[$i+1]<0) $m[$i+1]=$m[$i+1]+12; } return $m; }; function basearpege($m) { $base=""; for($i=1;$i<=$m[0];$i++) $base=$base.$m[$i]." "; return $base; }; function accordarpege($m) { $j=1; for($i=1;$i<$m[0];$i++) { $int=$m[$i+1]-$m[$i]; if($int != 0) { $j++; $a[$j]=$int; } } $a[0]=$j; $a[1]=$m[1]; return $a; }; function baseaccord($a) { $m=arpegeaccord($a); $base="["; for($i=1;$i<$m[0];$i++) $base=$base.$m[$i]." "; $base=$base."]"; return $base; }; function interaccord($a) { $inter=$a[1]; for($i=2;$i<$a[0];$i++) { if($a[$i]==1) $int="s"; elseif($a[$i]==2) $int="S"; elseif($a[$i]==3) $int="t"; elseif($a[$i]==4) $int="T"; elseif($a[$i]==5) $int="Q"; elseif($a[$i]==6) $int="v"; elseif($a[$i]==7) $int="V"; elseif($a[$i]==8) $int="x"; elseif($a[$i]==9) $int="X"; else $int=""; $inter=$inter.$int; } return $inter; }; function accordinter($inter) { $a[1]=intval($inter); if($a[1]==0) $a[1]=13; else $inter=substr($inter,strlen($a[1]),strlen($inter)-strlen($a[1])); $lon=strlen($inter); for($i=0;$i<$lon;$i++) $m[$i]=0; $j=1; for($i=0;$i<$lon;$i++) { $l1=substr($inter,$i,1); if($l1=="+" or $l1=="-") { if($l1=="+") $m[$j]=$m[$j]+1; elseif($l1=="-") $m[$j]=$m[$j]-1; } else $j++; if(decoderinter($l1) != 0) $a[$j]=decoderinter($l1); } for($i=0;$i<$j;$i++) $a[$i+1]=$a[$i+1]-$m[$i]+$m[$i+1]; $a[0]=$j; return $a; }; function accordgrille($grille) { $lon=strlen($grille); $prov=""; for($i=0;$i<$lon;$i++) { $l1=substr($grille,$i,1); if($l1 != " ") $prov=$prov.$l1; } $grille=$prov; $lon=strlen($grille); $basse=""; for($i=0;$i<$lon;$i++) { $l1=substr($grille,$i,1); if($l1=="/") { $acc=substr($grille,$i+1,$lon-$i-1); $basse=substr($grille,0,$i); } } if($basse=="") $acc=$grille; $ls=substr($acc,1,1); if($ls=="#" or $ls=="b") { $note=substr($acc,0,2); if($basse=="") $basse=$note; $lss=substr($acc,2,strlen($acc)-2); } else { $note=substr($acc,0,1); if($basse=="") $basse=$note; $lss=substr($acc,1,strlen($acc)-1); } if($lss=="m9") $int="tTtT"; elseif($lss=="m75b") $int="ttT"; elseif($lss=="m7") $int="tTt"; elseif($lss=="dim7") $int="ttt"; elseif($lss=="dim") $int="tt"; elseif($lss=="7M") $int="TtT"; elseif($lss=="9") $int="TttT"; elseif($lss=="7") $int="Ttt"; elseif($lss=="m") $int="tT"; elseif($lss=="") $int="Tt"; else $int=""; $b=decodernote($basse); if($b>12) $b=$b-12; $n=decodernote($note); $i=$n-$b; if($i>12) $i=$i-12; $int=coderinter($i).$int; $a=accordinter($int); $a[1]=$b; return $a; }; function accordtypedeg($ntona,$type,$deg,$ninter) { if($ntona=="") $ntona="1"; $mo=modetona($type,$deg,$ntona); $a[0]=$ninter+1; $a[1]=$mo[1]; for($i=1;$i<=$ninter;$i++) $a[$i+1]=$mo[$i+2]-$mo[$i]; return $a; }; function agregatseriedeg($s,$deg,$ninter) { if($s[0]<8) { for($i=$s[0]+1;$i<=$s[0]+7;$i++) { if($s[$i-$s[0]]<12) $s[$i]=$s[$i-$s[0]]+12; else $s[$i]=$s[$i-$s[0]]; } $s[0]=$s[0]+7; $s=serie($s); } for($i=1;$i<=$s[0];$i++) $mo[$i]=$s[$i+$deg-1]; $a[0]=$ninter+1; $a[1]=$mo[1]; for($i=1;$i<=$ninter;$i++) $a[$i+1]=$mo[$i+2]-$mo[$i]; return $a; }; function echelle($type,$deg,$ninter) { $mo=mode($type,$deg); $a[0]=$ninter+1; $a[1]=$mo[1]; for($i=1;$i<=$ninter;$i++) $a[$i+1]=$mo[$i+1]-$mo[$i]; return $a; }; function coderdeg($ndeg) { if($ndeg==1) $deg="I"; elseif($ndeg==2) $deg="II"; elseif($ndeg==3) $deg="III"; elseif($ndeg==4) $deg="IV"; elseif($ndeg==5) $deg="V"; elseif($ndeg==6) $deg="VI"; elseif($ndeg==7) $deg="VII"; elseif($ndeg==8) $deg="VIII"; elseif($ndeg==9) $deg="IX"; elseif($ndeg==10) $deg="X"; elseif($ndeg==11) $deg="XI"; elseif($ndeg==12) $deg="XII"; elseif($ndeg==13) $deg="XIII"; return $deg; }; function typedeg($type,$s) { $typedeg="intervalle altéré"; if($type=="maj") $mod=mesure("1 3 5 6 8 10 12 13 15 17 18 20 22 24 "); elseif($type=="har") $mod=mesure("1 3 4 6 8 9 12 13 15 16 18 20 21 24 "); elseif($type=="mel") $mod=mesure("1 3 4 6 8 10 12 13 15 16 18 20 22 24 "); $amod=accordarpege($mod); $a=accordarpege($s); $itest=0; $k=0; for($i=2;$i<=$amod[0];$i++) { for($j=2;$j<=$a[0];$j++) { if($a[$j]==$amod[$i+$k]) { $itest=1; $k++; } else { $itest=0; $k=0; $j=$a[0]; } } if($itest==1) { $ndeg=$i-1; $deg=coderdeg($ndeg); $typedeg=$a[1].$type.$deg.$a[0]." : "; echo "

$typedeg : type $type degré $deg

"; $k=0; $itest=0; } //fin de la recherche } return $typedeg; }; function transposer($s,$demiton) { $oct=0; if($demiton<0) $demiton=$demiton+12; for($i=1;$i<=$s[0];$i++) { if($s[$i]=="z" or $s[$i]=="p") ; else { $s[$i]=$s[$i]+$demiton; if($s[$i]>24) $oct=-12; elseif($s[$i]<1) $oct=12; } } if($oct==0) return $s; for($i=1;$i<=$s[0];$i++) if($s[$i] != "z" and $s[$i] != "p") $s[$i]=$s[$i]+$oct; return $s; }; function armure($tona) { if($tona=="C" or $tona=="Cm" or $tona=="") { $armu[0]=0; return $armu; } if($tona=="G" or $tona=="Em") { $armu[0]=1; $armu[1]=7; return $armu; } if($tona=="D" or $tona=="Bm") { $armu[0]=2; $armu[1]=7; $armu[2]=2; return $armu; } if($tona=="A" or $tona=="F#m") { $armu[0]=3; $armu[1]=7; $armu[2]=2; $armu[3]=9; return $armu; } if($tona=="E" or $tona=="C#m") { $armu[0]=4; $armu[1]=7; $armu[2]=2; $armu[3]=9; $armu[4]=4; return $armu; } if($tona=="B" or $tona=="G#m") { $armu[0]=5; $armu[1]=7; $armu[2]=2; $armu[3]=9; $armu[4]=4; $armu[5]=11; return $armu; } if($tona=="F#" or $tona=="D#m") { $armu[0]=6; $armu[1]=7; $armu[2]=2; $armu[3]=9; $armu[4]=4; $armu[5]=11; $armu[6]=6; return $armu; } if($tona=="C#" or $tona=="A#m") { $armu[0]=7; $armu[1]=6; $armu[2]=2; $armu[3]=9; $armu[4]=4; $armu[5]=11; $armu[6]=6; $armu[7]=1; return $armu; } if($tona=="F" or $tona=="Dm") { $armu[0]=1; $armu[1]=-11; return $armu; } if($tona=="Bb" or $tona=="Gm") { $armu[0]=2; $armu[1]=-11; $armu[2]=-4; return $armu; } if($tona=="Eb" or $tona=="Cm") { $armu[0]=3; $armu[1]=-11; $armu[2]=-4; $armu[3]=-9; return $armu; } if($tona=="Ab" or $tona=="Fm") { $armu[0]=4; $armu[1]=-11; $armu[2]=-4; $armu[3]=-9; $armu[4]=-2; return $armu; } if($tona=="Db" or $tona=="Bbm") { $armu[0]=5; $armu[1]=-11; $armu[2]=-4; $armu[3]=-9; $armu[4]=-2; $armu[5]=-7; return $armu; } if($tona=="Gb" or $tona=="Ebm") { $armu[0]=6; $armu[1]=-11; $armu[2]=-4; $armu[3]=-9; $armu[4]=-2; $armu[5]=-7; $armu[6]=-12; return $armu; } if($tona=="Cb" or $tona=="Abm") { $armu[0]=7; $armu[1]=-11; $armu[2]=-4; $armu[3]=-9; $armu[4]=-2; $armu[5]=-7; $armu[6]=-12; $armu[7]=-5; return $armu; } echo "

la tonalité $ton n'est pas traitée

"; $armu[0]=0; return armu; }; function coderarmure($armu) { $coderarmu[0]=$armu[0]; if($armu[0]==0) return $coderarmu; $hd=coder("d"); $hb=coder("b"); for($i=1;$i<=$armu[0];$i++) { $bemol=substr($armu[$i],0,1); if($bemol != "-") { $coderarmu[$i]=$hd[$armu[$i]]; if($coderarmu[$i]=="f") $coderarmu[$i]="e#"; elseif($coderarmu[$i]=="c") $coderarmu[$i]="b#"; } else { $n=substr($armu[$i],1,2); $coderarmu[$i]=$hb[$n]; if($coderarmu[$i]=="b") $coderarmu[$i]="cb"; elseif($coderarmu[$i]=="e") $coderarmu[$i]="fb"; } } return $coderarmu; }; function recherchercodealt($code) { $j=0; for($i=1;$i<=$code[0];$i++) { $code[$i]=strtolower($code[$i]); $note=$code[$i]; if(strlen($note)==2) { $itest=0; for($k=1;$k<=$j;$k++) { if($codealt[$k]==$note) $itest=1; } if($itest==0) { $j++; $codealt[$j]=$note; } } } $codealt[0]=$j; return $codealt; }; function recherchertona($codealt) { $n=$codealt[0]; if($codealt[0]=0) return "C"; $tona=""; for($i=1;$i<=$n;$i++) { if($codealt[$i]=="f#") $tona="G"; if($codealt[$i]=="g#" and $n==1) return "Am"; if($codealt[$i]=="bb") $tona="F"; if($codealt[$i]=="c#" and $n==1) return "Dm"; } if($tona=="" or $n==1) return $tona; $tona=""; for($i=1;$i<=$n;$i++) { if($codealt[$i]=="c#") $tona="D"; if($codealt[$i]=="a#" and $n==2) return "Bm"; if($codealt[$i]=="eb") $tona="Bb"; if($codealt[$i]=="gb" and $n==2) return "Gm"; } if($tona=="" or $n==2) return $tona; $tona=""; for($i=1;$i<=$n;$i++) { if($codealt[$i]=="g#") $tona="A"; if($codealt[$i]=="f0") $tona="F#m"; if($codealt[$i]=="ab") $tona="eb"; if($codealt[$i]=="b0") $tona="Dm"; } if($tona=="" or $n==3) return $tona; $tona=""; for($i=1;$i<=$n;$i++) { if($codealt[$i]=="d#") $tona="E"; if($codealt[$i]=="c0") $tona="C#m"; if($codealt[$i]=="db") $tona="ab"; if($codealt[$i]=="e0") $tona="Fm"; } if($tona=="" or $n==4) return $tona; $tona=""; for($i=1;$i<=$n;$i++) { if($codealt[$i]=="a#") $tona="B"; if($codealt[$i]=="g0") $tona="G#m"; if($codealt[$i]=="gb") $tona="db"; if($codealt[$i]=="a0") $tona="Bbm"; } if($tona=="" or $n==5) return $tona; $tona=""; for($i=1;$i<=$n;$i++) { if($codealt[$i]=="e#") $tona="F#"; if($codealt[$i]=="d0") $tona="D#m"; if($codealt[$i]=="cb") $tona="Gb"; if($codealt[$i]=="d0") $tona="Ebm"; } if($tona=="" or $n==6) return $tona; $tona=""; for($i=1;$i<=$n;$i++) { if($codealt[$i]=="b#") $tona="C#"; if($codealt[$i]=="a0") $tona="A#m"; if($codealt[$i]=="fb") $tona="Cb"; if($codealt[$i]=="g0") $tona="Abm"; } if($n==7) return $tona; return $tona; };function rechercherarmurediese($me) { $iarmu=0; for($i=1;$i<=$me[0];$i++) if($me[$i]>12) $me[$i]=$me[$i]-12; for($i=1;$i<=$me[0];$i++) { if($me[$i]==7) { $iarmu=1; $armu[1]=7; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==0) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==2) { $iarmu=2; $armu[2]=2; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==1) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==9) { $iarmu=3; $armu[3]=9; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==2) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==4) { $iarmu=4; $armu[4]=4; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==3) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==11) { $iarmu=5; $armu[5]=11; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==4) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==6) { $iarmu=6; $armu[6]=6; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==5) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==1) { $iarmu=7; $armu[7]=1; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==6) return $armu; //fin de la recherche des dièses return $armu; }; function rechercherarmurebemol($me) { $iarmu=0; for($i=1;$i<=$me[0];$i++) if($me[$i]>12) $me[$i]=$me[$i]-12; for($i=1;$i<=$me[0];$i++) { if($me[$i]==11) { $iarmu=1; $armu[1]=-11; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==0) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==4) { $iarmu=2; $armu[2]=-4; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==1) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==9) { $iarmu=3; $armu[3]=-9; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==2) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==2) { $iarmu=4; $armu[4]=-2; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==3) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==7) { $iarmu=5; $armu[5]=-7; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==4) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==12) { $iarmu=6; $armu[6]=-12; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==5) return $armu; for($i=1;$i<=$me[0];$i++) { if($me[$i]==5) { $iarmu=7; $armu[7]=-5; $i=$me[0]; } } $armu[0]=$iarmu; if($iarmu==6) return $armu; //fin de la recherche des bémols return $armu; }; function rechercherarmure($me) { $armu=rechercherarmurediese($me); if($armu[0]==0) $armu=rechercherarmurebemol($me); return $armu; };

Source des fonctions de la bibliothèque biblilire

function mouvegrille($grille) { $grille=$grille." "; $lon=strlen($grille); $prov=""; $provgrille=""; for($i=0;$i<$lon;$i++) { $l1=substr($grille,$i,1); if($l1==" " and $prov != "") { $prov=mouveaccord($prov); $provgrille=$provgrille.$prov." | "; $prov=""; $i=$i+2; } else $prov=$prov.$l1; } echo "

grille $provgrille

"; return $provgrille; }; function mouveaccord($accord) { $lon=strlen($accord); $acc=""; for($i=0;$i<$lon;$i++) { $l1=substr($accord,$i,1); if($l1=="+" or $l1=="-") ; else $acc=$acc.$l1; } if(strlen($acc)==$lon) return $accord; echo "

accord initial : $acc

"; $itest=0; $deb=""; $basse=intval($accord); if($basse==0) $basse=13; $prov=""; $provacc=""; for($i=0;$i<$lon;$i++) { $l1=substr($accord,$i,1); if($itest==0 and $l1=="+") $basse=$basse+1; elseif($itest==0 and $l1=="-") $basse=$basse-1; if($itest==0 and $basse==0) $basse=12; if($l1=="+" or $l1=="-") $deb=$deb.$l1; if(l1=="s" or $l1=="S" or $l1=="t" or $l1=="T" or $l1=="Q" or $l1=="v" or $l1=="V" or $l1=="x" or $l1=="X") { if($itest==1) { $prov=mouvement($prov); $provacc=$provacc.$prov; } else { $provacc=$basse; $itest=1; } $prov=$deb; $deb=""; } $prov=$prov.$l1; } $provacc=$provacc.mouvement($prov); echo "

accord transformé : $provacc

"; return $provacc; }; function mouvement($interaccord) { $lon=strlen($interaccord); $itest=0; $intacc=0; for($i=0;$i<$lon;$i++) { $l1=substr($interaccord,$i,1); if($l1=="+" and $itest==0) $intacc=$intacc-1; elseif($l1=="-" and $itest==0) $intacc=$intacc+1; elseif($l1=="+" and $itest==1) $intacc=$intacc+1; elseif($l1=="-" and $itest==1) $intacc=$intacc-1; elseif(intval($l1)==0 and $itest==0) $itest=1; if($l1=="s") $intacc=$intacc+1; elseif($l1=="S") $intacc=$intacc+2; elseif($l1=="t") $intacc=$intacc+3; elseif($l1=="T") $intacc=$intacc+4; elseif($l1=="Q") $intacc=$intacc+5; elseif($l1=="v") $intacc=$intacc+6; elseif($l1=="V") $intacc=$intacc+7; elseif($l1=="x") $intacc=$intacc+8; elseif($l1=="X") $intacc=$intacc+9; } if($intacc==0) $intacc=""; elseif($intacc==1) $intacc="s"; elseif($intacc==2) $intacc="S"; elseif($intacc==3) $intacc="t"; elseif($intacc==4) $intacc="T"; elseif($intacc==5) $intacc="Q"; elseif($intacc==6) $intacc="v"; elseif($intacc==7) $intacc="V"; elseif($intacc==8) $intacc="x"; elseif($intacc==9) $intacc="X"; return $intacc; }; function voixarpege($arpege) { $arpege=normaliser($arpege); $provarpege=""; $mesurearpege=$arpege."|"; $l=strlen($mesurearpege); $provmesu=""; for($j=0;$j<$l;$j++) { $l1mesu=substr($mesurearpege,$j,1); if($l1mesu==":" or $l1mesu=="|") { $arpege=$provmesu; $provmesu=""; //début du traitement de la mesure if(substr($arpege,0,1)==" ") $arpege=substr($arpege,1,strlen($arpege)-1); $lon=strlen($arpege); $itest=0; for($k=1;$k<=4;$k++) $voixarpege[$k]=""; for($i=0;$i<$lon;$i++) { $l1=substr($arpege,$i,1); $l2=substr($arpege,$i,2); if($l1=="m" or $l1=="n" or $l1=="h" or $l1=="u" or $l1=="I" or $l1=="V" or $l2=="ch" or $l2=="de" or $l2=="pe" or $l2=="to") { $itest=1; $type=substr($arpege,$i,3); $deg=substr($arpege,$i+3,2); if(substr($deg,1,1)==" ") $deg=substr($deg,0,1); $i=$lon; $ntona=intval($arpege); if($ntona==0) $ntona=1; //echo "

type $type degré $deg ton $ntona

"; $m=modetona($type,$deg,$ntona); //afficher("test mode : ",$m); $arpege=basearpege($m); } } if($itest==0) $m=mesure($arpege); //afficher("arpège $arpege :",$m); $provarpege=$provarpege.$arpege; for($k=1;$k<=4;$k++) { $base[$k]=coderbasevoix($provarpege,$k); //echo "

arpège voix $k $base[$k]

"; $voixarpege[$k]=$base[$k]; } //fin du traitement de la mesure } else $provmesu=$provmesu.$l1mesu; } return $voixarpege; }; function voixaccord($accord) { $provbaseaccord="p "; $mesureaccord=$accord."|"; $l=strlen($mesureaccord); $provmesu=""; for($j=0;$j<$l;$j++) { $l1mesu=substr($mesureaccord,$j,1); if($l1mesu==":" or $l1mesu=="|") { $accord=$provmesu." "; $provmesu=""; //début du traitement de la mesure if(substr($accord,0,1)==" ") $accord=substr($accord,1,strlen($accord)-1); $ideb=intval($accord); if($ideb>0) { $ntona=$ideb; if($ideb>9) $accord=substr($accord,2,strlen($accord)-2); else $accord=substr($accord,1,strlen($accord)-1); } else $ntona="1"; $lon=strlen($accord); $itest=0; for($k=1;$k<=4;$k++) $voixaccord[$k]=""; for($i=0;$i<$lon;$i++) { $l1=substr($accord,$i,1); $l1=strtolower($l1); $l3=substr($accord,$i,3); if($l3=="dem" or $l3=="ton" or $l3=="pen" or $l3=="maj" or $l3=="har" or $l3=="mel") { $itest=1; $i=$lon; $type=substr($accord,0,3); $deg=substr($accord,3,1); $nint=substr($accord,4,1); if(intval($nint)==0) { $deg=substr($accord,3,2); $nint=substr($accord,5,1); if(intval($nint)==0) { $deg=substr($accord,3,3); $nint=substr($accord,6,1); } } echo "

ton $ntona type $type degré $deg nombre d'intervalle $nint

"; $a=accordtypedeg($ntona,$type,$deg,$nint); } elseif($l1=="s" or $l1=="t" or $l1=="q" or $l1=="v" or $l1=="x") { $itest=1; $i=$lon; $accord=$ntona.$accord; $accord=mouveaccord($accord); $a=accordinter($accord); } elseif($l1=="c" or $l1=="d" or $l1=="e" or $l1=="f" or $l1=="g" or $l1=="a") { $itest=1; $i=$lon; $a=accordgrille($accord); //afficher("accord grille :",$a); } } if($itest==0) { $ma=mesure($accord); $coderma=coderarpege($accord); //echo "

coder arpège $coderma

"; $a=accordarpege($ma); } else $ma=arpegeaccord($a); //afficher("accord $accord :",$a); $baseaccord=baseaccord($a); $provbaseaccord=$provbaseaccord.$baseaccord; //echo "

provbaseaccord $provbaseaccord

"; for($k=1;$k<=4;$k++) { $base[$k]=coderbasevoix($provbaseaccord,$k); $base[$k]=$base[$k]."p "; $base[$k]=normaliser($base[$k]); //echo "

accord voix$k $base[$k]

"; $voixaccord[$k]=$base[$k]; } //fin du traitement de la mesure } else $provmesu=$provmesu.$l1mesu; } return $voixaccord; }; function voixmode($tabla) { $lon=strlen($tabla); $k=0; $itest=0; $inote=0; $prov=""; for($j=1;$j<=4;$j++) $provarp[$j]=""; for($i=0;$i<$lon;$i++) { $l1=substr($tabla,$i,1); if($l1=="[") { $itest=1; $k=0; } elseif($l1==" " or $l1=="]" and $prov != "") { if(strlen($prov) <4) { $inote=1; $note=$prov." "; } else { $inote=0; $tona=intval($prov); if($tona==0) { $type=substr($prov,0,3); $deg=substr($prov,3,strlen($prov)-3); $tona=1; } else { $type=substr($prov,strlen($tona),3); $deg=substr($prov,strlen($tona)+3,strlen($prov)-strlen($tona)-3); } $deb=substr($type,0,1); } $prov=""; if($inote==1 or $deb=="m" or $deb=="h" or $deb=="t" or $deb=="d" or $deb=="p" or $deb=="c") { $k++; if($inote==1) $v=mesure($note); else $v=modetona($type,$deg,$tona); if($itest==0) { if($inote==1) $arpege[1]=$v[1]." "; else $arpege[1]=basearpege($v); for($k=2;$k<=4;$k++) { $arpege[$k]=""; for($j=1;$j<=$v[0];$j++) $arpege[$k]=$arpege[$k]."p "; } for($l=1;$l<=4;$l++) $provarp[$l]=$provarp[$l].$arpege[$l]; $k=0; } else { for($j=1;$j<=$v[0];$j++) $arpege[$k]=$arpege[$k].$v[$j]." "; } ; } if($l1=="]") { $itest=0; for($j=1;$j<=4;$j++) { if($arpege[$j]=="") for($l=1;$l<=$v[0];$l++) $arpege[$j]=$arpege[$j]."p "; } for($j=1;$j<=4;$j++) $provarp[$j]=$provarp[$j].$arpege[$j]; } } else $prov=$prov.$l1; } for($k=1;$k<=4;$k++) { $voixtabla[$k]=$voixarpege[$k].$provarp[$k]; } return $voixtabla; }; function voixrythme($baserythme) { for($k=1;$k<=4;$k++) $voixrythme[$k]="1 "; $baserythme=$baserythme."v:"; $lon=strlen($baserythme); $prov=""; $itest=0; for($i=0;$i<$lon;$i++) { $l1=substr($baserythme,$i,1); $l2=substr($baserythme,$i,2); if($l2=="v:") { if($itest==1) $voixrythme[$k]=$prov; $k=substr($baserythme,$i+2,1); if($k>0 and $k<=4) { $itest=1; $prov=""; } $i=$i+2; } elseif($l2=="i:" or $l2=="a:" or $l2=="r:") { $i=$i+2; $n=intval(substr($baserythme,$i,2)); if($n>9) $i=$i+2; else $i++; } else $prov=$prov.$l1; } if($itest==0) $voixrythme[1]=$prov; return $voixrythme; }; function voixinstru($baserythme) { for($k=1;$k<=4;$k++) $voixinstru[$k]=1; $lon=strlen($baserythme); $prov=""; for($i=0;$i<$lon;$i++) { $l2=substr($baserythme,$i,2); if($l2=="v:") { $k=substr($baserythme,$i+2,1); if($k>0 and $k<=4) { $i=$i+3; if(substr($baserythme,$i,1)=="i") $voixinstru[$k]=intval(substr($baserythme,$i+2,2)); if(substr($baserythme,$i+2,1)=="0") $voixinstru[$k]="0"; elseif(substr($baserythme,$i+2,1)=="a") $voixinstru[$k]="a"; } } elseif($l2=="i:") $voixinstru[1]=intval(substr($baserythme,$i+2,2)); } for($k=1;$k<=4;$k++) { if($voixinstru[$k]=="a") ; elseif($voixinstru[$k] != "0" and $voixinstru[$k] != 1 and $voixinstru[$k] != 2 and $voixinstru[$k] != 20 and $voixinstru[$k] != 25 and $voixinstru[$k] != 3 and $voixinstru[$k] != 4 and $voixinstru[$k] != 5 and $voixinstru[$k] != 41 and $voixinstru[$k] != 50 and $voixinstru[$k] != 68 and $voixinstru[$k] != 72 and $voixinstru[$k] != 91) { echo "

l'instrument $voixinstru[$k] n'existe pas

"; echo "

Les instruments disponibles sont 0 pour la batterie 1 3 20 25 41 50 68 72 et 91

"; $voixinstru[$k]=1; } } return $voixinstru; }; function voixalea($baserythme) { $lon=strlen($baserythme); $prov=""; for($k=1;$k<=4;$k++) $voixalea[$k]=0; $k=""; for($i=0;$i<$lon;$i++) { $l2=substr($baserythme,$i,2); if($l2=="v:") $k=substr($baserythme,$i+2,1); elseif($l2=="a:" and $k != "") $voixalea[$k]=intval(substr($baserythme,$i+2,2)); elseif($l2=="a:") $voixalea[1]=intval(substr($baserythme,$i+2,2)); } return $voixalea; }; function voixalearyt($baserythme) { $lon=strlen($baserythme); $prov=""; for($k=1;$k<=4;$k++) $voixalearyt[$k]=0; $k=""; for($i=0;$i<$lon;$i++) { $l2=substr($baserythme,$i,2); if($l2=="v:") $k=substr($baserythme,$i+2,1); elseif($l2=="r:" and $k != "") $voixalearyt[$k]=intval(substr($baserythme,$i+2,2)); elseif($l2=="r:") $voixalearyt[1]=intval(substr($baserythme,$i+2,2)); } return $voixalearyt; }; function tempo($baserythme) { $tempo=60; $lon=strlen($baserythme); for($i=0;$i<$lon;$i++) { $l2=substr($baserythme,$i,2); if($l2=="t:") { $tempo=intval(substr($baserythme,$i+2,3)); $i=$lon; } } return $tempo; }; function lirenuance($audio,$me,$r,$tempo,$deb,$fin,$instru,$voix) { //echo "

test lireme instru $instru deb $deb fin $fin

"; //afficher("test rythme :",$r); for($i=1;$i<=$me[0];$i++) { if($me[$i]=="z" or $me[$i]=="p" or $me[$i]=="") $me[$i]=0; elseif($me[$i]>48) $me[$i]=$me[$i]-12; if($me[$i]>36) $me[$i]=$me[$i]-12; if($me[$i]>24) $me[$i]=$me[$i]-12; } if($r[0]<$me[0]) for($j=$r[0];$j<=$me[0];$j++) $r[$j]="1"; $r[0]=$me[0]; if(intval($r[1])==0) $r[1]=1; $nuance[0]=""; for($i=1;$i<=$r[0];$i++) { $lon=strlen($r[$i]); for($k=0;$k<$lon;$k++) { $l1=substr($r[$i],$k,1); if($l1=="f" or $l1=="n" or $l1=="p" or $l1=="_" or $l1=="<" or $l1=="=" or $l1==">" or $l1=="i") { $nuance[$i]=substr($r[$i],$k,$lon-$k); $r[$i]=substr($r[$i],0,$k); $k=$lon; } else $nuance[$i]=$nuance[$i-1]; } //echo "

test nuance $r[$i] $nuance[$i]

"; } $j=0; for($i=1;$i<=$r[0];$i++) { $j++; //echo "

test rythme $r[$i]

"; $l1=substr($r[$i],0,1); if($l1=="[") { $r[$j]=substr($r[$i],1,strlen($r[$i])-1); $me[$j]=$me[$i]; $i=$i+1; $a2[$j]=$me[$i]; $a3[$j]="0"; $a4[$j]="0"; $ls=substr($r[$i+1],0,1); if($ls=="]") $r[$i+1]=substr($r[$i+1],1,strlen($r[$i+1])-1); else { $i=$i+1; $a3[$j]=$me[$i]; $ls=substr($r[$i+1],0,1); if($ls=="]") $r[$i+1]=substr($r[$i+1],1,strlen($r[$i+1])-1); else { $i=$i+1; $a4[$j]=$me[$i]; } } } else { $l1=substr($r[$i],0,1); if($l1=="]") $r[$j]=substr($r[$i],1,strlen($r[$i])-1); else $r[$j]=$r[$i]; $me[$j]=$me[$i]; $a2[$j]="0"; $a3[$j]="0"; $a4[$j]="0"; } //echo "

test $j $r[$j] $me[$j] $a2[$j] $a3[$j] $a4[$j]

"; } $r[0]=$j; $me[0]=$j; $a2[0]=$j; $a3[0]=$j; $a4[0]=$j; if($tempo>=30 and $tempo<=240) $dur=600000/$tempo; else $dur=15000; $durinit=$dur; if($fin>$me[0]) $fin=$me[0]; if(intval($instru)<=0 and $instru != "0") $instru=1; if(intval($voix)==0) $voix="1"; $prov=$audio.$voix.".mp3"; $accord="accord".$voix.".mp3"; if($r[1]=="=") $r[1]="1"; for($i=1;$i<=$r[0];$i++) { if($r[$i]=="=") $r[$i]=$r[$i-1]; elseif($r[$i]=="/") $r[$i]="1/2"; elseif($r[$i]=="//") $r[$i]="1/4"; } for($i=$deb;$i<=$fin;$i++) { $l1=substr($r[$i],0,1); if($l1=="." or $l1=="-" or $l1=="[" or $l1=="(") $r[$i]=substr($r[$i],1,strlen($r[$i])-1); if(intval($r[$i])>0) $finfic[$i]=$dur*intval($r[$i]); else $finfic[$i]=$dur; $ls=intval(substr($r[$i],2,2)); if($ls>0) { $finfic[$i]=$finfic[$i]/intval($ls); $finfic[$i]=intval($finfic[$i]); } if(intval($finfic[$i])==0) $finfic[$i]=$dur; //echo "

durée $finfic[$i]

"; } if($me[$deb]=="") $me[$deb]=0; $fic[$deb]="../inter/$instru/$me[$deb].mp3"; //echo "

fichier $deb $fic[$deb]

"; if($finfic[$deb]<2) $finfic[$deb]=20000; $vit=0; $cont=copier($fic[$deb],0,$finfic[$deb]); ecrire($prov,$cont[$deb]); if($fin>$deb) for($i=$deb+1;$i<=$fin;$i++) { if($me[$i]=="" or $me[$i]=="p") $me[$i]=0; $n=substr($nuance[$i],0,1); if($n=="_") { $me[$i]=$me[$i]."_"; $nuance[$i]=substr($nuance[$i],1,strlen($nuance[$i])-1); $n=substr($nuance[$i],0,1); } if($n=="f" or $n=="n" or $n=="p") { if($n=="n" or $n=="p") $n=""; if($me[$i] != 0) $me[$i]=$me[$i].$n; $nuance[$i]=substr($nuance[$i],1,strlen($nuance[$i])-1); $n=substr($nuance[$i],0,1); } if($n=="<") { $rap=intval(substr($nuance[$i],1,3)); if($rap==0) $rap=500; $vit=$vit+$rap; $finfic[$i]=$finfic[$i]+$vit; } elseif($n==">") { $rap=intval(substr($nuance[$i],1,3)); if($rap==0) $rap=500; $vit=$vit-$rap; $finfic[$i]=$finfic[$i]+$vit; if($finfic[$i]<5000) $finfic[$i]=5000; } elseif($n=="=") $vit=0; if($n=="i") $instru=intval(substr($nuance[$i],1,strlen($nuance[$i])-1)); $fic[$i+1]="../inter/$instru/$me[$i].mp3"; //echo "

fichier : $fic[$i]

"; $cont1=copier($fic[$i+1],0,$finfic[$i]); ajouter($prov,$cont,$cont1); $cont=copier($prov,0,lonfile($prov)); } }; function lireme($audio,$me,$r,$tempo,$deb,$fin,$instru,$voix) { //echo "

test lireme instru $instru deb $deb fin $fin

"; for($i=1;$i<=$me[0];$i++) { if($me[$i]=="z" or $me[$i]=="p" or $me[$i]=="") $me[$i]=0; elseif($me[$i]>48) $me[$i]=$me[$i]-12; if($me[$i]>36) $me[$i]=$me[$i]-12; if($me[$i]>24) $me[$i]=$me[$i]-12; } if($r[0]<$me[0]) for($j=$r[0];$j<=$me[0];$j++) $r[$j]="1"; $r[0]=$me[0]; if(intval($r[1])==0) $r[1]=1; $j=0; for($i=1;$i<=$r[0];$i++) { $j++; //echo "

test rythme $r[$i]

"; $l1=substr($r[$i],0,1); if($l1=="[") { $r[$j]=substr($r[$i],1,strlen($r[$i])-1); $me[$j]=$me[$i]; $i=$i+1; $a2[$j]=$me[$i]; $a3[$j]="0"; $a4[$j]="0"; $ls=substr($r[$i+1],0,1); if($ls=="]") $r[$i+1]=substr($r[$i+1],1,strlen($r[$i+1])-1); else { $i=$i+1; $a3[$j]=$me[$i]; $ls=substr($r[$i+1],0,1); if($ls=="]") $r[$i+1]=substr($r[$i+1],1,strlen($r[$i+1])-1); else { $i=$i+1; $a4[$j]=$me[$i]; } } } else { $l1=substr($r[$i],0,1); if($l1=="]") $r[$j]=substr($r[$i],1,strlen($r[$i])-1); else $r[$j]=$r[$i]; $me[$j]=$me[$i]; $a2[$j]="0"; $a3[$j]="0"; $a4[$j]="0"; } //echo "

test $j $r[$j] $me[$j] $a2[$j] $a3[$j] $a4[$j]

"; } $r[0]=$j; $me[0]=$j; $a2[0]=$j; $a3[0]=$j; $a4[0]=$j; if($tempo>=60 and $tempo<=240) $dur=600000/$tempo; else $dur=10000; if($fin>$me[0]) $fin=$me[0]; if(intval($instru)<=0 and $instru != "0") $instru=1; if(intval($voix)==0) $voix="1"; $prov=$audio.$voix.".mp3"; $accord="accord".$voix.".mp3"; if($r[1]=="=") $r[1]="1"; for($i=1;$i<=$r[0];$i++) { if($r[$i]=="=") $r[$i]=$r[$i-1]; elseif($r[$i]=="/") $r[$i]="1/2"; elseif($r[$i]=="//") $r[$i]="1/4"; } for($i=$deb;$i<=$fin;$i++) { $l1=substr($r[$i],0,1); if($l1=="." or $l1=="-" or $l1=="[" or $l1=="(") $r[$i]=substr($r[$i],1,strlen($r[$i])-1); if(intval($r[$i])>0) $finfic[$i]=$dur*intval($r[$i]); else $finfic[$i]=$dur; $ls=intval(substr($r[$i],2,2)); if($ls>0) { $finfic[$i]=$finfic[$i]/intval($ls); $finfic[$i]=intval($finfic[$i]); } if(intval($finfic[$i])==0) $finfic[$i]=$dur; //echo "

durée $finfic[$i]

"; } if($me[$deb]=="") $me[$deb]=0; $fic[$deb]="../inter/$instru/$me[$deb].mp3"; //echo "

fichier $deb $fic[$deb]

"; if($finfic[$deb]<2) $finfic[$deb]=20000; $cont=copier($fic[$deb],0,$finfic[$deb]); ecrire($prov,$cont[$deb]); if($fin>$deb) for($i=$deb+1;$i<=$fin;$i++) { if($me[$i]=="" or $me[$i]=="p") $me[$i]=0; $fic[$i+1]="../inter/$instru/$me[$i].mp3"; //echo "

fichier : $fic[$i]

"; $cont1=copier($fic[$i+1],0,$finfic[$i]); ajouter($prov,$cont,$cont1); $cont=copier($prov,0,lonfile($prov)); } $accord="accord2.mp3"; $fic[$deb]="../inter/$instru/$a2[$deb].mp3"; //echo "

fichier $deb $fic[$deb]

"; $cont=copier($fic[$deb],0,$finfic[$deb]); ecrire($accord,$cont[$deb]); if($fin>$deb) for($i=$deb;$i<$fin;$i++) { $fic[$i+1]="../inter/$instru/$a2[$i].mp3"; //echo "

fichier : $fic[$i]

"; $cont1=copier($fic[$i+1],0,$finfic[$i]); ajouter($accord,$cont,$cont1); $cont=copier($accord,0,lonfile($prov)); } $accord="accord3.mp3"; $fic[$deb]="../inter/$instru/$a3[$deb].mp3"; //echo "

fichier $deb $fic[$deb]

"; $cont=copier($fic[$deb],0,$finfic[$deb]); ecrire($accord,$cont[$deb]); if($fin>$deb) for($i=$deb;$i<$fin;$i++) { $fic[$i+1]="../inter/$instru/$a3[$i].mp3"; //echo "

fichier : $fic[$i]

"; $cont1=copier($fic[$i+1],0,$finfic[$i]); ajouter($accord,$cont,$cont1); $cont=copier($accord,0,lonfile($prov)); } $accord="accord4.mp3"; $fic[$deb]="../inter/$instru/$a4[$deb].mp3"; //echo "

fichier $deb $fic[$deb]

"; $cont=copier($fic[$deb],0,$finfic[$deb]); ecrire($accord,$cont[$deb]); if($fin>$deb) for($i=$deb;$i<=$fin;$i++) { $fic[$i+1]="../inter/$instru/$a4[$i].mp3"; //echo "

fichier : $fic[$i]

"; $cont1=copier($fic[$i+1],0,$finfic[$i]); ajouter($accord,$cont,$cont1); $cont=copier($accord,0,lonfile($prov)); } }; function ecrire($fichier,$content) { $ficfic=fopen($fichier,"w"); if ( !($ficfic)) { echo "

Impossible d’ouvrir le fichier $fichier en écriture

"; fclose($ficfic); } else { fwrite($ficfic,$content); fclose($ficfic); } }; function ajouter($fichier,$cont1,$cont2) { $ficfic=fopen($fichier,"w"); if ( !($ficfic)) { echo "

Impossible d’ouvrir le fichier $fichier en écriture

"; fclose($ficfic); } else { fwrite($ficfic,$cont1); fwrite($ficfic,$cont2); fclose($ficfic); } }; function lonfile($fichier) { $content=""; $fic=@fopen($fichier,"rb"); if ( !($fic)) { //echo "

Impossible d’ouvrir le fichier $fichier en lecture

"; @fclose($fic); return ""; } $lonfile=filesize($fichier); fclose($fic); return $lonfile; }; function lirepage($deb,$fin,$fic) { $lon=filesize($fic); $unit=filesize("prov1.mp3"); $deb=$deb*$unit; if($fin != "") $fin=$fin*$unit; else $fin=$lon; $deb=intval($deb); $fin=intval($fin); $lon=$fin-$deb; $cont=copier($fic,$deb,$lon); ecrire("provficfic.mp3",$cont); }; function copier($fichier,$deb,$lon) { $content=""; $fic=@fopen($fichier,"rb"); if ( !($fic)) { //echo "

Impossible d’ouvrir le fichier $fichier en lecture

"; @fclose($fic); return ""; } $fin=$deb+$lon; $lonfile=filesize($fichier); //echo "

lonfile $lonfile

"; if($deb>$lonfile) { //echo "

le début pour copier doit être inférieur à la longueur $lonfile de $fichier

"; return ""; } if($fin>$lonfile) $lon=$lonfile-$deb; //echo "

couper depuis $deb longueur $lon

"; fseek($fic, $deb); $cont=fread($fic,$lon); if(strlen($cont) != "") $content=$content.$cont; else echo "

copie vide

"; fclose($fic); return $content; };