gbrandt1 / southpole-vcvrack

Southpole Modules for VCV Rack
Other
67 stars 24 forks source link

chord tool #14

Open joopvdl opened 6 years ago

joopvdl commented 6 years ago

Hey Gerhardt,

the Riemann module made me think about the following. You say you have no capability to compose tonal music (or something like that). What about a bit of help from me? I am a trained composer and arranger. I find the Riemann thing interesting, but quite complicated. I could help you out designing a chord creator that's easier to use, and built from a composer's perspective. Would you be interested?

gbrandt1 commented 6 years ago

hi, sure, yes i'm very interested to hear your ideas!

joopvdl commented 6 years ago

Ok. Let's do that! I won't be home for the next few days, but after that, let's open up a conversation. First question would be: what was the general idea behind the creation of Riemann?

2018-02-27 0:20 GMT+01:00 gbrandt1 notifications@github.com:

hi, sure, yes i'm very interested to hear your ideas!

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-368686924, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGQug5Taf8Uk2vSTOdSCeak5VNbxvks5tYzxGgaJpZM4SSPn0 .

gbrandt1 commented 6 years ago

basically i wanted to give easy access to as many chords as possible and provide the simplest way possible to get harmonically correct chord progressions. the basic design is based on a tonnetz and exploits the fact that it repeats every three rows along the major triad axis. basically you're looking at 3 stacked circles of fifths shifted by thirds, as in the tonnetz. its cutting open the tonnetz torus and projecting it onto a 2D plane.

so if you provide a voltage 0 -12V on the P5 input you go around the circle of fifths once. on the other input you go along the major thirds for every 3V.

then the parts provide triads to thirteenth major/minor or augmented/diminished chords.

the whole thing just works on the chromatic scale at this point.

an obvious extension would be constraining to scales/modes and provide additional chord shapes, as well as providing more traditional voicings (currently octaves are just successively counted up/down part by part), and i would like to implement a triggered traversal by PLR transforms.

gbrandt1 commented 6 years ago

so one thing you could for sure help me with is to provide input onto how to implement paths for traditional chord progressions, or automatic harmonization, based on a root note input, for example. the P5 / M3 playhead is just the beginning for traversing the complete "playfield"

joopvdl commented 6 years ago

Ok. Let's do that! I think that harmony, chords, is basically quite complex, so the first thing would be to scale down on possibilities. Not as many chords as possible, but as many chords as needed in a certain situation. That way, it's a lot easier to keep an overview of what you are doing, or what you want to achieve.

So, let's say you create a model based on one tonality (key), let's say C, why not :) Then make the chords a bit simpler, basically seventh chords max. I think most people will not use any more complex chords than that in a tonal piece.

Then you have the 7 basic steps: I II III IV V VI VII . In C, that's (just triads) C, Dm, Em, F, G, Am, Bdim. B is not used very often, so we can ignore that one mostly. C is the most important chord, F and G are next, then Dm and Am, then Em.

There are some common chord sequences, like C-F-G-C, etc. We could come up with some suggestions for that, or (that would be nice!) create some sort of chord sequencer, where you can enter the chord sequence, and the duration of each chord.

How's that for a start (of the discussion)?

Best, Joop

2018-02-27 10:41 GMT+01:00 gbrandt1 notifications@github.com:

so one thing you could for sure help me with is to provide input onto how to implement paths for traditional chord progressions, or automatic harmonization, based on a root note input, for example. the P5 / M3 playhead is just the beginning for traversing the complete "playfield"

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-368809915, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGTM9gt0xvTwkAT6W25MvEQN7r6Cfks5tY828gaJpZM4SSPn0 .

gbrandt1 commented 6 years ago

ok, restrictions to a certain scale+root are definitely on the menu. acutally they are already in development and mostly working, i'm just still considering things like selection knobs etc.
i'll probably replace the transposition knob (which i now think doesn't make too much sense the way it's implemented) with root / scale knobs.

for a visual guide to the basic chords I,II, ... you mention i was already considering labels (as in Navichord), will implement and check if that doesn't make the field too busy.

