Le 31 de octobre, e le 5–6, 9–
Un idea que io habeva le matino del 16 de octobre 2023, justo eveliate: in vice de partir de un gamma musical fixe, a applicar a cata nota de un pecia musical, on poterea anque considerar solo le notas que sona al mesme tempore, e pro illos calcular le intervallos optimal, assi que le rationes del frequentias se lassa exprimer in numeros basse.
Sic le scala musical, le gamma de notas, non esserea predeterminate, ma decidite ad hoc, e, si requirite, esserea variabile durante le pecia. Iste idea es apte pro musica polyphonic, sed (mi idea del 31me de octobre) si on usa certe curte intervallos de tempore, e.g. un secunda o un mesura, e considera le notas de un melodia intra iste durata, le mesme maniera de determinar le intervallos pote esser applicate etiam a musica monophonic.
Mi sonio, ja iste matino de 16te, esseva de scriber un programma que poterea automaticamente applicar un tal algorithmo a files Midi existente, e crear un nove version del Midi, in un intonation optimalisate. Bends existente serea interpretate pro detectar anque quartos de tonos (semibemolles e semidieses), e bends (deviationes desde le altores del tonos equidistante) serea modificate o addite, pro realisar le nove intonation.
Forsan un tal intonation es plus similar al maniera de sonar intuitive de violinistas hungare e ruman, Romas e alteres, e de membros de quartettos ad arco?
Pro recognoscer possibilitates, ancora sin manipular Midi, le vespera del 17 de octobre 2023 io comenciava scriber un programma preliminar, que intertanto ha devenite isto.
Pro trovar rationes a candidar, le algorithmo
‘fraction continuate’ poterea esser utile,
sed in su loco io ha consultate mi
lista ja
disponibile, e colligite le rationes plausibile in un
source file (file de fonte) pro uso commun:
rhmusicfuncs.c
, con nomines pro
referer in le header file
rhmusicfuncs.h
.
Le programma, con le nomine adhoc-intvals-cmdline
, accepta,
in le linea de commando o in lineas de stdin
, numeros
inter 0 e 14.5, que refere a tonos chromatic de un scala o accordo.
Le programma cerca, con un algorithmo recursive simile al qual usate
in pilaintv.c
describite in
episodio 08, le rationes
optimal pro obtener un consonantia harmoniose.
Alcun exemplos:
adhoc-intvals-cmdline -v 0 3 7 12 10 12 15 20 1:1 6:5 3:2 2:1 0 316 702 1200
Isto es un accordo minor standard. Le rationes del frequentias es 10:12:15:20,
6:5 etc. es le ration de cata grado del scala o accordo, e 316 etc. indica
le altor del tonos in cents (1200 cents = 1 octava, 100 cents = 1 semitono).
Sin le option -v
le resultatos es minus verbose, e solo le rationes
es monstrate:
1:1 6:5 3:2 2:1
Le numeros pote esser decimal, pro indicar quartos de tonos, in altere parolas: medie semitonos. Sic iste resultato pro un scala oriental:
adhoc-intvals-cmdline -v 0 2 3.5 5 7 9 10.5 12 18 20 22 24 27 30 33 36 1:1 10:9 11:9 4:3 3:2 5:3 11:6 2:1 0 182 347 498 702 884 1049 1200
Le vespera del 20 de octobre 2023 io esseva toto enthusiastic, proque mi programma semblava confirmar que le intonation optimal de facto muta al fin del cantion Mijn held zijn del gruppo nederlandese Van Dik Hout, que io tractava in 2020 hic. Sed post observation plus attente il deveniva clar que illo esseva causate per un error algorithmic, como io discoperiva le 22 de octobre.
Nam in le cantion occurre le accordos Gm (tonos: g-bes-d), Bes (bes-d-f), Dm (d-f-a), e alora Gm7 (g-bes-d-f). Assi le tono f muta de rolo de tertia minor in Dm, a septima minor in Gm7 (le accordo septima dominante). Le version del mi programma ancora erronee produceva pro iste accordos:
10 12 15 1:1 6:5 3:2 0 316 702 12 15 18 6:5 3:2 9:5 316 702 1018 27 32 40 3:2 16:9 20:9 702 996 1382 10 12 15 18 1:1 6:5 3:2 9:5 0 316 702 1018
Nos pote vider que le programma trova pro de tertia minor del accordo
Gm le ration 6:5, que face le rationes pro le accordo complete
10:12:15. Ma pro le accordo Dm, construite desde le septima del
Gm, iste rationes NON esseva trovate. Proque non?
Illo es estranie, proque le intervallos pro illo es presente in
rhmusicfuncs.c
.
Le explication es que le programma trovava le combination:
grado=0, RatSeq 30 3:2 702
grado=1, RatSeq 36 9:5 1018
grado=2, RatSeq 45 9:4 1404
que sembla pejor que
grado=0, RatSeq 27 3:2 702
grado=1, RatSeq 32 16:9 996
grado=2, RatSeq 40 20:9 1382
que pro isto esseva preferite.
Le error de programmation esseva que 30:36:45 pote e debe esser simplificate, per divider per 3, a 10:12:15, que alora gania de 27:32:40. Le algorithmo correcte pro derivar le numeros de ration optimal ex le rationes del grados de un accordo es:
lcm
(en: least common multiple, ia:
minime multiplo commun). In le exemplo: le lcm
de 2, 5 e 4 es 20.
lcm
,
e divide per le denominator.
gcd
(en: greatest common divisor, ia:
maxime divisor commun).
gcd
obtenite in passo 3. In le exemplo: le gcd
de
3, 9 e 9 es 3.
Ante le correction, le passos 3 e 4 mancava. Le mesme error esseva
anque presente in pilaintv.c
, sed
illac habeva quasi nulle effectos, proque le gcd
del numeratores de un scala complete es quasi sempre 1. Ma si
poc notas es usate, como in un accordo, le probabilitate
de haber un gcd > 1
es plus grande.
Post le correction del programma, le resultato es:
10 12 15 1:1 6:5 3:2 0 316 702 4 5 6 6:5 3:2 9:5 316 702 1018 10 12 15 3:2 9:5 9:4 702 1018 1404 10 12 15 18 1:1 6:5 3:2 9:5 0 316 702 1018
Nulle intervallo optimal muta in iste cantion “Mijn held zijn”.
Num in le exemplo de Khachaturian (Хачатурян) le programma de facto trova altores e rationes differente pro le tonos ‘as’ e ‘gis’? Si, mesmo tres: 19:10, 17:9 e 15:8, con 1111, 1101 e 1088 cents. Isto sona un poco farraginose e agitate, ma non mal. Le ‘gis’ es basse como in le solution Aristoxenos/Zarlino, ma 19:10 (1111 cents) non es tan alte que 48:25 (1129), assi que le transition non es tan extreme: inter 48:25 e 15:8 il ha un intervallo de 128:125 o non minus que 41 cents.
In 2020 mi exemplos esseva facite con vetule software, ancora pro MSDOS e le Soundblaster: equidistante, Pythagoras, Zarlino. Le resultatos es confirmate per un nove demonstration, finite le 20 de octobre 2023, que io ha facite con le medios plus moderne Lilypond e Midi. Le directorio AdHocAsgis contine tote le files. Il ha le partition, con le claves traditional, e con toto normalisate al clave de violino, con ottava bassa ubi necesse. Il ha un file midi e un ogg, que contine sex variantes: equidistante, Pythagoras, Zarlino, Adhoc farraginose, Adhoc applanate, e Adhoc sin alteration, con 19:10 usate pro as e gis.
Ora seque plus detalios del tres variantes Adhoc, le numeros 4, 5 e 6 in le demonstration.
Io ha create input pro mi programma adhoc-intvals-cmdline
in le file
asgis-intvals,
e le resultato es in le file
asgis-intvals.out.
Le tonos e positiones, a un chorda de guitarra o violino imaginari, es
relative al tono ‘a’. Primo un accordo Am, con ‘c’ (tertia minor) a 6:5, ‘e’
(quinta) a 3:2, naturalmente, e le ancora plus obvie ‘a’ (octava) a 2:1. Nihil de
special.
Pois le accordo Fm. Le tono ‘f’ es a 8:5, le quinta ‘c’ es a 6:5 (o a 12:5 se plus alte que le f, como es plus normal, ma le programma supporta solo 14 notos). Le programma placia le tertia minor ‘as’ non a 6:5 (316 cents) del ‘f’, ma 19:16 (298 cents), e arriva a un altor 19:10 (1111 cents) relative al ‘a’. Assi le numeros rational, 12:15:20 pro le accordo Am, ora es 12:16:19. Multo harmoniose, e isto es le scopo del programma: trovar intonationes con basse numeros rational.
Ora comencia le melodia que marca le transition del accordo Fm a AmM7 (A minor ma con un septima major, gis). Al ‘as’ remanente es addite un ‘g’. Le programma, como sempre, trova le intervallo con le numeros le plus basse que possibile: nam 17:16, ergo le nota ‘as’ es ora non a 19:10 (1111 cents), non a 15:8 (1088), sed a un tertie altor: 17:9 con 1101 cents. Isto causa le effecto farragionose e inquiete, que non sona agradabile, io trova. Nam le alteration non es necesse: le distantia inter ‘as’ e ‘g’ poterea esser tan ben 19:18 como 17:16. Con 19:18, le ‘as’ pote remaner a 19:10, como le previe e proxime nota, assi eliminante le inquietude. Le ‘g’ alora es a 9:5 (1018 cents) in vice de 16:9 (996).
Le solution algorithmic es de non considerar solo le notas que sona insimul, ma definir un certe fenestra de tempore, non tro curte e non tro longe, e reguardar tote le notas in iste contexto. Pro isto io ha facite un variante de asgis-intvals, nam asgis-intvals-compr (con “compr” como comprimite), in le qual io ha combinate plus notas in un linea. In le resultato asgis-intvals-compr.out nos pote vider que le ‘as’ es ora sempre a 19:10, e le ‘gis’ a 15:8.
Isto sona plus tranquille, e melior. Le quinte variante in le demonstration, midi, ogg.
In le ultime e sexte variante del demonstration, de ‘as’ e ‘gis’ ha le mesme altor, ma sin usar un intonation equidistante. Forsan iste intonation es similar al qual que le violinista Leonid Kogan (Леонид Коган) usava in 1965?
Comocunque, in iste variante in mi demonstration le ‘gis’ es anque a 19:10, e le distantia del ‘gis’ al quinta ‘e’ (3:2) es 19:15 (409 cents), in vice de 5:4 (386 cents).
Isto anque sona satis ben, in mi opinion.
Con data de completion le 26 octobre 2023 io ha anque applicate le
methodo del intonation ad hoc al pecia Vicnia, que era
previemente discutite in
episodio 12.
Le partitura es
hic
con le clave de alto, e
hic
con le clave de violino ottava bassa.
Io ha notate le intervallos
qui,
e le
resultato ex mi programma adhoc-intvals-cmdline
es
qui.
Un variante con notas clarificante es
qui.
Le resultato (midi, ogg) in mi opinion sona multo ben. On audi, o io audi al minus, le harmonia del frequentias con parve rationes, i.e. rationes que pote esser exprimite per numeros integre satis basse.
Iste intonation ha alcun del characteristicas que io describeva como desiderabile, ja le 8 de octobre quando io non habeva habite le idea del intonation ad hoc, que nam me veniva in mente al 16 de ille mense. Ma non tote le punctos es convincente, forsan proque le contramelodias del altere instrumentos non es equal a illo que io addeva pro mi demonstration.
Ecce: