|
| From: | P.E. Brame |
| Subject: | outil de génération |
| Date: | Tue, 14 Nov 2006 19:03:38 +0100 |
| User-agent: | Thunderbird 1.5.0.7 (X11/20060922) |
|
Bonjour, Le 5 novembre dernier j'avais envoyé ce message, dont les pièces jointes avaient été refusées. J'ai appris que le serveur était malade... Est-il guéri maintenant ? Note : le wiki refuse toujours les "uploads" (cf lien de John) Je les ai envoyé à Gauvain, (address@hidden) pour le diffuser sur son blog sur lilypond, adresse dans le thread de la liste Merci de votre accueil P.E. Brame ********************************************************************************* Bonjour, Je reprends clavier et écran. Ci-joint les scripts refusés ? par l'outil de gestion des messages de la liste. Le fichier score_lily.py contient le point d'entrée (main) Bonne journée P.E. Brame address@hidden a écrit : Envoyez vos messages pour la liste lilypond-user-fr à address@hidden Pour vous (dés)abonner par le web, consultez http://lists.gnu.org/mailman/listinfo/lilypond-user-fr ou, par email, envoyez un message avec 'help' dans le corps ou dans le sujet à address@hidden Vous pouvez contacter l'administrateur de la liste à l'adresse address@hidden Si vous répondez, n'oubliez pas de changer l'objet du message afin qu'il soit plus spécifique que "Re: Contenu du digest de lilypond-user-fr..." Thèmes du jour : 1. Re: outil de génération (John Mandereau) 2. Re: outil de génération (André Hetzel) 3. Re: outil de génération (Pierre Couderc) 4. Re: outil de génération (P.E. Brame) ---------------------------------------------------------------------- Message: 1 Date: Sat, 04 Nov 2006 22:14:21 +0100 From: John Mandereau <address@hidden> Subject: Re: outil de génération To: address@hidden Cc: address@hidden Message-ID: <address@hidden> Content-Type: text/plain; charset=utf-8 Le samedi 04 novembre 2006 à 11:30 +0100, P.E. Brame a écrit : |
#!/usr/bin/python
# -*- coding: utf8 -*-
import wx
##########################################################
##
## traitement des score
##
##########################################################
class fen_score(wx.Frame):
def __init__ ( self, titre):
self. d_score = {} # contient les infos du bloc
score
self.l_port = [] # liste des dicos du
bloc Staff
self.l_score = [] # liste des dicos score
à retourner
x = 0 # placement des cellules sur la grille
y = 0
wx.Frame.__init__(self, None, wx.ID_ANY, title = titre, pos =
(300,300) ) # création
grille = wx.GridBagSizer() # création de la
grille type tableur : accès direct aux cellules
self.t_nom = wx.TextCtrl(self, wx.ID_ANY, 'score' )
# champ de saisie
e_nom = wx.StaticText(self, wx.ID_ANY, "nom " ) # etiquette
associée
self.t_type = wx.TextCtrl(self, wx.ID_ANY, "ChoirStaff")
e_type = wx.StaticText(self, wx.ID_ANY, "type : " )
self.t_tempo = wx.TextCtrl(self, wx.ID_ANY, '4/4' )
e_tempo = wx.StaticText(self, wx.ID_ANY, "tempo" ) #
etiquette associée
self.t_armature = wx.TextCtrl(self, wx.ID_ANY, "do")
e_armature = wx.StaticText(self, wx.ID_ANY, "tonalité (majeur)
: " )
self.t_vitesse = wx.TextCtrl(self, wx.ID_ANY, '4 = 80' )
e_vitesse = wx.StaticText(self, wx.ID_ANY, "vitesse" ) #
etiquette associée
b_score_ok = wx.Button(self, wx.ID_ANY , "OK")
b_portee = wx.Button(self, wx.ID_ANY , "Ajout Portée")
b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")
self.Bind( wx.EVT_BUTTON, self.b_score_ok_clic, b_score_ok)
self.Bind( wx.EVT_BUTTON, self.b_portee_clic, b_portee)
self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
grille.Add(e_nom, (x,y), (1,1), wx.EXPAND )
grille.Add (self.t_nom, (x,y+1) , (1,1) , wx.EXPAND ) # ajout
des champs : objet, où (L, C), extension (nb L, nb C), formatage
x += 1
grille.Add(e_type, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_type, (x,y+1), (1,1), wx.EXPAND )
x += 1
grille.Add(e_tempo, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_tempo, (x,y+1), (1,1), wx.EXPAND )
x += 1
grille.Add(e_vitesse, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_vitesse, (x,y+1), (1,1), wx.EXPAND )
x += 1
grille.Add(e_armature, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_armature, (x,y+1), (1,1), wx.EXPAND )
x += 2
grille.Add(b_portee, (x, 0), (1, 1))
grille.Add(b_fermer, (x, 1), (1, 1))
grille.Add(b_score_ok, (x, 2), (1, 1))
grille.AddGrowableCol(1)
self.SetSizerAndFit(grille) # mise en place finale
self.Show(True) # et affichage
def b_score_ok_clic(self, ev_b_score_ok): # fin de
l'ajout d'un nouveau bloc score
self.d_score ['nom'] = self.t_nom.GetValue()
self.d_score ['type'] = self.t_type.GetValue()
self.d_score ['armature'] = self.t_armature.GetValue()
self.d_score ['tempo'] = self.t_tempo.GetValue()
self.d_score ['vitesse'] = self.t_vitesse.GetValue()
self.d_score ['liste_dp'] = self.l_port #
#################################"
self.Destroy()
## return self.l_score
# return True
def b_portee_clic(self, ev_b_portee):
self.fenetre_portee = fen_portee("Portée")
self.l_port.append ( self.fenetre_portee.lit_portee() )
return True
def b_fermer_clic(self, ev_b_fermer):
self.Destroy()
def lit_part(self ): # réellement ici ou dans le b_score_ok
?
return self.d_score
##########################################################
##
## traitement des portées (Staff)
##
##########################################################
class fen_portee(wx.Frame):
def __init__ ( self, titre):
self. d_port = {}
self.l_port = [] # liste des portées Ã
retourner
self.l_voix = [] # liste des voix associées Ã
la portée
x = 0 # placement des cellules sur la grille
y = 0
wx.Frame.__init__(self, None, wx.ID_ANY, title = titre, pos = (
250, 250 ) ) # création
grille = wx.GridBagSizer() # création de la
grille type tableur : accès direct aux cellules
self.t_portee = wx.TextCtrl(self, wx.ID_ANY, 'Portée',
size=(150, 30) ) # champ de saisie
e_portee = wx.StaticText(self, wx.ID_ANY, "nom " ) #
etiquette associée
self.t_clef = wx.TextCtrl(self, wx.ID_ANY, "violin")
e_clef = wx.StaticText(self, wx.ID_ANY, "Clef" )
self.t_instrum = wx.TextCtrl(self, wx.ID_ANY, "violon" )
e_instrum = wx.StaticText(self, wx.ID_ANY, "Instrument : " )
self.t_instr = wx.TextCtrl(self, wx.ID_ANY, "S")
e_instr = wx.StaticText(self, wx.ID_ANY, "Instr : " )
self.t_instr_midi = wx.TextCtrl(self, wx.ID_ANY, "midi")
e_instr_midi = wx.StaticText(self, wx.ID_ANY, "Instr midi : " )
b_portee_ok = wx.Button(self, wx.ID_ANY , "OK")
b_voix = wx.Button(self, wx.ID_ANY , "Ajout voix")
b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")
self.Bind( wx.EVT_BUTTON, self.b_portee_ok_clic, b_portee_ok)
self.Bind( wx.EVT_BUTTON, self.b_voix_clic, b_voix)
self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
grille.Add(e_portee, (x,y), (1,1), wx.EXPAND )
grille.Add (self.t_portee, (x,y+1) , (1,1) , wx.EXPAND )
# ajout des champs : objet, où (L, C), extension (nb L, nb C), formatage
x += 1
grille.Add(e_clef, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_clef, (x,y+1), (1,1), wx.EXPAND )
x += 1
grille.Add(e_instrum, (x,y), (1,1), wx.EXPAND )
grille.Add ( self.t_instrum, (x, y+1), (1, 1), wx.EXPAND )
x += 1
grille.Add(e_instr, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_instr, (x,y+1), (1,1), wx.EXPAND )
x += 1
grille.Add(e_instr_midi, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_instr_midi, (x,y+1), (1,1), wx.EXPAND )
x += 2
grille.Add(b_voix, (x, 0), (1, 1))
grille.Add(b_fermer, (x, 1), (1, 1))
grille.Add(b_portee_ok, (x, 2), (1, 1))
grille.AddGrowableCol(0)
self.SetSizerAndFit(grille) # mise en place finale
self.Show(True) # et affichage
def b_portee_ok_clic(self, ev_b_portee_ok): # fin de
l'ajout d'un nouveau bloc staff
self.d_port['portee'] = self.t_portee.GetValue()
self.d_port['clef'] = self.t_clef.GetValue()
self.d_port['instrument'] = self.t_instrum.GetValue()
self.d_port['instr'] = self.t_instr.GetValue()
self.d_port['instr_midi'] = self.t_instr_midi.GetValue()
self.d_port['liste_dv'] = self.l_voix # #
############################################
self.Destroy()
def b_voix_clic(self, ev_b_portee):
self.fenetre_voix = fen_voix("Voix")
self.l_voix.append( self.fenetre_voix.lit_voix() )
# ajout d'une liste de dictionnaire(s)de voix dans la liste
def b_fermer_clic(self, ev_b_fermer):
self.Destroy()
def lit_portee(self):
return self.d_port
##########################################################
##
## traitement des Voix
##
##########################################################
class fen_voix(wx.Frame):
def __init__ ( self, titre):
self. d_voix = {}
self.l_voix = []
x = 0 # placement des cellules sur la grille
y = 0
wx.Frame.__init__(self, None, wx.ID_ANY, title = titre, pos = (
300, 300 ) ) # création
grille = wx.GridBagSizer() # création de la
grille type tableur : accès direct aux cellules
self.t_voix = wx.TextCtrl(self, wx.ID_ANY, 'Voix' )
# champ de saisie
e_voix = wx.StaticText(self, wx.ID_ANY, "nom :" ) #
etiquette associée
self.t_paroles = wx.TextCtrl(self, wx.ID_ANY, "")
e_paroles = wx.StaticText(self, wx.ID_ANY, "Paroles associées"
)
self.t_notes = wx.TextCtrl(self, wx.ID_ANY, "N" )
e_notes = wx.StaticText(self, wx.ID_ANY, "Nom mélodie : " )
self.t_transpose = wx.TextCtrl(self, wx.ID_ANY, "")
e_transpose = wx.StaticText(self, wx.ID_ANY, "transposer vers :
" )
b_voix_ok = wx.Button(self, wx.ID_ANY , "OK")
b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")
self.Bind( wx.EVT_BUTTON, self.b_voix_ok_clic, b_voix_ok)
self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
grille.Add(e_voix, (x,y), (1,1), wx.EXPAND )
grille.Add (self.t_voix, (x,y+1) , (1,1) , wx.EXPAND ) # ajout
des champs : objet, où (L, C), extension (nb L, nb C), formatage
x += 1
grille.Add(e_paroles, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_paroles, (x,y+1), (1,1), wx.EXPAND )
x += 1
grille.Add(e_voix, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_voix, (x,y+1), (1,1), wx.EXPAND )
x += 1
grille.Add(e_notes, (x,y), (1,1), wx.EXPAND )
grille.Add ( self.t_notes, (x, y+1), (1, 1), wx.EXPAND )
x += 1
grille.Add(e_transpose, (x,y), (1,1), wx.EXPAND )
grille.Add(self.t_transpose, (x,y+1), (1,1), wx.EXPAND )
x += 2
grille.Add(b_voix_ok, (x, 0), (1, 1))
grille.Add(b_fermer, (x, 2), (1, 1))
grille.AddGrowableCol(0)
self.SetSizerAndFit(grille) # mise en place finale
self.Show(True) # et affichage
def b_voix_ok_clic(self, ev_b_portee_ok): # fin de
l'ajout d'un nouveau bloc voix
self.d_voix['voix'] = self.t_voix.GetValue()
self.d_voix['paroles'] = self.t_paroles.GetValue()
self.d_voix['notes'] = self.t_notes.GetValue()
self.d_voix['transpose'] = self.t_transpose.GetValue()
self.Destroy()
def b_fermer_clic(self, ev_b_fermer):
self.Destroy()
def lit_voix(self):
return self.d_voix
score.pyc
Description: application/python-code
#!/usr/bin/python
# -*- coding: utf8 -*-
# projet pour génération automatique de scores
import wx
import os
import score
class fen(wx.Frame):
def __init__(self, titre):
self. d_part = {}
self.l_score = [] # liste de d_score crées dans
la fenetre score
self.rep = "" # répertoire de travail
wx.Frame.__init__(self, None, wx.ID_ANY, title = titre , pos =
(200,200) ) # création de la fenetre de premier niveau
self.grille = wx.GridBagSizer() # création de la
grille type tableur : accès direct aux cellules
self.t_fic = wx.TextCtrl(self, wx.ID_ANY, 'lily.ly' )
# champ de saisie, size=(150, 30)
e_fic = wx.StaticText(self, wx.ID_ANY, "fichier à générer" )
# etiquette associée
self.t_version = wx.TextCtrl(self, wx.ID_ANY, "2.8.6")
e_version = wx.StaticText(self, wx.ID_ANY, "version : " )
self.t_part = wx.TextCtrl(self, wx.ID_ANY, 'Titre')
# champ de saisie, size=(150, 30)
e_part = wx.StaticText(self, wx.ID_ANY, "Titre partition" )
# etiquette associée
self.t_inclusion = wx.TextCtrl(self, wx.ID_ANY,
"italiano.ly\n", style = wx.TE_MULTILINE)
e_inclusion = wx.StaticText(self, wx.ID_ANY, "Inclusions : " )
b_ok = wx.Button(self, wx.ID_ANY , "OK")
b_score = wx.Button(self, wx.ID_ANY , "Ajout Score")
b_fermer = wx.Button(self, wx.ID_ANY , "Fermer")
b_rep = wx.Button(self, wx.ID_ANY , "Naviguer")
self.Bind( wx.EVT_BUTTON, self.b_ok_clic, b_ok)
self.Bind( wx.EVT_BUTTON, self.b_score_clic, b_score)
self.Bind( wx.EVT_BUTTON, self.b_fermer_clic, b_fermer)
self.Bind( wx.EVT_BUTTON, self.b_rep_clic, b_rep )
x = 0
self.grille.Add (self.t_fic, (x,1) , (1,1) , wx.EXPAND )
# ajout des champs : objet, où (L, C), extension (nb L, nb C), formatage
self.grille.Add(e_fic, (x,0), (1,1), wx.EXPAND )
self.grille.Add(b_rep, (x,2) , ( 1,1 ) , wx.EXPAND )
# dialogue de changement de répertoire
x +=1
self.grille.Add(e_version, (x,0), (1,1), wx.EXPAND )
self.grille.Add(self.t_version, (x,1), (1,1), wx.EXPAND )
x+=1
self.grille.Add(e_part, (x,0), (1,1), wx.EXPAND )
self.grille.Add(self.t_part, (x,1), (1,1), wx.EXPAND )
x +=1
self.grille.Add ( e_inclusion, (x,0) , (1,1) , wx.EXPAND )
self.grille.Add(self.t_inclusion, (x,1), (1,1), wx.EXPAND )
x +=2
self.grille.Add(b_score, (x, 0), (1, 1))
self.grille.Add(b_fermer, (x, 1), (1, 1))
self.grille.Add(b_ok, (x, 2), (1, 1))
# self.grille.AddGrowableCol(0) # redimension des
champs possible
self.grille.AddGrowableCol(1)
# self.grille.AddGrowableCol(2)
# self.SetSizeHints(-1,self.GetSize().y,-1,2*(self.GetSize().y)
); # blocage en Y à sa taille actuelle, en X -1 => illimité
#
# min X, min Y, max X, max Y
self.SetSizerAndFit(self.grille) # mise en place
finale
self.Show(True) # et affichage
def b_rep_clic (self, ev_b_rep):
fen_rep = wx.DirDialog(self, "Répertoire",
style=wx.DD_DEFAULT_STYLE | wx.DD_NEW_DIR_BUTTON)
if fen_rep.ShowModal() == wx.ID_OK:
self.SetStatusText( fen_rep.GetPath() )
self.rep = fen_rep.GetPath()
self.t_fic.SetValue( self.rep +"/lily.ly")
self.SetSizerAndFit(self.grille) #
redimensionne la fenetre
fen_rep.Destroy()
def fichier (self, ev_fic):
fen_fic = wx.FileDialog(self, "Fichier :", os.getcwd(), "",
"*.*", wx.OPEN)
if fen_fic.ShowModal() == wx.ID_OK:
chemin = fen_fic.GetPath()
chemin_base = os.path.basename( chemin )
self.SetStatusText("chemin courant : %s" % chemin_base )
fen_fic.Destroy()
def b_ok_clic(self, ev_b_ok): # fin de l'acquisition des
données
self.d_part ['fic']= self.t_fic.GetValue()
self.d_part ['part'] = self.t_part.GetValue()
self.d_part ['version'] = self.t_version.GetValue()
self.d_part ['liste_ds'] = self.l_score
##########################################################
##
## Création du fichier
##
##########################################################
fic_sort = open ( self.d_part ['fic'], 'w')
# fic_sort.write ('% Essai de génération automatique \n')
fic_sort.write('\\version "'+ self.d_part['version'] +'"\n' )
fic_sort.write('\\header { title = "' + self.d_part ['part']
+ '" }\n\n')
fic_sort.write ( '% Inclusions \n' )
for n_inclus in range ( self.t_inclusion.GetNumberOfLines() ) :
if ( self.t_inclusion.GetLineLength (n_inclus ) > 0 ) :
fic_sort.write ( '\include "%s"\n' %
self.t_inclusion.GetLineText( n_inclus) )
liste = self.d_part['liste_ds']
for n_score in range ( len ( liste ) ) : # balayage des blocs
scores disponibles et écriture dans le fichier
dico_score = liste[ n_score ]
nom_score = dico_score['nom'] # dans bloc
header
tempo_score = dico_score['tempo']
type_score = dico_score['type']
armature_score = dico_score['armature']
vitesse_score = dico_score['vitesse']
liste_dp_score = dico_score['liste_dp']
fic_sort.write('\score {\n \t\context %s \n' %
type_score )
fic_sort.write('\t<<\n')
for n_port in range ( len( liste_dp_score ) )
:#création des blocs Staff
dico_portee = liste_dp_score[ n_port ]
clef = dico_portee ['clef']
instrument = dico_portee ['instrument']
instr = dico_portee ['instr']
instr_midi = dico_portee ['instr_midi']
nom_port = dico_portee ['portee']
liste_dv_portee = dico_portee ['liste_dv']
if ( len ( str ( nom_port ) ) > 0 ) :
nom_port = " = " + nom_port
fic_sort.write('\t\t\context Staff %s
\n\t\t<<\n' % ( nom_port ) )
fic_sort.write ('\t\t\t\set Staff.instrument =
\markup { \column { %s } }\n' % instrument )
fic_sort.write('\t\t\t\set Staff.midiInstrument
= "%s"\n' % instr_midi )
fic_sort.write('\t\t\t\clef %s \n' % clef )
fic_sort.write('\t\t\t\key %s \major\n' %
armature_score )
fic_sort.write('\t\t\t\\time %s\n'% tempo_score
)
for n_voix in range ( len ( liste_dv_portee ) )
: # ajout des voix à la portée
dico_voix = liste_dv_portee [ n_voix ]
nom_notes = dico_voix ['notes' ]
nom_paroles = dico_voix ['paroles' ]
ton_transpose = dico_voix['transpose']
nom_voix = dico_voix ['voix' ]
fic_sort.write ( '\t\t\t\context Voice
= %s { \%s }\n' % (nom_voix, nom_notes ) )
if ( ton_transpose != "" ) :
# au niveau de la defifnition des notes ?
fic_sort.write (
'\t\t\t\\transpose do %s \n' % (ton_transpose ) )
if ( nom_paroles != "") :
fic_sort.write (
'\t\t\t\lyricsto "%s" \context Lyrics \%s \n' % (nom_voix, nom_paroles ) )
fic_sort.write ( '\t\t>>\n' ) # fin d'un bloc Staff
fic_sort.write ( '\t>>\n' ) # fin d'un bloc type
if ( vitesse_score != "" ) :
fic_sort.write ('\t\midi { \t\t\\tempo %s \n\t}\n' %
vitesse_score )
fic_sort.write ('\t\layout { }\n' )
fic_sort.write ('\t\header { piece = "%s" }\n' % nom_score )
fic_sort.write ( "}\n" ) # fin d'un bloc score ajouter
au dessus les blocs header
#self.d_score['liste_dp']['type']
fic_sort.close()
# return self.d_part # retourne à qui ?
def b_score_clic(self, ev_b_score): # acquisistion d'un
nouveau bloc score
self.fenetre_score = score.fen_score("Score")
self.l_score.append ( self.fenetre_score.lit_part() )
return True
def b_fermer_clic ( self, ev_b_fermer):
self.Destroy()
class fen_principale(wx.App):
def OnInit(self):
self.fenetre = fen('essai.py')
self.fenetre.Show(True)
self.SetTopWindow(self.fenetre)
return True
if __name__ == "__main__" :
d_score = {}
appli = fen_principale()
appli.MainLoop()
#fic_sor =
| [Prev in Thread] | Current Thread | [Next in Thread] |