Mi chiedevo come si creerebbe una funzione, in PHP, che viene utilizzata per trasporre alcuni accordi musicali.Come trasporre accordi musicali con PHP?
Proverò a spiegare come funziona nella teoria musicale. Spero di non dimenticare qualcosa. Se ci sono degli errori, per favore aiutami a correggerlo.
1. I semplici accordi.
I semplici accordi sono quasi semplice come un alfabeto e va in questo modo:
C, C#, D, D #, E, F, F #, G, G #, A, A # B
Da B torna di nuovo a C. Pertanto, se l'accordo originale è E
e vogliamo trasporre +1, l'accordo risultante è F
. Se trasponiamo +4, l'accordo risultante è G#
.
2. Accordi espansi.
Funzionano quasi come gli accordi semplici, ma contengono alcuni caratteri in più, che possono essere ignorati durante la trasposizione. Per esempio:
Cmi, C# 7, Dsus7, Emi, Fsus4, F # mi, G ...
Così ancora una volta, come per i semplici accordi, se trasponiamo Dsus7
+ 3 = Fsus7
3. Tono basso non root.
Un problema si presenta quando il basso suona un tono diverso rispetto al tono della radice dell'accordo. Questo è contrassegnato da una barra dopo l'accordo e deve anche essere trasposto. Esempi:
C/G, Dmi/A, F # sus7/A #
Come esempi 1 e 2, tutto è lo stesso, ma la parte dopo le esigenze di barra trasposizione troppo pertanto :
C/G
+ 5 = F/C
F#sus7/A#
+ 1 = Gsus7/B
Quindi, in pratica, immagina di avere una variabile PHP chiamata chord
e il valore di trasposizione transpose
. Quale codice trasponerebbe l'accordo?
Esempi:
var chord = 'F#sus7/C#';
var transpose = 3; // remember this value also may be negative, like "-4"
... code here ...
var result; // expected result = 'Asus7/E';
ho trovato una domanda esistita sulla StackOverflow, at here. Parlano di algoritmo per progressioni di accordi.
Come faccio trasposizione accordi musicali con PHP, aumentando o diminuendo per semitoni?
Benvenuti in SO. Leggete [Quali argomenti posso chiedere] (http://stackoverflow.com/help/on-topic) e [Come fare una buona domanda] (http://stackoverflow.com/help/how-to -ask) E [la domanda perfetta] (http://codeblog.jonskeet.uk/2010/08/29/writing-the-perfect-question/) SO è ** non una codifica libera o conversione di codice o tutorial o servizio di ricerca della biblioteca ** Devi anche dimostrare di aver fatto qualche sforzo per risolvere il tuo problema. – RiggsFolly
@lvk Leggi i collegamenti nel mio primo commento! – RiggsFolly
Sembra che tu abbia un problema, ma non hai nemmeno provato a capire una soluzione. Hai già provato a scrivere una funzione? Non farai in modo che le persone scrivano il codice per te qui, non è così che funziona. Aiutiamo a sistemare cose che non funzionano ma non sei partito. Sembra che sia necessario creare un array associativo come 'array ('C', 'C#')' etc e quindi è possibile iniziare a confrontare gli indici dell'array per ottenere il valore desiderato. – Jimbo