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

Feature request: Ability to add chords and progressions to sequencer patterns #1311

Open
tithrion opened this issue Dec 30, 2024 · 15 comments
Open
Assignees
Labels
Enhancement New feature or request Resolved Resolved but not yet released or tested by reporter
Milestone

Comments

@tithrion
Copy link

tithrion commented Dec 30, 2024

Is your feature request related to a problem? Please describe.
Found the MIDI package (Beats, Chords and Progressions in MIDI) useful when working with Ardour.
Here it is installed as ardour-media-.extra (or from http://stuff.ardour.org/loops/ArdourBundledMedia.zip)

Originally it comes from https://github.com/ldrolez/free-midi-chords
or https://github.com/ldrolez/free-midi-chords/releases and is MIT licensed.
The beats in the Ardour set were generated with MMA and are CC-by-0 licensed.

Describe the solution you'd like
To install it should be easy, but an integration of some kind (maybe directly selecting rhythms, chords or progressions from a zynseq context menu directory structure) could be really cool.

Describe alternatives you've considered
Installing and using by myself, but currently I don't have "Import from SMF" in the Pad context menu and the feature might be of use for more musicians?

Additional context
Add any other context or screenshots about the feature request here.

@tithrion tithrion changed the title Add Free-MIDI-Chords package and possibly integrate somehow in zynpad Add Free-MIDI-Chords package and possibly integrate somehow in zynseq Dec 30, 2024
@riban-bw
Copy link

I may have misunderstood but it looks like this is a collection of standard MIDI files. A user may upload these using webconf but there is an issue that they currently need to be done one at a time. (You can upload the zip but the MIDI player and zynseq import does not handle the resulting folder structure.)

If the request is to use the progressions app then I don't see it as fitting in the zynthian workflow.

Maybe there should be a better integration between smf files and zynseq to allow them to be selected directly rather than imported... but there is some work to do to make that a reality.

Please be more descriptive of the workflow you would like to see implemented.

@tithrion
Copy link
Author

Ok, my fault. The script itself doesn't make sense.
Assume you enter i.e. zynpad, select a pattern with a drum set configured, dive into the context menu and select from an import menu beats, the rhythm snippet you want and import.
Afterwards select a bass pattern, and import from chords or progressions.
Same could go for Arranger (and might be the way to go especially for progressions).
Could be a good starting point from which one could go on fine tuning...
Just have a look in the implementations in common DAWs, I think the workflow described above could be a way to resemble that in a zyn workflow.
This may be in part be already doable as you described, but with an integration of these patterns into a context menu it could ease up usage. Would be in parallel to the more general import function, where I also would prefer a usable folder structure for efficient working with available snippets but not necessarily in a context menu.
Otherwise a good generally usable folder structure in the import function could cover that also.

@riban-bw
Copy link

Audio files are presented as zynsampler presets with subfolders shown upto a depth of 2. We could do similar with MIDI. The depth may want to be higher to allow more catagorisation of files.

@riban-bw
Copy link

I don't think that providing thousands of SMF is a good solution. These are basically variations on a few simple rules which can be created programmatically. It may be a better option to offer the ability to add notes to a pattern using an algorithm. This could be presented in a similar tree structure but the notes would be generated and added to the pattern rather than copied from a template. I think the project referenced has a python generator so we come borrow that code to integrate it into zynthian.

@tithrion
Copy link
Author

tithrion commented Jan 1, 2025

Which way ever would be easier to implement. The result would be the same so never mind...
Please also have a look at the Ardour file which also integrates the MMA generated beats (a collection of many different rhythm patterns). I think that would be not part of the chords generator.
At least the Beats directory only consists from one subdirectory per rhythm containing all the relevant *.mid:
(i.e. for techno)
root@zynthian:~/Musik/Media/MIDI Beats# tree techno/
techno/
|-- 1_groove_techno.mid
|-- 1_hats_techno.mid
|-- 1_kick_techno.mid
|-- 1_snare_techno.mid
|-- 2_groove_technoend.mid
|-- 2_hats_technoend.mid
|-- 2_kick_technoend.mid
|-- 2_snare_technoend.mid
|-- 3_groove_technointro.mid
|-- 3_hats_technointro.mid
|-- 3_kick_technointro.mid
`-- 3_snare_technointro.mid

1 directory, 12 files

The beats where converted from "MMA - MIDI Music Accompaniment" (https://www.mellowood.ca/mma/index.html).
Might be a usefull addition to zynthian also.

@riban-bw
Copy link

riban-bw commented Jan 3, 2025

I started to work on this in a dev branch. I implemented this workflow:

  • Open pattern editor
  • Select the cell that will act as the root
  • From menu, select, "Insert pattern"
  • Menu offers: Chord, Pattern. Selecting Chord:
  • Menu offers list of chord types, e.g. Major, Minor, Sus4, etc.
  • Selecting a chord type adds the notes from that chord at the selected cell, e.g. if the C4, step 2 is selected and Minor chord chosen then notes: C4, E4, G4 are added at step 2. Thier duration is the current note insertion duration*
  • The note insertion duration used to be selectable but it looks like that option was disabled. We would want to enable this.

The idea is that you can insert chords or progressions into a pattern. If you want to create a new pattern then you may use the menu option to clear the current pattern and add what you want. You can add chords or sequences of various lengths at various positions within the pattern.

I have only implemented the following chords so far but more could be added:

  • Major triad
  • Minor triad
  • Diminished
  • Major seventh
  • Minor seventh
  • Dominant Seventh
  • Suspended second
  • Suspended fourth
  • Augmented
  • Major ninth
  • Minor ninth
  • Dominant ninth
  • Major eleventh
  • Minor eleventh

I have not started on progressions (but may do soon).

How does this sound?

@tithrion
Copy link
Author

tithrion commented Jan 3, 2025

Sounds great! That was exactly the idea I had.
For my restricted needs the list of chords looks sufficient, others may be need more.
For the sake of clarity maybe add aditional (=more seldomly used) chords under "more"?
Progressions and rhythms could be implemented in a similar (menu) way.
Well, rhythms could be a little more complicated if you go the algorithmic way.

@riban-bw
Copy link

riban-bw commented Jan 3, 2025

I have added the option to add triad and seventh chords from the diatonic key, centred around the selected tonic. This may allow selection of chords that work well together in the classical or popular style. I started using the same module as the suggested app uses but it is flawed and use is needlessly complex so I reverted to building the chords from static templates. I used similar techniques in some chord plugins I wrote earlier this week.

A possible enhancement suggested to me is to select the chord type or diatonic key, then for the potential notes to be highlighted on the grid as the cursor is moved, similar chords allowing chords to be added without needing to reopen the menu. This would require more complex implementation but may be a layer option. My current poc implementation is a bit awkward, requiring repeated access to menu, scroll to select option, select insert type then select chord.

@riban-bw riban-bw changed the title Add Free-MIDI-Chords package and possibly integrate somehow in zynseq Feature request: Ability to add chords and progressions to sequencer patterns Jan 4, 2025
@riban-bw
Copy link

riban-bw commented Jan 4, 2025

I changed the title of this ticket to better reflect the request.

I have implemented a better workflow.

There are now two extra note editor parameters: "Chord mode" and "Chord type" or "Tonal Centre (tonic)".

Chord Mode has options:

  • Single note - Each note in the grid is added or removed individually
  • Chord - Whole chords are added or removed with the chord root at the selected cell and the chord type defined by Chord Type parameter
  • Tonal major key - Whole triad chords are added or removed, with the chord root at the selected cell , the chord type derived from diatonic triad chords in the major key and tonal centre set by Tonal Centre parameter
  • Tonal major key 7th - Whole triad chords are added or removed, with the chord root at the selected cell , the chord type derived from diatonic 7th chords in the major key and tonal centre set by Tonal Centre parameter
  • Tonal minor key - Whole triad chords are added or removed, with the chord root at the selected cell , the chord type derived from diatonic triad chords in the minor key and tonal centre set by Tonal Centre parameter
  • Tonal minor key 7th - Whole triad chords are added or removed, with the chord root at the selected cell , the chord type derived from diatonic 7th chords in the minor key and tonal centre set by Tonal Centre parameter

Chord Type is a list of chords, e.g. Major Triad, Minor, Seventh, etc.

Tonal Centre is a list of keys, e.g. C, C#, D, etc.

This works much better. You can enable chord entry mode, select the chord type and then add / remove chords in the grid where you want them. It is a rapid workflow for adding chords and provides the two operating modes: absolute chords or diatonic tonal harmonly chords .

This is commited to the dev branch. There are some things to fix but it mostly works. I have not yet considered how we would do progressions. Maybe there would be more options in the chord mode for types of progression and then chord type parameter would list the progressions within that catageory. Clicking on the grid could add the progression, from the clicked step, in the key of the clicked row.

@riban-bw
Copy link

I think inserting chord at current postion in pattern is now working well and makes sense. A user can consider what chord they want and add it with immediate audio feedback (the chord is played) and ability to undo (just reselect the chord or use the undo feature in pattern editor). Offereing absolute chords and tonal chords gives a good range of options. This is implemented in dev. We could expand to also offer modal rather than tonal chords.

I am finding the concept of adding progressions more challenging. The implementation can be done in a similar way, using templates of sequences of notes to insert at the cursor, including time and pitch offset but how would a user decide what progression they want? How would they be named and would a user understand what they are asking for? Would all users want the same set of progressions and how could they be organised to allow users to access them in a logical and intuitive way? Would the progressions become outdated or the collection become too large to manage? (Old Bontempi organs are known for their cheesy accompaniment rhythms like bossa nova, tango, and rock.)

@tithrion
Copy link
Author

tithrion commented Jan 12, 2025

Great! Will test as soon I'll be back at my Zynthian.
Maybe we should also discuss in the forum to involve more peoples viewpoint?

@tithrion
Copy link
Author

Just searched for the possibly correct branch in the versions dropdowns. I assume your branch is currently github only?
Do you have a link/name for testing maybe?

@riban-bw
Copy link

The dev branch is zynthian-ui 1311/insert_in_pattern.

Image

@riban-bw
Copy link

I just merged into vangelis so no need to use dev branch.

@riban-bw
Copy link

I am fairly happy with the chord insertion and have posted in the forum to allow users to get involved with testing. We can continue to track issues here for a while, e.g until it is deemed stable (probably by me).

I want to move this ticket to the subject of progressions. This may be sufficiently different to warrant its own ticket, in which case we could mark this as resolved and open a new ticket. @tithrion please consider this.

Regarding progressions, I don't have a feel for how, or indeed why this should be implemented so it may benefit from a discussion in the forum. Again, @tithrion please consider this point and start that discussion.

Actually - having written all of this I now feel that we should definitely separate the requests so I am marking this ticket as resolved, pending release and await the discussion and/or feature request for progressions.

@riban-bw riban-bw self-assigned this Jan 17, 2025
@riban-bw riban-bw added Enhancement New feature or request Resolved Resolved but not yet released or tested by reporter labels Jan 17, 2025
@riban-bw riban-bw added this to the Oram milestone Jan 17, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement New feature or request Resolved Resolved but not yet released or tested by reporter
Projects
None yet
Development

No branches or pull requests

2 participants