melrose icon indicating copy to clipboard operation
melrose copied to clipboard

Questions Regarding Capabilities

Open tmountain opened this issue 3 years ago • 8 comments

Hi,

Great project! I have a few questions:

  1. Is it possible to specify durations in conjunction with a progression? p = progression('c', 'ii V I') <- quarter notes are assumed

  2. 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?

  3. 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?

  4. 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.

tmountain avatar Apr 14 '22 16:04 tmountain

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

  1. This is a hard problem I kind of postponed to solve. What notation do you think should be used for that?

  2. 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.

  3. 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

emicklei avatar Apr 14 '22 19:04 emicklei

  1. 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.

  2. To tie notes together, I think you could do something like this: sequence('8c~4c') <- an 8th note tied to a quarter note.

  3. 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.

tmountain avatar Apr 15 '22 19:04 tmountain

thank for commenting on the reply.

I just started with 2) and got the first results working

image

I will update this issue when I have more progress.

emicklei avatar Apr 16 '22 09:04 emicklei

Awesome! This is a crucial addition, and it will unlock a lot of rhythmic potential.

tmountain avatar Apr 16 '22 13:04 tmountain

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 

emicklei avatar Apr 16 '22 18:04 emicklei

This is really cool, and it will make progressions a really viable part of the system. Awesome work!

tmountain avatar Apr 18 '22 14:04 tmountain

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

emicklei avatar Apr 22 '22 20:04 emicklei

A workaround for the installation is

go install -v github.com/emicklei/melrose/cmd/melrose...@latest

emicklei avatar Aug 20 '22 13:08 emicklei

closing it now, 3 out of 4 has been resolved. feel free to create a new if a feature is wanted

emicklei avatar Mar 02 '23 19:03 emicklei

Thanks for incorporating my suggestions, I really appreciate it!

tmountain avatar Mar 03 '23 00:03 tmountain

Also, one final comment. Do you plan on updating the docs to let people know about the syntax to tie notes together? (~)

tmountain avatar Mar 03 '23 01:03 tmountain