Domanda:
Algoritmo per la trasposizione degli accordi tra i tasti
Jonathan Potter
2015-12-07 01:35:10 UTC
view on stackexchange narkive permalink

Sto scrivendo un software che traspone gli spartiti tra le chiavi e sono ancora nuovo in teoria musicale, quindi speravo che qualcuno che ne sapesse di più potesse farmi sapere se il mio approccio è corretto. Ecco il mio processo per ogni nota:

  1. Trova il grado del nome della lettera della nota nella scala della chiave corrente.
  2. Trova il numero di semitoni alzati o abbassati da cui proviene la nota la nota effettiva nella scala. Lo chiamerò offset.
  3. Trova la nota nella scala della nuova tonalità che è dello stesso grado.
  4. Alza o abbassa la nuova nota dell'offset.

Ecco un esempio. Supponiamo di trasporre la nota Mi # da Do maggiore a Re maggiore. Quindi eseguiremo i passaggi precedenti come segue:

  1. E # sarebbe il terzo grado della scala.
  2. L'offset sarebbe +1 perché E è effettivamente il terzo grado di la scala di Do maggiore e Mi # è un semitono sopra.
  3. Il terzo grado della scala di Re maggiore è F #, quindi questa è la nuova nota.
  4. Aggiungendo il nostro offset +1 a quello lo renderebbe F ##.

Quindi F ## è il risultato della trasposizione di Mi # da Do maggiore a Re maggiore. Mi rendo conto che normalmente non avresti un Mi # nella tonalità di Do maggiore, ma penso che sia possibile e funzioni per spiegare l'algoritmo.

Questo algoritmo è corretto? Dovrei affrontarlo in modo diverso?

Una domanda secondaria: è necessario conoscere la modalità delle chiavi quando si esegue questo tipo di algoritmo? I risultati sembrano gli stessi sia che utilizzo scale maggiori o minori per i calcoli dei gradi / offset. Grazie in anticipo!


Aggiornamento: soluzione

Sembra che l'algoritmo di cui sopra sia corretto, ma può essere semplificato. Il pezzo del puzzle che mi mancava era che puoi determinare l'intervallo senza fare riferimento alla scala. Ecco l'algoritmo aggiornato. I passaggi 1 e 2 trovano l'intervallo tra la chiave corrente e la nuova chiave. I passaggi 3 e 4 applicano lo stesso intervallo alla nota che stiamo trasponendo.

  1. Trova la distanza tra il nome della lettera della chiave corrente e il nome della lettera della nuova chiave nell'elenco di tutte le lettere (esclusi diesis o bemolle): A, B, C, D, E, F, G.
  2. Trova la distanza in semitoni tra la tonalità corrente e la nuova tonalità.
  3. La lettera della nuova nota sarà la distanza della lettera (Passaggio 1) sopra la nota corrente.
  4. Aggiungi diesis o bemolle alla lettera della nuova nota finché non è il numero corretto di semitoni (dal passaggio 2) sopra la nota corrente.

Ripetendo l'esempio originale avremo:

  1. D è 1 lettera sopra C
  2. D è 2 semitoni sopra C
  3. La nuova lettera sarà 1 lettera sopra E #, che è F
  4. La nuova nota sarà di 2 semitoni sopra E #, che è F ##

Grazie a tutti coloro che hanno risposto, e in particolare a @MattL e @Dom. Tutte le risposte e i commenti sono stati molto illuminanti!

