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

Somehow read note velocity? #124

Open
qm210 opened this issue Nov 22, 2023 · 4 comments
Open

Somehow read note velocity? #124

qm210 opened this issue Nov 22, 2023 · 4 comments
Labels
enhancement New feature or request

Comments

@qm210
Copy link
Contributor

qm210 commented Nov 22, 2023

Hey everybody,

not sure whether I'm just not capable or that feature is not implemented, but especially for variation in drums, I was looking for a way to have note-dependent velocity. Can it be accessed somehow already, or faked, or is there no current implementation?

best,
qm

@vsariola
Copy link
Owner

vsariola commented Nov 23, 2023

ATM we don't read / store the note velocity from the MIDI messages in any way and since sointu is essentially 4klang at its core, there is no concept of note velocity in the song data in the compiled player.

However, you can "fake" this to certain extent: you can make another instrument that doesn't produce any actual sound, but loads the pitch using LOADNOTE and modulates another instrument. These "effect" instruments are quite common in 4klang tracks. That's why sointu has the "hex" mode to edit track notes, so the hex values can be used e.g. to set volume of individual notes. LOADNOTE converts the hex integer values with (value/64.-1.0) but only hex values 0x02 onwards can be used, because 0x00 and 0x01 represent note release and note hold in the note data. The conversion means that 0x80 = 128 = 1.0, and 0x40 = 64 = 0.0, and 0x02 = -0.98. The highest MIDI note is 0x7F, but from the track editor, values up to 0xFF can be entered, corresponding to 1.99.

Adding support for true note velocity data is not impossible, but quite some work, so won't happen very quickly.

@vsariola vsariola added the enhancement New feature or request label Nov 23, 2023
@qm210
Copy link
Contributor Author

qm210 commented Oct 19, 2024

I'll just close this, because this explanation is better than implementing something complicated

@qm210 qm210 closed this as completed Oct 19, 2024
@vsariola
Copy link
Owner

I'll reopen this because I actually think it would a worthwhile addition. We would not necessarily need any extra code from player side: we could just generate two instruments for every MIDI channel, first with tracks defining the notes and second with "notes" actually corresponding to note velocities. The hardness comes mainly from the tracker side, to trigger the correct instruments when MIDI event arrives and then to record the MIDI events with notes & velocities as two tracks during recording.

@vsariola vsariola reopened this Oct 23, 2024
@vsariola
Copy link
Owner

Let's talk about this a bit before jumping into implementations. For me, the most important support for MIDI velocity would not be to get it from the user during MIDI inputting of notes, but to get the velocity from DAW while recording the notes. So, that means that for every instrument, we might create just one track (only note data) or two tracks (note data + velocity data). Where should the units that process the velocity data be?

If the "velocity instrument" and "note instrument" that get triggered by the tracks are completely different instruments, how do we keep these associated with each other? I think the user easily gets them dissociated when moving around the instruments, if the association is e.g. based on "the velocity instrument is always to the right of note instrument".

Therefore, purely from this perspective, how about this: every Instrument has "Units" and "VelUnits" (or whatever we call them), i.e. the VelUnits is the units for processing the velocity values? It's not clear how radical change this would be without trying to implement it.

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

No branches or pull requests

2 participants