Cliff Posted May 21, 2023 Share Posted May 21, 2023 Beginners question: Starting from a single melodic omn sequence, would it be possible to have function in Opusmodus which calculates a chord progression, which would qualify to harmonize the input. I am aware that this is a underdetermined problem, so the function would require some further inputs constraining the solutions, like harmonic rhythm, size of chords, tonality, mode, interval ( i.e. tertiary, quartal). Even if the solution space is vast, a random solution, which may be fixed with seed would be great. I know about gen-chord… but harmonization spanning multiple melody notes seems more complex. Any thoughts? Quote Link to comment Share on other sites More sharing options...
JulioHerrlein Posted May 21, 2023 Share Posted May 21, 2023 Maybe this could be better addressed with AI. Actually, tonality is a very complex endeavour, a very idiomatic system. A melody can assume multiple functions. I like to think it as a system of scales with 9 different degrees or modal stations. Transposing this stations through the 12 keys is enough to get all the progressions of the common practice and jazz, a sort of George Russell stuff. Some time ago I build an Opusmodus library with chords, but after I realised that would be easier to just midi input the chords I like and process the voicings with the drop-voicing function I helped Janusz to create. Each composition have some unique and handmade stuff. For me, that part is the choice of pitches and underlying harmony. I have my sensibility based in years of hearing and playing. Probably the AI will bring some ease to the process, but as humans, we need time to grasp and really internalize the material. The same occur with Opusmodus output, that sometimes brings more material than we can deal with, in the process of building a piece. Part of the problem is also dealing with form and the cognitive aspect of the information flow. Best, Julio opmo 1 Quote Link to comment Share on other sites More sharing options...
Cliff Posted May 22, 2023 Author Share Posted May 22, 2023 Thank you Julio for your answer. JulioHerrlein 1 Quote Link to comment Share on other sites More sharing options...
Cliff Posted May 22, 2023 Author Share Posted May 22, 2023 Seems in other environments there are ideas Just a moment... WWW.RESEARCHGATE.NET Algorithmic composition, a gentle introduction to music Quote Link to comment Share on other sites More sharing options...
opmo Posted May 22, 2023 Share Posted May 22, 2023 It is not very complex to do that but at the moment I don't have the time to do that, maybe in the future. Cliff 1 Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted May 22, 2023 Share Posted May 22, 2023 gen-chord3 is your friend Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted May 22, 2023 Share Posted May 22, 2023 I'm in travel actually and very busy but i wrote two short example for you to explore, not exactly what you ask for but I hope interesting to study for you and hopefully inspiring for further exploration. Happy study ;;; EXAMPLE 1 ;;; =================== (progn ; basic version (setf melo.pch (vector-to-pitch '(c4 e5) (gen-noise 64))) (setf melo.len (flatten (rnd-sample 64 '(h. h q (e e)(s s s s) -q)))) (setf melo (make-omn :pitch melo.pch :length melo.len )) (setf chords-types '((-4 -6 -9 -16)(-7 -9 -12 -15)(-2 -8 -12 -17))) (setf base-acc (gen-chord3 melo.pch chords-types :cycle nil :relative t)) (setf acc (chord-interval-replace '(1 2 3 4) '(-11 -10 -9 -8) (ambitus '(c3 g5) (length-legato (length-weight (make-omn :pitch base-acc :length melo.len )))))) (ps 'gm :vn* (list melo) :pg (list acc) :time-signature '(4 4) ) ) ;;; EXAMPLE 2 ;;; ========================= (progn ; modal version (setf melo.pch (vector-to-pitch '(c4 e5) (gen-noise 64))) (setf melo.len (flatten (rnd-sample 64 '(h. h q (e e)(s s s s) -q)))) (setf melo (make-omn :pitch melo.pch :length melo.len )) (setf chords-types '((-4 -6 -9 -16)(-7 -9 -12 -15)(-2 -8 -12 -17))) (setf base-acc (gen-chord3 melo.pch chords-types :cycle nil :relative t)) (setf acc (chord-interval-replace '(1 2 3 4) '(-11 -10 -9 -8) (ambitus '(c3 g5) (length-legato (length-weight (make-omn :pitch base-acc :length melo.len )))))) (setf path (tonality-series '(lydian) :root '(d4 bb4 fs3 c4 a3) :map '(octave))) (setf melo.map (tonality-map path (omn-to-time-signature melo '(4 4)))) (setf acc.map (tonality-map path (omn-to-time-signature acc '(4 4)))) (ps 'gm :vn* (list melo.map) :pg (list acc.map) ) ) SB. Modal-Example-For-Cliff.mp3 JulioHerrlein and opmo 1 1 Quote Link to comment Share on other sites More sharing options...
david Posted May 22, 2023 Share Posted May 22, 2023 it sounds great!! Stephane Boussuge 1 Quote Link to comment Share on other sites More sharing options...
Cliff Posted May 23, 2023 Author Share Posted May 23, 2023 Great - Thank you Stephane, for taking the time despite of travelling. I will study, based on your pointers. Stephane Boussuge 1 Quote Link to comment Share on other sites More sharing options...
Cliff Posted May 23, 2023 Author Share Posted May 23, 2023 I did experiment with the code, and I must admit, it is a kind of wonder:-) My hunch is that part of the magic lies in fact that the chords and melody do not 100% have same rhythm thanks to length-weight. I am learning a lot - again thanks a lot. Stephane Boussuge 1 Quote Link to comment Share on other sites More sharing options...
Cliff Posted May 23, 2023 Author Share Posted May 23, 2023 Is it possible to span multiple consecutive melody notes (i.e half bar) and derive from them the chords? Quote Link to comment Share on other sites More sharing options...
Stephane Boussuge Posted May 23, 2023 Share Posted May 23, 2023 5 minutes ago, Cliff said: Is it possible to span multiple consecutive melody notes (i.e half bar) and derive from them the chords? You can use get-harmonic-path function. S. Quote Link to comment Share on other sites More sharing options...
Cliff Posted May 23, 2023 Author Share Posted May 23, 2023 Thanks Stephane, the possibilities with OM seems infinite, and it shows me I need to study the documentation even more opmo and Stephane Boussuge 2 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.