Avevo intenzione di modificare la mia risposta una volta ricevuta una risposta, ma forse questo è un modo migliore per farlo. Ora Jonathan, supponi di voler trasporre da Do minore a Sol # minore. La nota in ingresso è un si naturale. La nota in uscita è quindi Fx (F ##). Quali sono i passaggi logici? Abbiamo C + 4 è G e G # è di 8 semitoni su C.Quindi sappiamo che abbiamo bisogno della nota di 8 semitoni su B naturale, e sappiamo che dobbiamo chiamarla F. Quali sono i passaggi logici per determinare che sia un doppio diesis, invece di, diciamo, un bemolle? ...
... Sto chiedendo perché sembrano essercene molto di più rispetto ai passaggi nel mio algoritmo suggerito (sotto) che utilizza l'idea di Caleb. Ma potrei sbagliarmi, quindi forse dovremmo considerare entrambi.
Altre cose che la tua soluzione deve affrontare: cosa fai se trovi un Cx in un brano in C che stai trasponendo in F #? Quella nota dovrebbe essere F ### e il triplo diesis non è consentito. Dovrebbe invece leggere G #.
Ti consiglierei di scrivere il tuo algoritmo: che lingua stai usando? - e poi pubblica su SO per vedere se le persone possono consigliare il refactoring per la velocità. Esistono molti modi per eseguire una tabella di ricerca, che è essenzialmente ciò che stai scrivendo qui. - Oh, e fai attenzione alle enarmoniche, poiché l'esecutore probabilmente preferirebbe non avere un sacco di tripli bemolle :-)
@CarlWitthoft Grazie per il suggerimento, ma questa domanda riguarda la correttezza, non l'efficienza. Ho le capacità di programmazione per ottimizzarlo da solo; Semplicemente non ho la conoscenza della teoria musicale per sapere che sto producendo risultati corretti. Se desideri che lo dichiari nella domanda, posso aggiungerlo.
Penso che l'algoritmo che hai selezionato come risposta sia corretto fin dove arriva. Tuttavia, ti suggerisco di prendere gli scenari di prova che ho suggerito e lavorarci sopra. Penso che scoprirai che quando sarà necessario decidere quale nota enarmonica selezionare, il tuo algoritmo diventerà piuttosto ingombrante. (Nel caso in cui non conosci il termine "note enarmoniche", sono due note della stessa altezza che sono scritte in modo diverso, come la # e sol.
Mi interesserà vedere il tuo codice quando avrai finito.
@BobRodes Penso che i tripli diesis siano perfettamente validi (in senso teorico). Se ci atteniamo all'esempio che ho usato nella mia domanda, ma trasponiamo un Mi ## invece di E # allora quello sarebbe un secondo intervallo doppiamente aumentato (credo) e l'unico modo per preservare lo stesso intervallo durante la trasposizione sarebbe il risultato di F ###. Per quanto ne so, se avere doppi o tripli bemolle / diesis è una questione di preferenza. Quindi dovrà essere lasciato all'utente, non all'algoritmo.
Sì, ma le persone generalmente preferiscono non usarli. Ecco un articolo interessante su come MuseScore gestisce la trasposizione. http://davidbolton.info/articles/musescore_interval_transposition.html Menziona che Finale tiene un triplo diesis e Sibelius lo rispedisce.
p.s. Se sei interessato a un programma gratuito che abbia una buona funzione di trasposizione, potresti scaricare e installare MuseScore.
@BobRodes Questo è un articolo fantastico, grazie per averlo fatto notare! È bello sapere che sono su un sentiero battuto dato che Finale lo fa allo stesso modo. Ho finito di implementare l'algoritmo e puoi visualizzare il codice sorgente qui: https://github.com/jpotterm/google-apps-chord-transposer. La maggior parte del lavoro viene svolto nella funzione di trasposizione del file server / note.gs (potrebbe spostarsi se eseguo il refactoring in futuro). Spero che lo trovi utile e grazie per tutto il tuo aiuto!
Ecco un altro articolo sulle stranezze della notazione musicale: http://homes.soic.indiana.edu/donbyrd/InterestingMusicNotation.html. L'autore afferma che ci sono "almeno cinque" esempi di tripli diesis / bemolle nell'intera letteratura musicale! Se stai trasponendo spartiti, potresti voler fare qualcosa per evitarli.
Sei risposte:
Matt L.
2015-12-07 02:20:25 UTC
view on stackexchange narkive permalink

