Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chord tool #14

Open
joopvdl opened this issue Feb 25, 2018 · 22 comments
Open

chord tool #14

joopvdl opened this issue Feb 25, 2018 · 22 comments

Comments

@joopvdl
Copy link

joopvdl commented Feb 25, 2018

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
Copy link
Owner

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

@joopvdl
Copy link
Author

joopvdl commented Feb 27, 2018 via email

@gbrandt1
Copy link
Owner

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
Copy link
Owner

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
Copy link
Author

joopvdl commented Feb 28, 2018 via email

@gbrandt1
Copy link
Owner

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
Copy link
Author

joopvdl commented Feb 28, 2018 via email

@joopvdl
Copy link
Author

joopvdl commented Feb 28, 2018 via email

@gbrandt1
Copy link
Owner

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
Copy link
Author

joopvdl commented Mar 1, 2018 via email

@gbrandt1
Copy link
Owner

gbrandt1 commented Mar 1, 2018

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
Copy link
Author

joopvdl commented Mar 1, 2018 via email

@gbrandt1
Copy link
Owner

gbrandt1 commented Mar 1, 2018

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
Copy link
Author

joopvdl commented Mar 1, 2018 via email

@joopvdl
Copy link
Author

joopvdl commented Mar 1, 2018 via email

@gbrandt1
Copy link
Owner

gbrandt1 commented Mar 1, 2018

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
Copy link
Author

joopvdl commented Mar 1, 2018 via email

@gbrandt1
Copy link
Owner

gbrandt1 commented Mar 1, 2018

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

@molluskderek
Copy link

molluskderek commented Jun 4, 2018

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
Copy link

77377 commented Apr 3, 2019

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
Copy link
Owner

gbrandt1 commented Apr 3, 2019

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
Copy link

77377 commented Apr 4, 2019

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!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants