summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Alc/midi/base.c9
-rw-r--r--Alc/midi/fluidsynth.c8
-rw-r--r--Alc/midi/sf2load.c16
-rw-r--r--OpenAL32/Include/alMain.h8
-rw-r--r--OpenAL32/Include/alMidi.h11
-rw-r--r--OpenAL32/alFontsound.c72
6 files changed, 116 insertions, 8 deletions
diff --git a/Alc/midi/base.c b/Alc/midi/base.c
index 470157e1..11c43d25 100644
--- a/Alc/midi/base.c
+++ b/Alc/midi/base.c
@@ -295,6 +295,15 @@ void ALfontsound_Construct(ALfontsound *self)
self->MinVelocity = 0;
self->MaxVelocity = 127;
+ self->VolEnv.DelayTime = -12000;
+ self->VolEnv.AttackTime = -12000;
+ self->VolEnv.HoldTime = -12000;
+ self->VolEnv.DecayTime = -12000;
+ self->VolEnv.SustainVol = 0;
+ self->VolEnv.ReleaseTime = -12000;
+ self->VolEnv.KeyToHoldTime = 0;
+ self->VolEnv.KeyToDecayTime = 0;
+
self->Start = 0;
self->End = 0;
self->LoopStart = 0;
diff --git a/Alc/midi/fluidsynth.c b/Alc/midi/fluidsynth.c
index 5b57de21..d5174887 100644
--- a/Alc/midi/fluidsynth.c
+++ b/Alc/midi/fluidsynth.c
@@ -163,6 +163,14 @@ static int FPreset_noteOn(fluid_preset_t *preset, fluid_synth_t *synth, int chan
if(voice == NULL)
return FLUID_FAILED;
+ fluid_voice_gen_set(voice, 33, sound->VolEnv.DelayTime);
+ fluid_voice_gen_set(voice, 34, sound->VolEnv.AttackTime);
+ fluid_voice_gen_set(voice, 35, sound->VolEnv.HoldTime);
+ fluid_voice_gen_set(voice, 36, sound->VolEnv.DecayTime);
+ fluid_voice_gen_set(voice, 37, sound->VolEnv.SustainVol);
+ fluid_voice_gen_set(voice, 38, sound->VolEnv.ReleaseTime);
+ fluid_voice_gen_set(voice, 39, sound->VolEnv.KeyToHoldTime);
+ fluid_voice_gen_set(voice, 40, sound->VolEnv.KeyToDecayTime);
fluid_voice_gen_set(voice, 54, sound->LoopMode);
for(m = 0;m < sample->NumMods;m++)
fluid_voice_add_mod(voice, &sample->Mods[m], FLUID_VOICE_OVERWRITE);
diff --git a/Alc/midi/sf2load.c b/Alc/midi/sf2load.c
index e8b4fb1b..e5fcee43 100644
--- a/Alc/midi/sf2load.c
+++ b/Alc/midi/sf2load.c
@@ -827,14 +827,14 @@ static void fillZone(ALuint id, const GenModList *zone)
0, /* 30 - releaseModEnv */
0, /* 31 - keynumToModEnvHold */
0, /* 32 - keynumToModEnvDecay */
- 0, /* 33 - delayVolEnv */
- 0, /* 34 - attackVolEnv */
- 0, /* 35 - holdVolEnv */
- 0, /* 36 - decayVolEnv */
- 0, /* 37 - sustainVolEnv */
- 0, /* 38 - releaseVolEnv */
- 0, /* 39 - keynumToVolEnvHold */
- 0, /* 40 - keynumToVolEnvDecay */
+ AL_VOLUME_ENV_DELAYTIME_SOFT, /* 33 - delayVolEnv */
+ AL_VOLUME_ENV_ATTACKTIME_SOFT, /* 34 - attackVolEnv */
+ AL_VOLUME_ENV_HOLDTIME_SOFT, /* 35 - holdVolEnv */
+ AL_VOLUME_ENV_DECAYTIME_SOFT, /* 36 - decayVolEnv */
+ AL_VOLUME_ENV_SUSTAINVOLUME_SOFT, /* 37 - sustainVolEnv */
+ AL_VOLUME_ENV_RELEASETIME_SOFT, /* 38 - releaseVolEnv */
+ AL_VOLUME_ENV_KEY_TO_HOLDTIME_SOFT, /* 39 - keynumToVolEnvHold */
+ AL_VOLUME_ENV_KEY_TO_DECAYTIME_SOFT, /* 40 - keynumToVolEnvDecay */
0, /* 41 - */
0, /* 42 - */
AL_KEY_RANGE_SOFT, /* 43 - keyRange */
diff --git a/OpenAL32/Include/alMain.h b/OpenAL32/Include/alMain.h
index 0cc06df3..2f9440b9 100644
--- a/OpenAL32/Include/alMain.h
+++ b/OpenAL32/Include/alMain.h
@@ -48,6 +48,14 @@
#define AL_KEY_CORRECTION_SOFT 0x2006
#define AL_SAMPLE_TYPE_SOFT 0x2007
#define AL_FONTSOUND_LINK_SOFT 0x2008
+#define AL_VOLUME_ENV_DELAYTIME_SOFT 0x0021
+#define AL_VOLUME_ENV_ATTACKTIME_SOFT 0x0022
+#define AL_VOLUME_ENV_HOLDTIME_SOFT 0x0023
+#define AL_VOLUME_ENV_DECAYTIME_SOFT 0x0024
+#define AL_VOLUME_ENV_SUSTAINVOLUME_SOFT 0x0025
+#define AL_VOLUME_ENV_RELEASETIME_SOFT 0x0026
+#define AL_VOLUME_ENV_KEY_TO_HOLDTIME_SOFT 0x0027
+#define AL_VOLUME_ENV_KEY_TO_DECAYTIME_SOFT 0x0028
#define AL_KEY_RANGE_SOFT 0x002B
#define AL_VELOCITY_RANGE_SOFT 0x002C
#define AL_LOOP_MODE_SOFT 0x0036
diff --git a/OpenAL32/Include/alMidi.h b/OpenAL32/Include/alMidi.h
index 44d05c1a..cdaebc28 100644
--- a/OpenAL32/Include/alMidi.h
+++ b/OpenAL32/Include/alMidi.h
@@ -23,6 +23,17 @@ typedef struct ALfontsound {
ALint MinKey, MaxKey;
ALint MinVelocity, MaxVelocity;
+ struct {
+ ALint DelayTime;
+ ALint AttackTime;
+ ALint HoldTime;
+ ALint DecayTime;
+ ALint SustainVol;
+ ALint ReleaseTime;
+ ALint KeyToHoldTime;
+ ALint KeyToDecayTime;
+ } VolEnv;
+
ALuint Start;
ALuint End;
ALuint LoopStart;
diff --git a/OpenAL32/alFontsound.c b/OpenAL32/alFontsound.c
index 36f34570..e4da6503 100644
--- a/OpenAL32/alFontsound.c
+++ b/OpenAL32/alFontsound.c
@@ -130,6 +130,38 @@ AL_API void AL_APIENTRY alFontsoundiSOFT(ALuint id, ALenum param, ALint value)
SET_ERROR_AND_GOTO(context, AL_INVALID_OPERATION, done);
switch(param)
{
+ case AL_VOLUME_ENV_DELAYTIME_SOFT:
+ sound->VolEnv.DelayTime = value;
+ break;
+
+ case AL_VOLUME_ENV_ATTACKTIME_SOFT:
+ sound->VolEnv.AttackTime = value;
+ break;
+
+ case AL_VOLUME_ENV_HOLDTIME_SOFT:
+ sound->VolEnv.HoldTime = value;
+ break;
+
+ case AL_VOLUME_ENV_DECAYTIME_SOFT:
+ sound->VolEnv.DecayTime = value;
+ break;
+
+ case AL_VOLUME_ENV_SUSTAINVOLUME_SOFT:
+ sound->VolEnv.SustainVol = value;
+ break;
+
+ case AL_VOLUME_ENV_RELEASETIME_SOFT:
+ sound->VolEnv.ReleaseTime = value;
+ break;
+
+ case AL_VOLUME_ENV_KEY_TO_HOLDTIME_SOFT:
+ sound->VolEnv.KeyToHoldTime = value;
+ break;
+
+ case AL_VOLUME_ENV_KEY_TO_DECAYTIME_SOFT:
+ sound->VolEnv.KeyToDecayTime = value;
+ break;
+
case AL_SAMPLE_START_SOFT:
sound->Start = value;
break;
@@ -250,6 +282,14 @@ AL_API void AL_APIENTRY alFontsoundivSOFT(ALuint id, ALenum param, const ALint *
alFontsound2iSOFT(id, param, values[0], values[1]);
return;
+ case AL_VOLUME_ENV_DELAYTIME_SOFT:
+ case AL_VOLUME_ENV_ATTACKTIME_SOFT:
+ case AL_VOLUME_ENV_HOLDTIME_SOFT:
+ case AL_VOLUME_ENV_DECAYTIME_SOFT:
+ case AL_VOLUME_ENV_SUSTAINVOLUME_SOFT:
+ case AL_VOLUME_ENV_RELEASETIME_SOFT:
+ case AL_VOLUME_ENV_KEY_TO_HOLDTIME_SOFT:
+ case AL_VOLUME_ENV_KEY_TO_DECAYTIME_SOFT:
case AL_SAMPLE_START_SOFT:
case AL_SAMPLE_END_SOFT:
case AL_SAMPLE_LOOP_START_SOFT:
@@ -296,6 +336,38 @@ AL_API void AL_APIENTRY alGetFontsoundivSOFT(ALuint id, ALenum param, ALint *val
SET_ERROR_AND_GOTO(context, AL_INVALID_NAME, done);
switch(param)
{
+ case AL_VOLUME_ENV_DELAYTIME_SOFT:
+ values[0] = sound->VolEnv.DelayTime;
+ break;
+
+ case AL_VOLUME_ENV_ATTACKTIME_SOFT:
+ values[0] = sound->VolEnv.AttackTime;
+ break;
+
+ case AL_VOLUME_ENV_HOLDTIME_SOFT:
+ values[0] = sound->VolEnv.HoldTime;
+ break;
+
+ case AL_VOLUME_ENV_DECAYTIME_SOFT:
+ values[0] = sound->VolEnv.DecayTime;
+ break;
+
+ case AL_VOLUME_ENV_SUSTAINVOLUME_SOFT:
+ values[0] = sound->VolEnv.SustainVol;
+ break;
+
+ case AL_VOLUME_ENV_RELEASETIME_SOFT:
+ values[0] = sound->VolEnv.ReleaseTime;
+ break;
+
+ case AL_VOLUME_ENV_KEY_TO_HOLDTIME_SOFT:
+ values[0] = sound->VolEnv.KeyToHoldTime;
+ break;
+
+ case AL_VOLUME_ENV_KEY_TO_DECAYTIME_SOFT:
+ values[0] = sound->VolEnv.KeyToDecayTime;
+ break;
+
case AL_KEY_RANGE_SOFT:
values[0] = sound->MinKey;
values[1] = sound->MaxKey;