concerning dropping chords other than major/minor for now and chords with more than 4 parts this makes sense but i think is easy to do with the existing knobs. but i already have some other tools that constrain to only maj/min chords and i find the progressions they provide sound quite basic. so i agree to constrain to them first but i would like to keep the other options open. more complex chords i think are quite interesting for ambient styles, in a quite static arrangement with almost no movement, just to steer different drones/oscillators that will form a complete, harmonically fitting total soundscape together?

concerning a sequencer, there is already the Amalgated Harmonics offering, so we should come up with some thing different than that. since we can reach everything with just two dimensions it might be an idea to provide sequences based on defined movement steps just along the P5/M3 axes. or, just in one dimension using the PLR transforms? do these get much use in real word arranging or are they just for academics and makers of YouTube videos?

concerning selection of chord progressions, in principle one could provide a library, but it might be nicer to provide a smooth CV capable solution, for example based on common chord following rules?

one principle i would like to follow with the Riemann is that a constrained settings one always gets a "correct" response/harmonics... but when opening up one can go back to more complex twelve-tone based music

joopvdl commented 6 years ago

Maybe it would be a good idea to take a step back. What would you like to accomplish?

2018-02-28 17:24 GMT+01:00 gbrandt1 notifications@github.com:

ok, restrictions to a certain scale+root are definitely on the menu. acutally they are already in development and mostly working, i'm just still considering things like selection knobs etc. i'll probably replace the transposition knob (which i now think doesn't make too much sense the way it's implemented) with root / scale knobs.

for a visual guide to the basic chords I,II, ... you mention i was already considering labels (as in Navichord), will implement and check if that doesn't make the field too busy.

concerning dropping chords other than major/minor for now and chords with more than 4 parts this makes sense but i think is easy to do with the existing knobs. but i already have some other tools that constrain to only maj/min chords and i find the progressions they provide sound quite basic. so i agree to constrain to them first but i would like to keep the other options open. more complex chords i think are quite interesting for ambient styles, in a quite static arrangement with almost no movement, just to steer different drones/oscillators that will form a complete, harmonically fitting total soundscape together?

concerning a sequencer, there is already the Amalgated Harmonics offering, so we should come up with some thing different than that. since we can reach everything with just two dimensions it might be an idea to provide sequences based on defined movement steps just along the P5/M3 axes. or, just in one dimension using the PLR transforms? do these get much use in real word arranging or are they just for academics and makers of YouTube videos?

concerning selection of chord progressions, in principle one could provide a library, but it might be nicer to provide a smooth CV capable solution, for example based on common chord following rules?

one principle i would like to follow with the Riemann is that a constrained settings one always gets a "correct" response/harmonics... but when opening up one can go back to more complex twelve-tone based music

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-369290213, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGRXdO-QbbDRP1Db0-44ByZhpVkbPks5tZXqggaJpZM4SSPn0 .

joopvdl commented 6 years ago

apart from the basic question in my previous answer (I am just trying to understand what your goals are, what your interests and knowledge are, and if and how I can be of any help), I think the soundscape approach is a nice idea, although it may not be too much rooted in traditional harmony. More complex chords would be very nice for that, I agree. We'll get back to that. As you say, traditional harmony gives quite unspectacular results most of the time, because, well, it's just a bunch of chords that fit well together, so it sounds really familiar. That's why I haven't used the Amalgated harmonics stuff much, because the result is quite predictable. In that light, the randomish approach of Martin Lueder in using Riemann gives more interesting results, although they too are quite distant from traditional harmony.

I think we could come up with a sequencer that's way more interesting than the chord seq of Amalgated harm. It could be that would be combined with a sort of chord matrix. Because, as I understand it now, there's a need for vertical structure (how the chords are built) and horizontal structure (which chords are used, how they connect, and how long they are used).

Do I make any sense?

2018-02-28 17:37 GMT+01:00 Joop van der Linden joopvanderlinden@gmail.com:

Maybe it would be a good idea to take a step back. What would you like to accomplish?

2018-02-28 17:24 GMT+01:00 gbrandt1 notifications@github.com:

