From 71841aaf4f9759069a8e82f30d0a2278f279b5b2 Mon Sep 17 00:00:00 2001 From: Kagamiin~ Date: Sun, 17 Dec 2023 09:05:46 -0300 Subject: [PATCH] Updated mapVelocity; also changed back to MIDI standard --- src/engine/platform/esfm.cpp | 6 +++--- src/engine/platform/esfm.h | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/src/engine/platform/esfm.cpp b/src/engine/platform/esfm.cpp index 4b23522fd..13604abf4 100644 --- a/src/engine/platform/esfm.cpp +++ b/src/engine/platform/esfm.cpp @@ -1019,10 +1019,10 @@ void DivPlatformESFM::notifyInsDeletion(void* ins) { } } -int DivPlatformESFM::mapVelocity(int ch, unsigned char vel) { +int DivPlatformESFM::mapVelocity(int ch, float vel) { const int volMax=MAX(1,dispatch(DivCommand(DIV_CMD_GET_VOLMAX,MAX(ch,0)))); - double attenDb=20*log10(vel/127); // 20dB/decade for a linear mapping - double attenUnits=attenDb*(8.0/6.0); + double attenDb=40*log10(vel); // 40dB/decade for a quadratic mapping, per MIDI standard + double attenUnits=attenDb/0.75; // 0.75dB/unit return MAX(0,volMax+attenUnits); } diff --git a/src/engine/platform/esfm.h b/src/engine/platform/esfm.h index 8ec29fb8c..fbb971003 100644 --- a/src/engine/platform/esfm.h +++ b/src/engine/platform/esfm.h @@ -136,7 +136,7 @@ class DivPlatformESFM: public DivDispatch { void toggleRegisterDump(bool enable); void notifyInsChange(int ins); void notifyInsDeletion(void* ins); - int mapVelocity(int ch, unsigned char vel); + int mapVelocity(int ch, float vel); void poke(unsigned int addr, unsigned short val); void poke(std::vector& wlist); void setFlags(const DivConfig& flags);