In effetti non è rilevante quale scala viene utilizzata. Ciò che conta è l'intervallo dalla nota fondamentale alla nota corrente. Usando il tuo esempio, un Mi # è una terza aumentata dalla nota fondamentale C.Quindi, se la fondamentale cambia in Re, la nota trasposta è una terza aumentata da Re, che è un Fa ##.

Invece di lavorare con semitoni (che ti darà ambiguità nel nominare le note), devi lavorare con intervalli, il che ti consente di distinguere un Mi # da un F (per C come fondamentale, il primo è una terza aumentata, il secondo un quarto perfetto).

Molto istruttivo, grazie! Penso che sia quello che sto facendo. Quindi l'algoritmo che sto usando ti sembra corretto?
@JonathanPotter: Sì, a parte l'utilizzo della "scala della chiave corrente", che non è necessaria. Prendi l'intervallo tra la nota fondamentale originale e la nuova nota fondamentale e sposta la nota corrente dello stesso intervallo. Ciò manterrà identico l'intervallo tra la nota e la nota fondamentale.
Vorrei contrassegnare sia questa che la risposta di @Dom's come corrette, ma posso farne solo una :( Quindi hai i miei ringraziamenti e il mio voto positivo.
Dom
2015-12-07 03:00:42 UTC
view on stackexchange narkive permalink

Matt ha ragione a voler pensare ad intervalli quando si pensa alla trasposizione, in quanto ti consentirà di sapere come chiamare la nota insieme alla distanza in semitoni necessaria per spostare la nota.

Quindi, in questo caso specifico, stai trasponendo tutte le note di un secondo maggiore, il che significa che sposti ogni nota su di due semitoni e il nome della nota si basa sul nome della lettera successiva in alto.

Diciamo solo per semplicità che il valore della nota sia stato enumerato in questo modo:

 0 1 2 3 4 5 6 7 8 9 10 11C C # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B 

E diciamo anche che abbiamo le lettere delle note enumerate in questo modo:

 0 1 2 3 4 5 6C DEFGAB 

Quindi, tornando al tuo esempio, il Mi # si associa al valore della nota 5 (F) e alla lettera della nota E (2) indipendentemente dalla tonalità in cui ti trovi. Quando vuoi spostare questa nota verso l'alto di un secondo maggiore , dovresti quindi aumentare il valore della nota di 2 e la lettera della nota di 1 dando un valore della nota di 7 (G) e la lettera della nota di F (3) da questi due valori puoi assegnare un nuovo nome alla nota.

Ho aggiornato la domanda con un nuovo algoritmo basato sulla tua (e su @MattL's) risposta. Ti sembra che ho capito bene?
Sì, ma soprattutto se vuoi continuare a creare software basato sulla musica, proverei a mantenere l'algoritmo in termini musicali. I passaggi 1 e 2 sono combinati se indichi semplicemente l'intervallo come un 2 ° maggiore (che conosci la distanza in semitoni e il nome della lettera a cui vuoi spostarti) che potresti creare un'infrastruttura da fare con un po 'di lavoro extra.
Sì, nel mio codice ho creato un'astrazione per gli intervalli, ma ho pensato che fosse utile in questa domanda specificare esplicitamente come si andrebbe a trovare l'intervallo e quindi applicarlo. Ma ho aggiornato la domanda per dare una migliore spiegazione degli intervalli.
Caleb Hines
2015-12-07 08:51:00 UTC
view on stackexchange narkive permalink

Se posso suggerire un'alternativa più semplice: usa un approccio "Line of Fifths" per garantire l'ortografia corretta delle note senza richiedere alcuna conoscenza del grado di scala.

La Line of Fifths è costruita in modo simile al meglio noto Cerchio delle Quinte, ma non assume equivalenza enarmonica, quindi non si chiude su se stesso e si estende all'infinito in entrambe le direzioni. È una struttura conveniente da utilizzare con algoritmi che si preoccupano di scrivere correttamente le note.

...
B ♭
F
C
G
D
A
E
B
F♯
C♯
G♯
D♯
A♯
E♯
B♯
F♯♯
...

L'algoritmo diventa quindi:

  1. Scopri quanti spazi lungo la linea stai trasponendo. In questo caso, andare da C a D è di due quinte.
  2. Trova la nota che vuoi trasporre e poi vai avanti di molti spazi. In questo caso, andare due quinti oltre E♯ ti porta a F♯♯.

Se vuoi saperne di più, ho introdotto il concetto di Riga di quinte nel mio primo stack in assoluto risposta di scambio, riguardante un modo algoritmico per determinare i nomi degli intervalli: Procedura generale per determinare il nome di un intervallo dato una chiave principale / raccolta diatonica.


Aggiorna : Dal momento che non è abbastanza ovvio e BobRodes lo ha chiesto, menzionerò che in questo schema, qualsiasi nota può essere rappresentata da un singolo numero: è la posizione lungo la linea. Sebbene tu possa plausibilmente mettere l'origine ovunque, trovo che la matematica funzioni meglio se F = 0 e i numeri aumentano man mano che vai verso i diesis (C = 1, G = 2).

Non è necessario memorizzare un intero array di nomi di note, perché c'è una semplice mappatura uno a uno tra il nome di una nota e la sua posizione su questa riga. È necessario memorizzare esplicitamente 7 coppie (mappando l'intervallo F-B sui numeri 0-6), ma una volta ottenuto ciò, è possibile trovare la posizione di qualsiasi nome di altezza (e viceversa).