ok, restrictions to a certain scale+root are definitely on the menu. acutally they are already in development and mostly working, i'm just still considering things like selection knobs etc. i'll probably replace the transposition knob (which i now think doesn't make too much sense the way it's implemented) with root / scale knobs.

for a visual guide to the basic chords I,II, ... you mention i was already considering labels (as in Navichord), will implement and check if that doesn't make the field too busy.

concerning dropping chords other than major/minor for now and chords with more than 4 parts this makes sense but i think is easy to do with the existing knobs. but i already have some other tools that constrain to only maj/min chords and i find the progressions they provide sound quite basic. so i agree to constrain to them first but i would like to keep the other options open. more complex chords i think are quite interesting for ambient styles, in a quite static arrangement with almost no movement, just to steer different drones/oscillators that will form a complete, harmonically fitting total soundscape together?

concerning a sequencer, there is already the Amalgated Harmonics offering, so we should come up with some thing different than that. since we can reach everything with just two dimensions it might be an idea to provide sequences based on defined movement steps just along the P5/M3 axes. or, just in one dimension using the PLR transforms? do these get much use in real word arranging or are they just for academics and makers of YouTube videos?

concerning selection of chord progressions, in principle one could provide a library, but it might be nicer to provide a smooth CV capable solution, for example based on common chord following rules?

one principle i would like to follow with the Riemann is that a constrained settings one always gets a "correct" response/harmonics... but when opening up one can go back to more complex twelve-tone based music

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-369290213, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGRXdO-QbbDRP1Db0-44ByZhpVkbPks5tZXqggaJpZM4SSPn0 .

gbrandt1 commented 6 years ago

yes, that makes sense. but i think it might move away a bit from the tonnetz-traversal based approach if taken literally. it sounds more like the Chords view and sequencer in Sundog Song Studio, where there is a chord matrix and a sequencer as you suggest. so as i said i would prefer to sequence "instructions" for moving to positions on the tonnetz rather than directly entering chords - the result should, at "moderate settings", of course be comparable.
the vertical structure and horizontal structure you mention should be just a (not neccessarily continuous) path along chord root notes on the tonnetz - along with information about what chord shape to play at each point on the path (for basic maj/min triads this is fully defined by the position of the playhead), encoded in terms of, for example, a vector on the tonnetz. one idea i have there is to perhaps define a secondary point orbiting the playhead, to define type and part number of the chords. but, as you say, it may be better to leave that feature to a later version and focus on the basics first. timing can come from whatever clocks the sequence, i would outsource that for now (the arpeggio in my own example is timed by an euclidean rhythm from an SNS, for example).

sorry if my stream-of-consciousness style answers seem not very well defined - they're not. i just want to play with harmony in a flexible and CV controllable modular way and i think it's a novel terrain we're entering here, there's not much precedent - closest are the o_C Automatonnetz and Tonnetz Sequent but they're definitely not as powerful and intuitive as what i hope to achieve. so maybe it would be easier for you to say what you would like to see in the module rather than trying to understand what i want?

joopvdl commented 6 years ago

Well, I just want to help out, use my knowledge for the benefit of Rack and/or modules and developers I like. And you said you wanted a more tonal approach, and did not have much knowledge about that. So I am just thinking about a tool that would be of use for Rack, with a tonality based approach to harmony.

I do not really understand the Riemann (tonnetz) system as a means to create interesting harmonic structures. As I understand, it was invented for just intonation, that's a totally different area. Riemann is based on movement around 5ths and 3rds axes (axises?) That's not wat harmony does. Harmony is based around scales and the chords built on each scale.

2018-02-28 20:56 GMT+01:00 gbrandt1 notifications@github.com:

