1

Pour ceux que ça intéresse, je suis en train de réaliser une classe PHP pour créer des partoches... j'en susi qu'au début... regardez le résultat :
resultat.png
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 !
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

2

<?      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);           }      } ?>

Elle était pas passée
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

3

cool top
ce qui pourrait etre pas mal c'est aussi de gerer les tablatures nan?
A l'origine de plusieurs arcticles dans le magazine Hacker'z Voice, devenu à ce jour The Hackademy Journal, me voici, plus présent que jamais auparavant près à se mettre au service de notre belle et chère communauté.

4

prévoi aussi le type de clé (sol, fa, ut1->5) et les partoches à double clef (pour le piano par expple, vu que c ce qui m'interesserai le plus smile )
Ancien pseudo : lolo

5

ça arrive...

La position des dièses est-elle bonne pour les notes ? J'ai oublié mon solfège.
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

6

y333 :
cool top
ce qui pourrait etre pas mal c'est aussi de gerer les tablatures nan?

???
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

7

pour voir une partition:
http://www.nedgerhart.com/pdf/CandlesInTheMoonlight.pdf

et un tablature: (partitions pour guitares)
http://www.guitar-pro.com/eng/Screenshots.php
A l'origine de plusieurs arcticles dans le magazine Hacker'z Voice, devenu à ce jour The Hackademy Journal, me voici, plus présent que jamais auparavant près à se mettre au service de notre belle et chère communauté.

8

Ca peut le faire pour les tablatures si je comprends le principe
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

9

the principe: les lignes correspondent au manche de la guitare vue de dessus
et les chiffres le numero de la case sur lakelle on doit appuyer (et gratter aussi)
A l'origine de plusieurs arcticles dans le magazine Hacker'z Voice, devenu à ce jour The Hackademy Journal, me voici, plus présent que jamais auparavant près à se mettre au service de notre belle et chère communauté.

10

tjrs pour les patitions :

le nombre de dièses au départ, je te rappel l'ordre :

fa, do, sol, ré, la, mi, si

ou de bémol (c le mem ordre mais à l'envers)

et de meme, les bécard (pour annuler un diése de départ)
Ancien pseudo : lolo

11

C'est super comme principe, mais tu gagnerais vachement à plutôt faire un parseur MusicXML vu que c'est normalisé (bon, ok, c'est aussi plus complexe hehe), et la force du truc est que ça te permet aussi d'ignorer les éléments que tu ne veux pas prendre en compte smile.
avatar

12

http://www.recordare.com/xml.html pour plus d'infos (c'est vraiment un truc qui a de l'avenir, vu que ça permet un échange entre tous les logiciels d'édition de partition sans prise de tête).
(mais sinon, je répète que c'est vraiment une idée qu'elle est très bonne smile)
avatar

13

lolo :
tjrs pour les patitions :

le nombre de dièses au départ, je te rappel l'ordre :

fa, do, sol, ré, la, mi, si

ou de bémol (c le mem ordre mais à l'envers)

et de meme, les bécard (pour annuler un diése de départ)

AH ouiiii, c vré, merci pour TOUT... je reviens vers toi d'ici peu
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

14

n'hésite pas smile
Ancien pseudo : lolo

15

en passant, c'est pas un bécard mais un bécarre ^^
avatar

16

mici, je me l'avai jamais ecri autrement que par le symbole ^^ je me souvenais plus de la vrai écriture
Ancien pseudo : lolo

17

lolo :
et de meme, les bécard (pour annuler un diése de départ)

Ca annule aussi le bémol ? (ohh, ça va, ne me jettez pas les tomates) ?

Voici ce qui arrive :
- gestion de rythmiques à côté de la clé. Ex : 3/4, 2/3 (je connais plus le nom)
- clés de Fa/Ut
- rondes (après les noires et les blanche qd même)
- croches
- doubles croches
- triolets
- 4 croches (??? ça existe ??... bon, bah je sais pas moi)
- sauts de lignes auto (double si il y a une clé de fa... c mieux à 2 mains)
- gestion des pédales
- mezzo/forte/etc...

Que du bon
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

18

Ouaip, ça annule aussi les bémols
avatar

19

y a aussi les triples croches ^^, et le tempo, et le chgt de cléf au milieu (ca arrive) et le fait de décaler d'un octave en plus ou en moins (le 8-------------------------] c pa zoli en char, et g pa envi de faire un dessin)
Ancien pseudo : lolo

20

lolo :
y a aussi les triples croches ^^, et le tempo, et le chgt de cléf au milieu (ca arrive) et le fait de décaler d'un octave en plus ou en moins (le 8-------------------------] c pa zoli en char, et g pa envi de faire un dessin)


C'est vrai, si on passe plusieurs octaves en dessous, ça risque d'être problématique.

Triple croche <> Triolet ??? (tiens faudra penser au #triolay#)

Je reviens sur le topic si j'ai des questions
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

21

2 blanches = 1 ronde
2 noires = 1 blanches
2 croches = 1 noire
2 dbl croches = 1 croche
2 trilpe croches = 1 dbl croche

3 triolets = 1 noire (c les 3 croches liées avec en dessous une parenthèse à l'horizontal et un 3 en dessous)
Ancien pseudo : lolo

22

top
avatar
Slammeur (qu'on voit danser, le long des golfes clairs).
Mon blog qui parle de jeux-vidéo

23

je sais pas exactement où ça en est (j'ai regardé l'image du premier post, et lu en diagonale le reste), mais ça a l'air intéressant smile

un petit truc qui pourrait être utilise, notament pour ceux qui écrivent des partitions aux rythmes complexes en voulant que les débuttants puissent le slire plus facile, c de mettre des... marques... des petits trais verticaux quoi... en bas de la partition sur chaque temps (en option)
genre sous une noire, tu as un tick, sous 4 doubles croches, tu as un tick sous la première, sous une ronde, tu as 4 ticks répartis sur la longueur de la ronde, ainsi de suite
(enfin, qd je faisais du solfège (ça date, j'ai oublié pas mal sad ) 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)

aussi, juste par curiosité, tu as géré les accords ?
(genre pour ce qui est piano qui sait jouer 36 notes à la fois)
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

24

36 .... meme avec les pieds ca fait 20 notes maxi (et c pa zoli un accord avec les pieds.... c ce qui s'appelle jouer comme un.. pied !)

dehors
Ancien pseudo : lolo

25

Tsss, et les organistes hein ? on les oublie un peu vite... puis un doigt peut faire pusieurs notes (par exemple il est fréquent de prendre deux notes avec le pouce).
avatar

26

^^ c sur
Ancien pseudo : lolo

27

pi moi je joue avec des verres en crystal ... dehors gol couic triso
A l'origine de plusieurs arcticles dans le magazine Hacker'z Voice, devenu à ce jour The Hackademy Journal, me voici, plus présent que jamais auparavant près à se mettre au service de notre belle et chère communauté.

28

ben koi ? c possible avec des bon verres (g déja testé avec 3 notes différentes,mais c chiant smile)
Ancien pseudo : lolo

29

Ah, je pensais qu'il parlait de glassharmonica, je suis déçu :[
avatar

30

Hmmm sinon, c'est quoi exactement l'apport de recréer depuis 0, plutôt que de réutiliser l'existant. Je pense par exemple à lilypond ?
Parce que pour réimplémenter toutes les fonctions, y'a du boulot.
Genre pour arriver à ce genre de résultat : http://lilypond.org/web/images/sondag-morgen.png ou http://lilypond.org/web/images/les-nereides.png

Bonne chance en tous cas happy