diff --git a/src/tracks/InstrumentTrack.cpp b/src/tracks/InstrumentTrack.cpp index 9f5153a3b..33aff61dd 100644 --- a/src/tracks/InstrumentTrack.cpp +++ b/src/tracks/InstrumentTrack.cpp @@ -185,6 +185,13 @@ void InstrumentTrack::processAudioBuffer( sampleFrame* buf, const fpp_t frames, float v_scale = (float) getVolume() / DefaultVolume; + // We play MIDI-based instruments at velocity 63 for volume=100%. In order + // to get the same output volume, we need to scale it by 2 + if( m_instrument->flags().testFlag( Instrument::IsMidiBased ) ) + { + v_scale *= 2; + } + // instruments using instrument-play-handles will call this method // without any knowledge about notes, so they pass NULL for n, which // is no problem for us since we just bypass the envelopes+LFOs