yes, that makes sense. but i think it might move away a bit from the tonnetz-traversal based approach if taken literally. it sounds more like the Chords view and sequencer in Sundog Song Studio, where there is a chord matrix and a sequencer as you suggest. so as i said i would prefer to sequence "instructions" for moving to positions on the tonnetz rather than directly entering chords - the result should, at "moderate settings", of course be comparable. the vertical structure and horizontal structure you mention should be just a (not neccessarily continuous) path along chord root notes on the tonnetz

  • along with information about what chord shape to play at each point on the path (for basic maj/min triads this is fully defined by the position of the playhead), encoded in terms of, for example, a vector on the tonnetz. one idea i have there is to perhaps define a secondary point orbiting the playhead, to define type and part number of the chords. but, as you say, it may be better to leave that feature to a later version and focus on the basics first. timing can come from whatever clocks the sequence, i would outsource that for now (the arpeggio in my own example is timed by an euclidean rhythm from an SNS, for example).

sorry if my stream-of-consciousness style answers seem not very well defined - they're not. i just want to play with harmony in a flexible and CV controllable modular way and i think it's a novel terrain we're entering here, there's not much precedent - closest are the o_C Automatonnetz and Tonnetz Sequent but they're definitely not as powerful and intuitive as what i hope to achieve. so maybe it would be easier for you to say what you would like to see in the module rather than trying to understand what i want?

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-369362985, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGf5jYoHa5FUoSmtXU6gQfa_Jl4zaks5tZa9jgaJpZM4SSPn0 .

gbrandt1 commented 6 years ago

and your help is useful and i appreciate it! as far as i understand the tonnetz, it was originally set up for just intonation but if done in that way is not actually a repeating structure, but infinite. the modern tonnetz is based on equal temperatment which allows it to wrap around and be completely represented by a 12x12 matrix, or - as in Riemann - even by a 3x12 matrix when wrapping so that the major third axis is aligned. i think to marry the two things - traditional chord progression within a scale, and the tonnetz style playfield - the crucial thing might be the interface between the sequencer and the tonnetz, a protocol that describes chord progression as a sequence of steps on the tonnetz. the sequencer could look like a traditional sequencer where chords are entered in the numerical form (I, ii, III, ...) but it outputs CV voltage which takes appropriate steps on the tonnetz to move to the position representing that chord.

joopvdl commented 6 years ago

So if I understand correctly, the sequencer would define the root note of the chord, and the tonnetz the structure of the chord? That would work!

About the sequencer: I suggest each step has a duration protocol, from 1/4th (or even 1/8th) to 4 or 8 bars. So you can easily create interesting forms. The thing about harmony is that the rhythm of the chord changes are where it gets interesting. (and the top note, by the way)

2018-03-01 10:31 GMT+01:00 gbrandt1 notifications@github.com:

and your help is useful and i appreciate it! as far as i understand the tonnetz, it was originally set up for just intonation but if done in that way is not actually a repeating structure, but infinite. the modern tonnetz is based on equal temperatment which allows it to wrap around and be completely represented by a 12x12 matrix, or - as in Riemann - even by a 3x12 matrix when wrapping so that the major third axis is aligned. i think to marry the two things - traditional chord progression within a scale, and the tonnetz style playfield - the crucial thing might be the interface between the sequencer and the tonnetz, a protocol that describes chord progression as a sequence of steps on the tonnetz. the sequencer could look like a traditional sequencer where chords are entered in the numerical form (I, ii, III, ...) but it outputs CV voltage which takes appropriate steps on the tonnetz to move to the position representing that chord.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-369532946, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGXYAUKXjD_hquCB5Gcw_LsrdVILuks5tZ8ANgaJpZM4SSPn0 .

gbrandt1 commented 6 years ago

i thought in Roman numeral notation of chords the root note doesn't really come in once the scale is defined (which can be done on the Riemann itself) - you just have I-IV-V-I etc... . but for modulation it's probably best to also track it. same goes for the top note - you are referring to voicing/inversion here? rhythm as i said i was planning to provide via rhythmic clocking but this can be reconsidered - right now there isn't any sequencer around that let's users easily define arbitrary rhythmic structure i think. workarounds are needed where, for example on Seq3, the first row is used for the (root) note, the second for the duration - and in our case, the third row could then define the voicing. food for thought.

joopvdl commented 6 years ago

The Roman number is the root note of the chord. So in the key of C (root note of the scale) the III chord has a root note of E.

