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

Rispondere a