|
From: Tobias D. <tob...@gm...> - 2014-02-26 21:36:10
|
Hi, I'm about to deal with https://github.com/LMMS/lmms/issues/280 however we have a little problem here. Notes at volume 100% equal MIDI events with maximum velocity (127). For notes above 100% we can't map the volume properly to a MIDI velocity. This leads to problems in two areas: test notes in piano roll which are sent to the instrument track as MIDI events and MIDI-based instruments. In both cases we can't play notes louder than 100%. The question now is how to fix that. IMHO there are three possible solutions: - map volume 100% to MIDI velocity=63 and volume 200% to velocity 127. This would make no difference for the test notes as the MIDI velocity is mapped back to a volume with the same formula later. For MIDI-based instruments this would lead to sound at half the volume which could be normalized again in InstrumentTrack::processAudioBuffer() (v_scale is doubled if n == NULL). In terms of volume things would be the same as before except that we have a correct behaviour for notes with volume up to 200%. The only drawback here is that instruments may sound different at velocity=50% - imagine a good piano soundfont which would play a less bright sound. - make test note playback work at arbitrary volumes with a workaround/additional information and cap velocity at 127 for MIDI-based instruments. This would mean that any notes on e.g. an Sf2player or VST instrument track will have a maximum volume of 100% even if you set a higher value in piano roll. - remove support for setting a volume > 100% for notes in piano roll at all. Existing projects would load regularly so compatibility would be kept. This would be the cleanest solution. Any opinions? Toby |