top note is, indeed, voicing, and the melody of the chord sequence. Which brings the question: what are the chords going to define? Static or moving chords (where the top line is the main melody) or a chord skeleton for melodies or other stuff that will follow the chords? Rhythmically, I am thinking along the lines of Bidoo's dTroy, where each step has a repeat function. So if you would have 8 or 16 steps, each step could have a user definable length. So that would not really be a repeat function, but a length choice. Rows would be great for the upper chord notes. Selection switch for the number of chord notes (from 3 to 7, if you want to include 13th chords). And a few options: maj/min3, natural/dim/aug5, maj/min/dim7 (the last could better be called 6), maj/min9, natural/augmented11, maj/min13. Where you could ask yourself if all functions should be available all the time, for instance a maj3 will not (theoretically speaking) go together with a natural 11, or a diminished9 will not go together with a min3. Btw, diminished 9 is usually called flat nine, same for diminished 5 etc.

Keep in mind that the scale, and the steps in the scale, dictate a certain chord order: I-maj, II-min, III-min-, IV-maj, V-maj, VI-min, VII-dim. That's in major. Minor comes with its own complications, because you will have to define what minor scale you use. And then there's blues scale, which is sort of major with flat7's. Pentatonic, which is a variation on maj (or min, depending on your view).

Oh, are you familiar with the concept of parallel tonalities? Where Cmaj is parallel to A natural minor, because they share the same notes in the scale? That's a theoretically solid way to organise the scale root notes. I can elaborate some more, but that could be a very efficient way, in a similar way as the Riemann.

2018-03-01 11:50 GMT+01:00 gbrandt1 notifications@github.com:

i thought in Roman numeral notation of chords the root note doesn't really come in once the scale is defined (which can be done on the Riemann itself)

  • you just have I-IV-V-I etc... . but for modulation it's probably best to also track it. same goes for the top note - you are referring to voicing/inversion here? rhythm as i said i was planning to provide via rhythmic clocking but this can be reconsidered - right now there isn't any sequencer around that let's users easily define arbitrary rhythmic structure i think. workarounds are needed where, for example on Seq3, the first row is used for the (root) note, the second for the duration - and in our case, the third row could then define the voicing. food for thought.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-369553952, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGdVfYy6B1sk-5xnvqNUFg0V649i_ks5tZ9JrgaJpZM4SSPn0 .

joopvdl commented 6 years ago

btw I just realised things would get really interesting once a random function is included. Sort of a chord version of Martin Lueders quantum, combined with a Turing-ish randomness.

-a Turing generated melody with 4 (or less, or more) voices (block chords, like the sections in a bigband, or a string section), following a chord structure. The chord structure could either be manually or randomly determined. Sort of automatic harmonisation of (random) melodies. -a slowly evolving chord structure, following natural steps of a scale, or (manually or randomly set) alterations.

2018-03-01 12:15 GMT+01:00 Joop van der Linden joopvanderlinden@gmail.com:

The Roman number is the root note of the chord. So in the key of C (root note of the scale) the III chord has a root note of E.

top note is, indeed, voicing, and the melody of the chord sequence. Which brings the question: what are the chords going to define? Static or moving chords (where the top line is the main melody) or a chord skeleton for melodies or other stuff that will follow the chords? Rhythmically, I am thinking along the lines of Bidoo's dTroy, where each step has a repeat function. So if you would have 8 or 16 steps, each step could have a user definable length. So that would not really be a repeat function, but a length choice. Rows would be great for the upper chord notes. Selection switch for the number of chord notes (from 3 to 7, if you want to include 13th chords). And a few options: maj/min3, natural/dim/aug5, maj/min/dim7 (the last could better be called 6), maj/min9, natural/augmented11, maj/min13. Where you could ask yourself if all functions should be available all the time, for instance a maj3 will not (theoretically speaking) go together with a natural 11, or a diminished9 will not go together with a min3. Btw, diminished 9 is usually called flat nine, same for diminished 5 etc.

