Questions Regarding Capabilities
Hi,
Great project! I have a few questions:
-
Is it possible to specify durations in conjunction with a progression? p = progression('c', 'ii V I') <- quarter notes are assumed
-
Is there a way to tie notes? What if I wanted to combine a half note with an eighth note? How would I do that?
-
Is there a way to automate midi cc sliders? If I wanted to use this in place of a control surface, how would I do that?
-
Related to number 3, is there a way to change the note dynamics while a note is being sustained?
Thanks for an incredibly fun tool!
Lastly, the build instructions didn't work for me.
% go install github.com/emicklei/melrose/cmd/melrose
go: 'go install' requires a version when current directory is not in a module
Try 'go install github.com/emicklei/melrose/cmd/melrose@latest' to install the latest version
To get it working, I had to download the repo and do "go build" from inside of the cmd/melrose directory. I also had to install portmidi via homebrew.
Thank for providing your feedback. It helps the project to improve for all users.
1). At the moment, durations are not accepted in the second parameter of the progression function.
It is for the note itself: p = progression('8c3++', 'ii V I')
𝄞 p.S()
𝄞 sequence('(8D3++ 8F3++ 8A3++) (8G3++ 8B3++ 8D++) (8C3++ 8E3++ 8G3++)') bars:0.375 duration:750ms note(s)/groups:3 type:core.Sequence
I think a code change is possible such that you can write 2ii5++ 4V-- 16I3
-
This is a hard problem I kind of postponed to solve. What notation do you think should be used for that?
-
No such feature for MIDI CC. Could you give an example how you would program that? Is it changing the "velocity" value of a CC note? I need to read again about CC.
-
Again, I need to read about how CC work (together will Notes that are ON).
As for the installation, I will update the doc. And portmidi is no longer used, I will check why it asked for this.
Awaiting your answers and in the meantime, I will look into the requested features.
Happy music coding
-
For progressions, it seems that constraining each chord to the same rhythmic value value will limit the utility; although, it's probably fine if progressions are intended just for quickly hearing the quality of a particular set of chords. I'm not sure what their intended use case are, but if they're intended for composition, I think they'll need to be more flexible.
-
To tie notes together, I think you could do something like this: sequence('8c~4c') <- an 8th note tied to a quarter note.
-
Here's a quick blurb on Midi CC.
In MIDI terms, a continuous controller (CC) is a MIDI message capable of transmitting a range of values, usually 0-127. The MIDI Spec makes 128 different continuous controllers available for each MIDI channel, although some of these have been pre-assigned to other functions. CC’s are commonly used for things like MIDI controlling volume (#7), pan (#10), data slider position (#6), mod wheel (#1) and other variable parameters.
The gist is, you can use a physical control surface to manipulate parameters in your DAW. As an example, see this video:
https://youtu.be/WTaWZJIqcDA?t=19
In that example, the performer is controlling the dynamics slider while playing a melody by assigning a control surface slider to a Midi CC parameter. They parameters are numbered and can be controlled by physical hardware (a control surface), or presumably virtually via software.
The use case I see would be to use something like Melrose to control the dynamics of any Midi CC parameter available in a virtual instrument to provide a more realistic performance. Automating this would give you very fine grained control over the result. It'd be great to have the ability to have a note with a longer duration (say a whole for example) and to be able to increase its intensity as it is played.
thank for commenting on the reply.
I just started with 2) and got the first results working
I will update this issue when I have more progress.
Awesome! This is a crucial addition, and it will unlock a lot of rhythmic potential.
Progression with individual durations
p = progression('C3',' 2I++ 4VI+ 8.II 16.V-- ')
p.S()
sequence('(2C3++ 2E3++ 2G3++) (A3+ C+ E+) (8.D3 8.F3 8.A3) (16.G3-- 16.B3-- 16.D--)') bars:1.03125 duration:2.0625s note(s)/groups:4 type:core.Sequence
This is really cool, and it will make progressions a really viable part of the system. Awesome work!
raw MIDI message can be send using a midi_send:
midi_send(${1:device-id},${1:status},${2:channel},${3:2nd-byte},${4:3rd-byte}
midi_send(1,0xC0,2,1,0) // device 1, program change, select program 1 for channel 2
midi_send(2,0xB0,4,0,16) // device 2, control change, bank select 16 for channel 4
midi_send(3,0xB0,1,120,0) // device 3, control change, all notes off for channel 1
I will try to come up with a sample script to change the note dynamics while a note is being sustained
A workaround for the installation is
go install -v github.com/emicklei/melrose/cmd/melrose...@latest
closing it now, 3 out of 4 has been resolved. feel free to create a new if a feature is wanted
Thanks for incorporating my suggestions, I really appreciate it!
Also, one final comment. Do you plan on updating the docs to let people know about the syntax to tie notes together? (~)