2016-01-10 2 views
1

Quelle est la manière recommandée de mapper le volume du canal MIDI à gagner?Conversion entre le volume du canal MIDI et le gain réel

A partir de là [1]

Il est recommandé qu'un dispositif utilise la valeur du volume d'une manière logarithmique, comme spécifié par la formule suivante si seule la valeur grossière est utilisée:

40 log (Volume/127)

Pour moi, cette formule ressemble à une formule inverse. Si le volume du canal est exprimé en dB, la formule doit utiliser exp au lieu de log. Si le volume est déjà une amplitude, alors il ne devrait y avoir que Volume/127. Pour clarifier, cela n'a pas de sens

*output_buffer = 40*log(channel_volume/127.0) * (*input_buffer); 

(Testcase: channel_volume = 0 donnera gain infini) qui suit d'autre part est mieux (à condition que channel_volume est le gain réel et non le gain en dB):

*output_buffer = channel_volume * (*input_buffer)/127.0; 

[1] http://www.blitter.com/~russtopia/MIDI/~jglatt/tech/midispec/vol.htm

Répondre

0

lui-même spécification MIDI ne spécifie pas la réponse du volume. Cependant, les General MIDI Level 1 Developer Guidelines montrent cette formule, car elle est actuellement utilisée par la plupart des implémentations. Le volume du canal est donné comme une valeur de 0 à 127. Le résultat de cette formule est mesuré en dB; vous devez le convertir en une valeur de gain après:

Gain = 10^(dB/20)

Voir le même document pour savoir comment gérer les interactions avec le contrôleur d'expression.

+0

Cela signifie que cette formule ne doit pas être utilisée avant de transmettre la valeur en tant que valeur de gain à un synthétiseur. C'est ce que je voulais dire par "inverse" – user877329