Keep in mind that the scale, and the steps in the scale, dictate a certain chord order: I-maj, II-min, III-min-, IV-maj, V-maj, VI-min, VII-dim. That's in major. Minor comes with its own complications, because you will have to define what minor scale you use. And then there's blues scale, which is sort of major with flat7's. Pentatonic, which is a variation on maj (or min, depending on your view).

Oh, are you familiar with the concept of parallel tonalities? Where Cmaj is parallel to A natural minor, because they share the same notes in the scale? That's a theoretically solid way to organise the scale root notes. I can elaborate some more, but that could be a very efficient way, in a similar way as the Riemann.

2018-03-01 11:50 GMT+01:00 gbrandt1 notifications@github.com:

i thought in Roman numeral notation of chords the root note doesn't really come in once the scale is defined (which can be done on the Riemann itself) - you just have I-IV-V-I etc... . but for modulation it's probably best to also track it. same goes for the top note - you are referring to voicing/inversion here? rhythm as i said i was planning to provide via rhythmic clocking but this can be reconsidered - right now there isn't any sequencer around that let's users easily define arbitrary rhythmic structure i think. workarounds are needed where, for example on Seq3, the first row is used for the (root) note, the second for the duration - and in our case, the third row could then define the voicing. food for thought.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-369553952, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGdVfYy6B1sk-5xnvqNUFg0V649i_ks5tZ9JrgaJpZM4SSPn0 .

gbrandt1 commented 6 years ago

yes sorry, i wasn't clear about differentiating root note of the scale (ie. root note of the tonic, C for C) and root note of the individual chords.

and yes the rhythmic structure traditionally available in modular is this "ratcheting" (afaik Schulze et al. built an entire career on that ;-) ) - which is not the same as defining note length since it repeats notes rather than making them longer.

i am familiar with parallel tonalities, in the beginning i wanted to just implement two nested circle of fifths (outer circle for major, inner circle for parallel minor tonalities) and then enable walk around producing a simple fifth or fourth progression. but then i realized if a added just one third row i could cover the entire space of the tonnetz, enabling two dimensions to traverse.

i'll give a thought how to implement a way to automatically follow restrictions and complications you mention correctly. this is indeed the field i'm least familiar with and where your help is most valuable.

and yes, random traversal should always be possible. it's what i did in my initial video example by way of the Two Drunks module.

joopvdl commented 6 years ago

you know quite a lot more about harmony than I initially thought :)

2018-03-01 13:22 GMT+01:00 gbrandt1 notifications@github.com:

yes sorry, i wasn't clear about differentiating root note of the scale (ie. root note of the tonic, C for C) and root note of the individual chords.

and yes the rhythmic structure traditionally available in modular is this "ratcheting" (afaik Schulze et al. built an entire career on that ;-) ) - which is not the same as defining note length since it repeats notes rather than making them longer.

i am familiar with parallel tonalities, in the beginning i wanted to just implement two nested circle of fifths (outer circle for major, inner circle for parallel minor tonalities) and then enable walk around producing a simple fifth or fourth progression. but then i realized if a added just one third row i could cover the entire space of the tonnetz, enabling two dimensions to traverse.

i'll give a thought how to implement a way to automatically follow restrictions and complications you mention correctly. this is indeed the field i'm least familiar with and where your help is most valuable.

and yes, random traversal should always be possible. it's what i did in my initial video example by way of the Two Drunks module.

— You are receiving this because you authored the thread. Reply to this email directly, view it on GitHub https://github.com/gbrandt1/southpole-vcvrack/issues/14#issuecomment-369575217, or mute the thread https://github.com/notifications/unsubscribe-auth/AfyGGUKND9fAHIuzHqx3jnpHNnXwfmszks5tZ-gKgaJpZM4SSPn0 .

gbrandt1 commented 6 years ago

i did quite some reading on music theory in the past years. what i lack is practice and experience of actual composition.

molluskderek commented 6 years ago

