On 2014-09-23 12:07, Giuseppe Amato wrote:
Buongiorno, sto scrivendo un programmino che mi faccia le
trasposizioni di
x semitoni sulle tablature per chitarra. In pratica se ho C (Do) ed
alzo di
un tono devo ottenere D (Re).
Le tablature, anche se non standardizzate, le considero come formate
da una
riga di accordi ed una di testo della canzone.
Es.: Input
C A D
testo testo testo testo
+1 tono
output
D B E
testo testo testo testo
Ora nel fare la trasposizione devo mantenere anche la spaziatura. Per
farlo
ho utilizzato un for sui caratteri, ma credo che si possa fare piĆ¹
velocemente analizzando le "parole" separate da spazi.
Qualcuno ha qualche riferimento ad algoritmo o letteratura da
studiare?
Grazie e ciao
Puoi usare un'espressione regolare per trovare l'alternanza di spazi e
accordi:
In [2]: s = " C A D"
In [3]: re.findall(r'( +)([^ ]+)', s)
Out[3]: [(' ', 'C'), (' ', 'A'), (' ', 'D')]
poi, una volta che hai trasposto gli accordi (che magari cambiano
lunghezza perche' hai ad es. C -> Bb) puoi regolare aggiungere o
togliere spazi da quelli che hai trovato. Poi rimetti tutto insieme.
Per curiosita', avevo anche io provato a trasporre gli accordi [1] in
quel programmino di cui parlavo qualche giorno fa. Non ho il problema
della spaziatura perche' gli accordi non li definisco per posizione ma
sono inseriti nel testo [C]cosi'. Ma il risultato non e' corretto
perche' non gestisce le note enarmoniche (scrivo C#, ma a volte dovrebbe
essere Db, a seconda della chiave della canzone). Tu sai come si fa?
[1] https://github.com/hammeruke/chordlab/blob/master/chordlib/xpose.py
-- Daniele
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python