La chiave è rendersi conto che qualsiasi nome di passo può essere rappresentato dalla coppia {letter, numberOfSharps} - dove un numberOfSharps negativo significa usare bemolli. Ad esempio F♯♯♯ è (F, 3) mentre G ♭♭ è (G, -2). Per convertirlo in una posizione lungo la linea, utilizza la formula:

  7 * numberOfSharps + letterToNumber [letter]  

Quindi per C♯♯♯ , poiché C = 1 e ci sono 3 diesis, la posizione lungo la linea sarebbe 7 * 3 + 1 = 22.

La relazione inversa (converti una posizione in un nome di altezza) può essere trovata usando un combinazione di divisione intera per 7 per ottenere il numero di diesis e divisione modulare (posizione mod 7) per ottenere la lettera.

Caleb molto interessante. Anche se capisco che teoricamente puoi allungare all'infinito, in pratica non andiamo oltre ## e bb come sono sicuro che tu sappia. Quindi, se stessi scrivendo un algoritmo, dove salireste da B ## o scendeste da Fbb? Non che ti imbatterai in nessuno di questi il ​​99,9% delle volte, ma cosa faresti se lo facessi? Penso che potresti salire o scendere di una sesta diminuita invece di una quinta, facendo passare B ## a G # e Fbb ad Ab. Cosa pensi?
Non vedo alcun motivo per cui sarebbe necessario il wrapping e ho aggiornato la mia risposta di conseguenza. Anche se, se lo desideri, potresti semplicemente aggiungere / sottrarre 12 alla posizione della nota, per avvicinarti a 0.
Il motivo è pratico. Nessuno usa più del doppio diesis / doppio bemolle nella notazione (quasi nessuno). Se stai effettivamente cercando di creare un software che trasponga la musica reale, raggiungi un limite difficile in Bx e Fbb.
Certo, avresti problemi a visualizzarlo o stamparlo, ma non c'è motivo teorico per cui l'algoritmo di trasposizione dovrebbe essere intrinsecamente limitato.
Ebbene, parte dell'algoritmo di trasposizione sarebbe quale nota emettere, no? Voglio dire, capisco il tuo punto, ma sembra una questione di come definisci la limitazione. Un algoritmo che non può emettere le note che vengono effettivamente utilizzate nella trasposizione in nome dell'essere illimitato è una contraddizione in termini, non è vero?
Capisco il tuo punto. Ma questo significa che hai bisogno di un altro algoritmo per capire quale nota stampare?
Grazie! Dopo aver provato più strategie per il problema, ho trovato e implementato questa e sembra che abbia funzionato alla grande. La modifica è stata particolarmente utile, stavo per creare l'array completo finché non hai indicato come mappare facilmente un numero. Ha funzionato alla grande così com'è per gli accordi, ma ho anche usato lo stesso algoritmo per trasporre le note sul foglio. Per questo ho dovuto aggiungere un po 'di logica in più per gestire le informazioni sull'ottava (ad esempio E5 vs E6). Ho anche finito per implementare il triplo diesis e il triplo bemolle sulla mia applicazione, almeno così ho potuto verificare la correttezza di alcuni casi limite.
Tekkerue
2015-12-07 05:31:13 UTC
view on stackexchange narkive permalink