Hey, just wanted to chime in on some ideas. This is a fun module. joopvdl has some good ideas...though it might be nice to open up the possibilities some more. Firstly, I think the definition of "traditional" harmony has changed quite a bit over the 20th century. Starting with the idea that one chord necessarily leads to only a certain few options of other chords. That was kind of expanded very early (Debussy, Schoenberg, Stravinsky, etc, etc.) Some good reads on this subject are Persichetti's "Twentieth Century Harmony" and Ludmilla Ulehla's "Contemporary Harmony". They discuss the opening up of harmony to allow any note/chord to progress to any other note/chord. That said, there are still some traditional devices which sometimes come in handy, such as voice-leading.

All of that said, we also have the influence of pop, jazz, folk, etc music which is very much tied to traditional harmony pre-20th century. I see two possibilities which could allow for a very wide range of compositional processes. The first is, as joop mentioned, basically a chord sequencer where you can just dial in the sequence you want (Gratrix's "Chord G-1" module sort of does this). Another is having ways of constraining the array of chords, like "C Major" or "quartal" or "chromatic". Or even combinations, like "C Major/all major chords" (meaning only play Cmaj/Fmaj/Gmaj chords). And as in joop's idea, constraining to certain traditional progressions (if that's really possible, you get into larger compositional forces there, like cadential patterns, that may be better done with a DAW).

Also, just a minor quibble...joop mentioned the major chord with natural 11th...yes, in certain types of harmony, this is a clash because you have the rub of maj 3rd and p4. But it's just fine in some circumstances when that tension is needed (film music, anyone?). Again, I guess something like that can easily be optional via a parameter.

What if the module is very similar to what you have now, but with the addition of a parameter for scale constraints (with a menu ranging from maj/min to synthetic scales), a parameter for chord types (all maj, all sus, quartal, default [aka adhere to scale], etc.) This way, you have the option of non-diatonic progressions, as in the current version, or constraining to a scale, or only the major chords of that scale, for example. If they could be changed by CV, that would be cool too. Then maybe a CV parameter for how it jumps, but instead of just 3rds/5ths, it could be any interval or random, or in accordance to traditional diatonic harmony. A great graphic component of this could be that the matrix greys out the notes that aren't available in that scale.

77377 commented 5 years ago

Hi everybody, I wanna chime in even if this seems to be a pretty dead convo.

There's a book outlining how a chord generator putting out musical and aesthetically pleasing chord progressions programmatically. It's by a guy called Timoczko called 'A geometry of music' and it features a lot of graphs whose nodes are chords and the edges transformations/modulations which would be permissible in the western tradition of functional harmony. Doing the same thing as Riemanns torus, traversing the graph produces sensible sounding chord progressions. When I saw that stuff, I immediately thought it'd be supernice to have a module implementing them,

have a look: https://www.amazon.de/Geometry-Music-Counterpoint-Extended-Practice/dp/0195336674

I'd be willing to help where I can. My background is in python/pure data rather than C/C++ though. (;

gbrandt1 commented 5 years ago

Hi guys,

just to give a sign of life and let you know that while development of my module package is indeed currently stalled because I'm busy with other projects (a.k.a. work, personal life, etc.) it is not dead.

I am in fact aware of Timoczko's work and read some of his papers available online. However, just as the whole Neo-Riemannian approach I now agree that all of it is more suited towards analysis rather than generation. Nevertheless I've been giving a lot of thought on how these musical structures can be implemented into modules, either into an extended version of Riemann or individual modules for different models / chord structures.

I can't promise when I can get back to development, but of course I don't want my package to drop out after the 1.0 release. so maybe around the release time I can pick up.

Cheers!

77377 commented 5 years ago

Stuff happens, such is life. I really can't fault you for prioritising, But if you can, don't let your modules fall of the train, they are too good to loose, you know.

Oh, so you checked and Timoczko's ideas aren't the way to go either? Oh, that's dissapointing, he made a point of insisting his concepts are derived for composers rather than theoreticians,

The thing I would wanna see markov chain chord sequence, where the state diagram is somehow restricted to only allow transitions to chords targetable by standard modulation techniques (common tone, parallel key, enharmonic, giant steps type substitutions, or somesuch talking outta my ass here anyway (:).

Oh, but that's essentially your Riemann chord generator with a different diagram, and built in randomisation, right? >.< Whatever, I'm curious as hell about what you'll come up with. Cheers!