
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 !