Hai solo 12 chiavi di cui preoccuparti (anche le tonalità minori sono solo duplicati per le note del relativo maggiore) quindi sarebbe molto semplice creare un array di stringhe bidimensionale da utilizzare come tabella di ricerca per i nomi di ciascuna delle note per ogni chiave. Ciò ti consentirà di specificare come verrà chiamata ciascuna nota per tutti e 12 i tasti e potrai determinare se chiamare una nota "LA #" o "SIb".

Inoltre, puoi anche decidere cosa per chiamare le note al di fuori della tonalità (molte canzoni contengono accordi / note al di fuori della tonalità). Ad esempio, potresti scegliere di usare il nome D # nella tonalità di G major (poiché G major ha un diesis), mentre potresti scegliere di usare il nome Eb in F major (poiché F major ha un bemolle).

Questo renderà le modifiche di tonalità estremamente semplici poiché tutto ciò che devi fare è cambiare la fondamentale e tutto il resto che ha a che fare con accordi / note all'interno della tonalità rimarrà esattamente lo stesso.

??? ... perché il voto negativo? Jonathan sta scrivendo software e ha chiesto un algoritmo per la trasposizione delle chiavi, quindi gli ho offerto un suggerimento su come codificare ciò che sta cercando di fare. Sono un programmatore oltre che un musicista e ho esperienza con questo argomento poiché ho creato io stesso software musicale che includeva l'opzione di trasposizione delle chiavi. La mia risposta è stata diretta a un altro programmatore che probabilmente capirà il mio suggerimento. :)
Beh, anch'io sono un altro programmatore e il tuo algoritmo non spiega come "puoi determinare" come chiamare una nota. Deve includerlo se deve essere considerato una soluzione.
Ma ciò che chiami una nota dipende dalla chiave in cui ti trovi, quindi ciò che chiami effettivamente una nota sarà diverso. I nomi delle note possono essere trovati cercando su Google i 12 diversi tasti principali e quindi inseriti manualmente nella tabella di ricerca. Ciò eliminerà le stranezze come "E #" dalla visualizzazione nella tonalità di Do maggiore poiché l'array punterà sempre al nome "F" e non "E #". Immagino che siano necessarie maggiori informazioni da parte sua sul tipo di scenari che sta cercando di spiegare.
Sono d'accordo che sono necessarie maggiori informazioni. Ma se l'OP ha bisogno di scrivere effettivamente spartiti trasposti, le "stranezze" che hai menzionato hanno il loro posto e sono usate nella musica. Vedi qui: https://www.youtube.com/watch?v=A3j57AdHSvg (è un po 'sfocato, scusa, il meglio che ho trovato). Guarda sulla terza riga, prima misura, ultima battuta, nota alta dell'accordo. È un Mi #. Se l'hai scritto F, dovresti scrivere un naturale su di esso (perché il F precedente è diesis), e poi mettere un diesis sul F successivo Non è così facile da leggere.
p.s. Se sia l'ingresso che l'uscita del programma sono musica reale, i nomi enarmonici delle note non hanno importanza come dici. Se sono spartiti, la tua idea è un'eccessiva semplificazione impraticabile, come dovrebbe dimostrare il mio esempio. La maggior parte degli errori di sviluppo del software nella nostra attività derivano da una comprensione incompleta dei requisiti; questo è un ottimo esempio di ciò. :)
La chiave è uno dei tanti fattori che determina ciò che chiami una nota. Se sei nella tonalità di C potresti vedere C # e / o Db a seconda del contesto in cui ti trovi anche nel caso di E # e F come in questo caso. La chiave da sola non è sufficiente, è necessario il contesto e maggiori informazioni e in questo caso, semplicemente usando la chiave si finirebbe con una F invece del Mi # desiderato che non è quello che vuole l'OP.
La parte dello spartito era il pezzo che mancava nel post originale, ma ha aggiornato il post e ha chiarito quella parte ora. :) Sì, negli spartiti c'è anche l'aspetto visivo di come appare sulla carta per renderlo più facile da leggere, che può prevalere sulla teoria degli accordi / tonalità standard come fa l'esempio di Bob. Mi aspettavo la conversione della tabella degli accordi dato che ha dichiarato di essere nuovo alla teoria musicale e la conversione degli spartiti è un compito piuttosto ambizioso da assumere.
@Tekkerue: è incredibile come alcune aziende spenderanno 5 milioni di requisiti per elaborare i requisiti, e quando tutti sono immersi fino alla cintola nella fase di sviluppo e gli stakeholder stanno andando non è quello che intendevo affatto, 20 persone si siederanno attorno a un tavolo e diranno bene, io si aspettava questo a causa di quel "dato" molto ragionevole e logico, ecc. ecc. È per questo che metà di tutte le iniziative di sviluppo software falliscono. Per favore, comprendi che questa non è una critica personale, ma un'osservazione su qualcosa che tutti noi IT persone facciamo e dobbiamo stare attenti ad evitare (e spesso non lo sono) quando i soldi sono sul tavolo.
BobRodes, certo, ma questo è un forum web gratuito in cui qualcuno ha posto una domanda che ha dichiarato di essere nuovo alla teoria musicale e non ha inizialmente specificato che tipo di software stavano scrivendo. Quindi, nel caso di qualcuno nuovo alla teoria, supponendo che l'approccio più semplice fosse ragionevole. Ma se questo fosse un lavoro lo avrei crivellato di domande per determinare cosa voleva e di certo non avrei codificato nulla senza ottenere più indicazioni. Inoltre, sto effettivamente sviluppando il mio software in cui non c'è spazio per confusione su quali siano le mie esigenze, quindi non preoccuparti. :)
È chiaro che capisci molto bene perché ho detto che non era una critica ma un'osservazione. LOL
Non entrerò in una discussione su questo, ma hai parafrasato il mio commento sull '"aspettarsi" un certo risultato perché era ragionevole date le informazioni iniziali. Quindi la tua "osservazione" era chiaramente diretta alla mia risposta e ti ho spiegato perché non era necessaria ... lasciamo perdere. :)
BobRodes
2015-12-07 13:44:58 UTC
view on stackexchange narkive permalink

