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