Et son source :
<?php
$partoche=new Partoche;
$partoche->Noire("do");
$partoche->Blanche("re");
$partoche->Noire("mi","d");
$partoche->Noire("fa","d");
$partoche->Blanche("sol");
$partoche->Noire("la");
$partoche->Noire("si","d");
$partoche->Noire("do+");
$partoche->Noire("mi+");
$partoche->Noire("fa+","d");
$partoche->Noire("do","b");
$partoche->Noire("mi+","b");
$partoche->Noire("fa+");
$partoche->Noire("do","d");
$partoche->Noire("mi+");
$partoche->Noire("fa+");
$partoche->Noire("do");
$partoche->Noire("mi+","d");
$partoche->Affiche();
?>
Pour ceux que ça intéresse, je vous balancerai bientôt une classe + complète... en attendant, voilà le source :
<?
class Partoche {
public $decalage;
public $mesures;
public $cle;
public $portee;
public $image;
public $sol;
public $diese;
public $bemol;
public $noire;
public $noirep;
public $blanche;
public $curseur;
public $gris;
function __construct($cle="sol") {
$this->cle = $cle;
$this->sol = imagecreatefrompng("./images/cle_sol.png");
$this->diese = imagecreatefrompng("./images/diese.png");
$this->bemol = imagecreatefrompng("./images/bemol.png");
$this->noire = imagecreatefrompng("./images/noire.png");
$this->noirep = imagecreatefrompng("./images/noire+.png");
$this->blanche = imagecreatefrompng("./images/blanche.png");
$this->blanchep = imagecreatefrompng("./images/blanche+.png");
$this->curseur = 0;
$this->decalage = 32;
$this->mesures = 5;
$this->longueur = ($this->decalage*3)+($this->mesures*(4*$this->decalage));
$this->image = imagecreatetruecolor($this->longueur,70);
$this->portee = imagecreatefrompng("./images/portee.png");
$dims['portee']=getimagesize("./images/portee.png");
imagecopyresized($this->image,$this->portee,0,0,0,0,$this->longueur,70,$dims['portee'][0],$dims['portee'][1]);
if($cle=="sol") {
$this->_Sol();
}
$this->gris=imagecolorallocate($this->image,102,102,102);
$this->_Mesures();
}
function Noire($note="mi",$accent="") {
$note=$this->Note($note);
if($note['envers']==true) {
imagecopy($this->image,$this->noirep,$this->curseur,$note['hauteur'],0,0,9,32);
} else {
imagecopy($this->image,$this->noire,$this->curseur,$note['hauteur'],0,0,9,32);
}
if($accent!="") { $this->_Accent($accent,$note['hauteur'],$note['envers']); }
$this->curseur+=$this->decalage;
}
function Blanche($note="mi") {
$note=$this->Note($note);
if($note['envers']==true) {
imagecopy($this->image,$this->blanchep,$this->curseur,$note['hauteur'],0,0,9,31);
} else {
imagecopy($this->image,$this->blanche,$this->curseur,$note['hauteur'],0,0,9,31);
}
if($accent!="") { $this->_Accent($accent,$note['hauteur'],$note['envers']); }
$this->curseur+=($this->decalage*2);
}
function Note($note) {
switch($note) {
case "do" : $retour['hauteur']=26; $retour['envers']=false; break;
case "re" : $retour['hauteur']=22; $retour['envers']=false; break;
case "mi" : $retour['hauteur']=18; $retour['envers']=false; break;
case "fa" : $retour['hauteur']=14; $retour['envers']=false; break;
case "sol": $retour['hauteur']=10; $retour['envers']=false; break;
case "la" : $retour['hauteur']=6; $retour['envers']=false; break;
case "si" : $retour['hauteur']=27; $retour['envers']=true; break;
case "do+" : $retour['hauteur']=23; $retour['envers']=true; break;
case "re+" : $retour['hauteur']=19; $retour['envers']=true; break;
case "mi+" : $retour['hauteur']=15; $retour['envers']=true; break;
case "fa+" : $retour['hauteur']=11; $retour['envers']=true; break;
default : $retour['hauteur']=18; $retour['envers']=false;
}
return $retour;
}
function _Sol() {
imagecopy($this->image,$this->sol,$this->curseur,1,0,0,25,59);
$this->curseur+=($this->decalage*3);
}
function _Mesures() {
imageline($this->image,0,14,0,46,$this->gris);
for($i=1 ; $i<=($this->mesures+1) ; $i++) {
imageline($this->image,(($this->decalage*3)-($this->decalage/2)+(($i-1)*$this->decalage*4))+3,14,(($this->decalage*3)-($this->decalage/2)+(($i-1)*$this->decalage*4))+3,46,$this->gris);
}
imageline($this->image,$this->longueur-1,14,$this->longueur-1,46,$this->gris);
}
function _Accent($accent,$hauteur,$envers) {
if($accent=="d") {
if($envers==false) {
imagecopy($this->image,$this->diese,$this->curseur-8,$hauteur+18,0,0,7,21);
} else {
imagecopy($this->image,$this->diese,$this->curseur-8,$hauteur-8,0,0,7,21);
}
}
if($accent=="b") {
if($envers==false) {
imagecopy($this->image,$this->bemol,$this->curseur-8,$hauteur+16,0,0,7,17);
} else {
imagecopy($this->image,$this->bemol,$this->curseur-8,$hauteur-9,0,0,7,17);
}
}
}
function Affiche() {
header("Content-type: image/png");
imagepng($this->image);
}
}
?>
Si des musiciens sont interressées, envoyez vos propositions/suggestions.
A venir :
- clé de fa (ahahah)
- skinnabilisation de la chose
- gestion des pédales
- etc...
Et je me remets au solfège... ah oui... aussi : un système de fichier "ISO-PERSO"
Tcho !

)
), et la force du truc est que ça te permet aussi d'ignorer les éléments que tu ne veux pas prendre en compte
) ou à mes débuts d'orchestre, ou même plus tard sur des morceaux pour lesquels j'avais un peu de mal, un des premiers trucs que je faisais, c'était marquer les temps, pour savoir où retomber)