Secondo me, il modo più efficiente per fare ciò che vuoi dal punto di vista IT è la soluzione di Caleb Hines. Ci sono meno parti mobili rispetto alla soluzione di Dom (scusate Dom). Basta creare un array (un array a base zero) contenente la sua "Line of Fifths". Dovrai gestire la condizione al contorno di dove andare dalle estremità della linea, che sono Bx e Fbb. In assenza di un suo suggerimento migliore, cambierei le quinte in seste diminuite: G # segue Bx, Ab segue Fbb. È molto improbabile che tu possa mai vedere una di queste note (o doverle trasporre su di esse) ma devi tenerne conto. Se non lo fai e vengono fuori, il tuo programma fallirà in modo spettacolare e il motivo non sarà molto ovvio.

Quindi, il tuo algoritmo avrà un aspetto simile a questo. Per prima cosa (supponendo che tu abbia già creato l'array con la "Linea di quinti" in esso), determina la distanza tra la chiave di input e quella di output:

  1. Inizia con il primo elemento dell'array.
  2. Itera l'array finché non trovi una delle due chiavi.
  3. Continua a iterare l'array finché non trovi l'altra chiave.
  4. Lascia che X sia uguale alla differenza tra i due offset.
  5. Se il primo valore trovato è la chiave di destinazione, lascia X = -X.

Successivamente, ripeti tutte le note del pezzo (un proposta non banale!). Per determinare l'altezza trasposta di una nota:

  1. Itera l'array fino a trovare l'elemento contenente la nota. Sia Y uguale all'offset di questo elemento.
  2. Se Y + X è maggiore del limite superiore dell'array (chiameremo il limite superiore U), sia A = l'offset di C #. Produce l'elemento il cui offset è A + Y + X - U.
  3. Se Y + X è minore di zero, sia A = l'offset di Ab. Visualizza l'elemento il cui offset è A + Y + X.
  4. Se è diverso da 2 o 3 (condizione non al contorno), visualizza l'elemento il cui offset è Y + X.

Questo dovrebbe aiutarti a iniziare. Se riesci a creare dei buchi nella mia logica, fallo assolutamente.

Non è necessario sprecare tutta quella memoria preziosa o limitarsi ai limiti di un array finito! Rappresenta semplicemente una nota come un numero singolo e crea una mappatura da quel numero al nome della nota. Ho aggiornato la mia risposta con maggiori dettagli. Con un numero intero a 32 bit, questo ti consente di ottenere almeno fino a F con 306.783.377 diesis. Che dovrebbe essere più che sufficiente per apparire infinito sotto ogni possibile trasposizione ...
Ciò non è utile, tuttavia, in termini pratici. In genere non vai oltre due diesis o bemolli. Pertanto, è necessario elaborare una nota enarmonica su cui trasporre se l'algoritmo emette un triplo diesis o bemolle. Avrai bisogno di farlo per risolvere il problema a portata di mano. http://homes.soic.indiana.edu/donbyrd/InterestingMusicNotation.html ha del materiale interessante su questo.
Tim
2015-12-07 02:19:48 UTC
view on stackexchange narkive permalink

C'è un leggero difetto che probabilmente non sarebbe mai un Mi # nella tonalità di C, ma il concetto sembra essere sulla linea giusta. Devi essere più consapevole musicalmente.

Rileggendo la tua domanda, è ovvio che ho frainteso a cosa stavi mirando. Mi scuso.

L'OP ha detto che sa che normalmente non ci sarebbe un Mi # nella tonalità di Do maggiore, ma in teoria potrebbe accadere. E l'esempio è stato scelto deliberatamente per essere un po 'strano, al fine di "sfidare" il metodo.
Qualsiasi passaggio abbastanza cromatico nella tonalità di Do potrebbe averne uno. Ad esempio, l'Etude Op. Di Chopin. 10, il numero 2 è in C e la misura 7, quarto movimento, la nota superiore è un MI #. Forse la tua critica alla mancanza di consapevolezza musicale dell'OP è fuori luogo, Tim?
@BobRodes, guardando il pezzo sembra che il Mi # sia così l'esecutore può vedere rapidamente a colpo d'occhio che è cromatico (tutte le note in una bella pendenza). Questo non è un problema teorico ma un problema visivo di come appare sugli spartiti per renderlo più facile per l'esecutore. Un algoritmo cieco che converte in una chiave diversa potrebbe benissimo rovinare quella bella pendenza visiva sullo spartito che indica che è cromatico. Questo genere di cose probabilmente non funzionerà bene con un algoritmo cieco in quanto l'algoritmo non saprebbe il motivo per cui è stato utilizzato il Mi # invece del F. "teoricamente corretto".
Ti rimando al mio commento sul tuo post. Hai ragione, è principalmente un problema visivo. Ma ci sono algoritmi che mostreranno sempre questo intervallo come un secondo minore piuttosto che come un unisono aumentato. L'idea di Caleb Hines sembra, ad esempio, che sarà così, anche se vorrei testare le condizioni al contorno in modo più approfondito prima di fare una simile dichiarazione.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...