mirror of
https://github.com/panda3d/panda3d.git
synced 2025-09-30 08:44:19 -04:00
Support latest version of FMOD Ex (removes reverb filter in favor of sfxreverb)
This commit is contained in:
parent
eaab45dc9a
commit
aa4cc5c531
@ -109,18 +109,22 @@ add_pitchshift(PN_stdfloat pitch, PN_stdfloat fftsize, PN_stdfloat overlap) {
|
||||
// Description: Add a chorus filter to the end of the DSP chain.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void FilterProperties::
|
||||
add_chorus(PN_stdfloat drymix, PN_stdfloat wet1, PN_stdfloat wet2, PN_stdfloat wet3, PN_stdfloat delay, PN_stdfloat rate, PN_stdfloat depth, PN_stdfloat feedback) {
|
||||
add_filter(FT_chorus, drymix, wet1, wet2, wet3, delay, rate, depth, feedback);
|
||||
add_chorus(PN_stdfloat drymix, PN_stdfloat wet1, PN_stdfloat wet2, PN_stdfloat wet3, PN_stdfloat delay, PN_stdfloat rate, PN_stdfloat depth) {
|
||||
add_filter(FT_chorus, drymix, wet1, wet2, wet3, delay, rate, depth);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: FilterProperties::add_reverb
|
||||
// Function: FilterProperties::add_sfxreverb
|
||||
// Access: Published
|
||||
// Description: Add a reverb filter to the end of the DSP chain.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void FilterProperties::
|
||||
add_reverb(PN_stdfloat drymix, PN_stdfloat wetmix, PN_stdfloat roomsize, PN_stdfloat damp, PN_stdfloat width) {
|
||||
add_filter(FT_reverb, drymix, wetmix, roomsize, damp, width);
|
||||
add_sfxreverb(PN_stdfloat drylevel, PN_stdfloat room, PN_stdfloat roomhf, PN_stdfloat decaytime,
|
||||
PN_stdfloat decayhfratio, PN_stdfloat reflectionslevel, PN_stdfloat reflectionsdelay,
|
||||
PN_stdfloat reverblevel, PN_stdfloat reverbdelay, PN_stdfloat diffusion,
|
||||
PN_stdfloat density, PN_stdfloat hfreference, PN_stdfloat roomlf, PN_stdfloat lfreference) {
|
||||
add_filter(FT_sfxreverb, drylevel, room, roomhf, decaytime, decayhfratio, reflectionslevel, reflectionsdelay,
|
||||
reverblevel, reverbdelay, diffusion, density, hfreference, roomlf, lfreference);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
@ -41,7 +41,10 @@ FilterProperties::
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void FilterProperties::
|
||||
add_filter(FilterType t, PN_stdfloat a, PN_stdfloat b, PN_stdfloat c, PN_stdfloat d, PN_stdfloat e, PN_stdfloat f, PN_stdfloat g, PN_stdfloat h) {
|
||||
add_filter(FilterType t, PN_stdfloat a, PN_stdfloat b, PN_stdfloat c, PN_stdfloat d,
|
||||
PN_stdfloat e, PN_stdfloat f, PN_stdfloat g, PN_stdfloat h,
|
||||
PN_stdfloat i, PN_stdfloat j, PN_stdfloat k, PN_stdfloat l,
|
||||
PN_stdfloat m, PN_stdfloat n) {
|
||||
FilterConfig conf;
|
||||
conf._type = t;
|
||||
conf._a = a;
|
||||
@ -52,6 +55,12 @@ add_filter(FilterType t, PN_stdfloat a, PN_stdfloat b, PN_stdfloat c, PN_stdfloa
|
||||
conf._f = f;
|
||||
conf._g = g;
|
||||
conf._h = h;
|
||||
conf._i = i;
|
||||
conf._j = j;
|
||||
conf._k = k;
|
||||
conf._l = l;
|
||||
conf._m = m;
|
||||
conf._n = n;
|
||||
_config.push_back(conf);
|
||||
}
|
||||
|
||||
|
@ -36,8 +36,11 @@ class EXPCL_PANDA_AUDIO FilterProperties : public TypedReferenceCount {
|
||||
INLINE void add_normalize(PN_stdfloat fadetime, PN_stdfloat threshold, PN_stdfloat maxamp);
|
||||
INLINE void add_parameq(PN_stdfloat center_freq, PN_stdfloat bandwidth, PN_stdfloat gain);
|
||||
INLINE void add_pitchshift(PN_stdfloat pitch, PN_stdfloat fftsize, PN_stdfloat overlap);
|
||||
INLINE void add_chorus(PN_stdfloat drymix, PN_stdfloat wet1, PN_stdfloat wet2, PN_stdfloat wet3, PN_stdfloat delay, PN_stdfloat rate, PN_stdfloat depth, PN_stdfloat feedback);
|
||||
INLINE void add_reverb(PN_stdfloat drymix, PN_stdfloat wetmix, PN_stdfloat roomsize, PN_stdfloat damp, PN_stdfloat width);
|
||||
INLINE void add_chorus(PN_stdfloat drymix, PN_stdfloat wet1, PN_stdfloat wet2, PN_stdfloat wet3, PN_stdfloat delay, PN_stdfloat rate, PN_stdfloat depth);
|
||||
INLINE void add_sfxreverb(PN_stdfloat drylevel=0, PN_stdfloat room=-10000, PN_stdfloat roomhf=0, PN_stdfloat decaytime=1,
|
||||
PN_stdfloat decayhfratio=0.5, PN_stdfloat reflectionslevel=-10000, PN_stdfloat reflectionsdelay=0.02,
|
||||
PN_stdfloat reverblevel=0, PN_stdfloat reverbdelay=0.04, PN_stdfloat diffusion=100,
|
||||
PN_stdfloat density=100, PN_stdfloat hfreference=5000, PN_stdfloat roomlf=0, PN_stdfloat lfreference=250);
|
||||
INLINE void add_compress(PN_stdfloat threshold, PN_stdfloat attack, PN_stdfloat release, PN_stdfloat gainmakeup);
|
||||
|
||||
public:
|
||||
@ -52,7 +55,7 @@ class EXPCL_PANDA_AUDIO FilterProperties : public TypedReferenceCount {
|
||||
FT_parameq,
|
||||
FT_pitchshift,
|
||||
FT_chorus,
|
||||
FT_reverb,
|
||||
FT_sfxreverb,
|
||||
FT_compress,
|
||||
};
|
||||
|
||||
@ -60,12 +63,17 @@ class EXPCL_PANDA_AUDIO FilterProperties : public TypedReferenceCount {
|
||||
FilterType _type;
|
||||
PN_stdfloat _a,_b,_c,_d;
|
||||
PN_stdfloat _e,_f,_g,_h;
|
||||
PN_stdfloat _i,_j,_k,_l;
|
||||
PN_stdfloat _m,_n;
|
||||
};
|
||||
|
||||
typedef pvector<FilterConfig> ConfigVector;
|
||||
|
||||
private:
|
||||
void add_filter(FilterType t, PN_stdfloat a=0, PN_stdfloat b=0, PN_stdfloat c=0, PN_stdfloat d=0, PN_stdfloat e=0, PN_stdfloat f=0, PN_stdfloat g=0, PN_stdfloat h=0);
|
||||
void add_filter(FilterType t, PN_stdfloat a=0, PN_stdfloat b=0, PN_stdfloat c=0, PN_stdfloat d=0,
|
||||
PN_stdfloat e=0, PN_stdfloat f=0, PN_stdfloat g=0, PN_stdfloat h=0,
|
||||
PN_stdfloat i=0, PN_stdfloat j=0, PN_stdfloat k=0, PN_stdfloat l=0,
|
||||
PN_stdfloat m=0, PN_stdfloat n=0);
|
||||
ConfigVector _config;
|
||||
|
||||
public:
|
||||
|
@ -249,7 +249,7 @@ make_dsp(const FilterProperties::FilterConfig &conf) {
|
||||
case FilterProperties::FT_parameq: dsptype = FMOD_DSP_TYPE_PARAMEQ; break;
|
||||
case FilterProperties::FT_pitchshift: dsptype = FMOD_DSP_TYPE_PITCHSHIFT; break;
|
||||
case FilterProperties::FT_chorus: dsptype = FMOD_DSP_TYPE_CHORUS; break;
|
||||
case FilterProperties::FT_reverb: dsptype = FMOD_DSP_TYPE_REVERB; break;
|
||||
case FilterProperties::FT_sfxreverb: dsptype = FMOD_DSP_TYPE_SFXREVERB; break;
|
||||
case FilterProperties::FT_compress: dsptype = FMOD_DSP_TYPE_COMPRESSOR; break;
|
||||
default:
|
||||
audio_error("Garbage in DSP configuration data");
|
||||
@ -262,81 +262,97 @@ make_dsp(const FilterProperties::FilterConfig &conf) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
FMOD_RESULT res1=FMOD_OK;
|
||||
FMOD_RESULT res2=FMOD_OK;
|
||||
FMOD_RESULT res3=FMOD_OK;
|
||||
FMOD_RESULT res4=FMOD_OK;
|
||||
FMOD_RESULT res5=FMOD_OK;
|
||||
FMOD_RESULT res6=FMOD_OK;
|
||||
FMOD_RESULT res7=FMOD_OK;
|
||||
FMOD_RESULT res8=FMOD_OK;
|
||||
FMOD_RESULT res1 = FMOD_OK;
|
||||
FMOD_RESULT res2 = FMOD_OK;
|
||||
FMOD_RESULT res3 = FMOD_OK;
|
||||
FMOD_RESULT res4 = FMOD_OK;
|
||||
FMOD_RESULT res5 = FMOD_OK;
|
||||
FMOD_RESULT res6 = FMOD_OK;
|
||||
FMOD_RESULT res7 = FMOD_OK;
|
||||
FMOD_RESULT res8 = FMOD_OK;
|
||||
FMOD_RESULT res9 = FMOD_OK;
|
||||
FMOD_RESULT res10 = FMOD_OK;
|
||||
FMOD_RESULT res11 = FMOD_OK;
|
||||
FMOD_RESULT res12 = FMOD_OK;
|
||||
FMOD_RESULT res13 = FMOD_OK;
|
||||
FMOD_RESULT res14 = FMOD_OK;
|
||||
|
||||
switch (conf._type) {
|
||||
case FilterProperties::FT_lowpass:
|
||||
res1=dsp->setParameter(FMOD_DSP_LOWPASS_CUTOFF, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_LOWPASS_RESONANCE, conf._b);
|
||||
res1 = dsp->setParameter(FMOD_DSP_LOWPASS_CUTOFF, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_LOWPASS_RESONANCE, conf._b);
|
||||
break;
|
||||
case FilterProperties::FT_highpass:
|
||||
res1=dsp->setParameter(FMOD_DSP_HIGHPASS_CUTOFF, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_HIGHPASS_RESONANCE, conf._b);
|
||||
res1 = dsp->setParameter(FMOD_DSP_HIGHPASS_CUTOFF, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_HIGHPASS_RESONANCE, conf._b);
|
||||
break;
|
||||
case FilterProperties::FT_echo:
|
||||
res1=dsp->setParameter(FMOD_DSP_ECHO_DRYMIX, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_ECHO_WETMIX, conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_ECHO_DELAY, conf._c);
|
||||
res4=dsp->setParameter(FMOD_DSP_ECHO_DECAYRATIO, conf._d);
|
||||
res1 = dsp->setParameter(FMOD_DSP_ECHO_DRYMIX, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_ECHO_WETMIX, conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_ECHO_DELAY, conf._c);
|
||||
res4 = dsp->setParameter(FMOD_DSP_ECHO_DECAYRATIO, conf._d);
|
||||
break;
|
||||
case FilterProperties::FT_flange:
|
||||
res1=dsp->setParameter(FMOD_DSP_FLANGE_DRYMIX, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_FLANGE_WETMIX, conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_FLANGE_DEPTH, conf._c);
|
||||
res4=dsp->setParameter(FMOD_DSP_FLANGE_RATE, conf._d);
|
||||
res1 = dsp->setParameter(FMOD_DSP_FLANGE_DRYMIX, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_FLANGE_WETMIX, conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_FLANGE_DEPTH, conf._c);
|
||||
res4 = dsp->setParameter(FMOD_DSP_FLANGE_RATE, conf._d);
|
||||
break;
|
||||
case FilterProperties::FT_distort:
|
||||
res1=dsp->setParameter(FMOD_DSP_DISTORTION_LEVEL, conf._a);
|
||||
res1 = dsp->setParameter(FMOD_DSP_DISTORTION_LEVEL, conf._a);
|
||||
break;
|
||||
case FilterProperties::FT_normalize:
|
||||
res1=dsp->setParameter(FMOD_DSP_NORMALIZE_FADETIME, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_NORMALIZE_THRESHHOLD,conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_NORMALIZE_MAXAMP, conf._c);
|
||||
res1 = dsp->setParameter(FMOD_DSP_NORMALIZE_FADETIME, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_NORMALIZE_THRESHHOLD,conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_NORMALIZE_MAXAMP, conf._c);
|
||||
break;
|
||||
case FilterProperties::FT_parameq:
|
||||
res1=dsp->setParameter(FMOD_DSP_PARAMEQ_CENTER, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_PARAMEQ_BANDWIDTH, conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_PARAMEQ_GAIN, conf._c);
|
||||
res1 = dsp->setParameter(FMOD_DSP_PARAMEQ_CENTER, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_PARAMEQ_BANDWIDTH, conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_PARAMEQ_GAIN, conf._c);
|
||||
break;
|
||||
case FilterProperties::FT_pitchshift:
|
||||
res1=dsp->setParameter(FMOD_DSP_PITCHSHIFT_PITCH, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_PITCHSHIFT_FFTSIZE, conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_PITCHSHIFT_OVERLAP, conf._c);
|
||||
res1 = dsp->setParameter(FMOD_DSP_PITCHSHIFT_PITCH, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_PITCHSHIFT_FFTSIZE, conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_PITCHSHIFT_OVERLAP, conf._c);
|
||||
break;
|
||||
case FilterProperties::FT_chorus:
|
||||
res1=dsp->setParameter(FMOD_DSP_CHORUS_DRYMIX, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_CHORUS_WETMIX1, conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_CHORUS_WETMIX2, conf._c);
|
||||
res4=dsp->setParameter(FMOD_DSP_CHORUS_WETMIX3, conf._d);
|
||||
res5=dsp->setParameter(FMOD_DSP_CHORUS_DELAY, conf._e);
|
||||
res6=dsp->setParameter(FMOD_DSP_CHORUS_RATE, conf._f);
|
||||
res7=dsp->setParameter(FMOD_DSP_CHORUS_DEPTH, conf._g);
|
||||
res8=dsp->setParameter(FMOD_DSP_CHORUS_FEEDBACK, conf._h);
|
||||
res1 = dsp->setParameter(FMOD_DSP_CHORUS_DRYMIX, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_CHORUS_WETMIX1, conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_CHORUS_WETMIX2, conf._c);
|
||||
res4 = dsp->setParameter(FMOD_DSP_CHORUS_WETMIX3, conf._d);
|
||||
res5 = dsp->setParameter(FMOD_DSP_CHORUS_DELAY, conf._e);
|
||||
res6 = dsp->setParameter(FMOD_DSP_CHORUS_RATE, conf._f);
|
||||
res7 = dsp->setParameter(FMOD_DSP_CHORUS_DEPTH, conf._g);
|
||||
break;
|
||||
case FilterProperties::FT_reverb:
|
||||
res1=dsp->setParameter(FMOD_DSP_REVERB_DRYMIX, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_REVERB_WETMIX, conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_REVERB_ROOMSIZE, conf._c);
|
||||
res4=dsp->setParameter(FMOD_DSP_REVERB_DAMP, conf._d);
|
||||
res5=dsp->setParameter(FMOD_DSP_REVERB_WIDTH, conf._e);
|
||||
case FilterProperties::FT_sfxreverb:
|
||||
res1 = dsp->setParameter(FMOD_DSP_SFXREVERB_DRYLEVEL, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_SFXREVERB_ROOM, conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_SFXREVERB_ROOMHF, conf._c);
|
||||
res4 = dsp->setParameter(FMOD_DSP_SFXREVERB_DECAYTIME,conf._d);
|
||||
res5 = dsp->setParameter(FMOD_DSP_SFXREVERB_DECAYHFRATIO, conf._e);
|
||||
res6 = dsp->setParameter(FMOD_DSP_SFXREVERB_REFLECTIONSLEVEL,conf._f);
|
||||
res7 = dsp->setParameter(FMOD_DSP_SFXREVERB_REFLECTIONSDELAY,conf._g);
|
||||
res8 = dsp->setParameter(FMOD_DSP_SFXREVERB_REVERBLEVEL, conf._h);
|
||||
res9 = dsp->setParameter(FMOD_DSP_SFXREVERB_REVERBDELAY, conf._i);
|
||||
res10 = dsp->setParameter(FMOD_DSP_SFXREVERB_DIFFUSION, conf._j);
|
||||
res11 = dsp->setParameter(FMOD_DSP_SFXREVERB_DENSITY, conf._k);
|
||||
res12 = dsp->setParameter(FMOD_DSP_SFXREVERB_HFREFERENCE, conf._l);
|
||||
res13 = dsp->setParameter(FMOD_DSP_SFXREVERB_ROOMLF, conf._m);
|
||||
res14 = dsp->setParameter(FMOD_DSP_SFXREVERB_LFREFERENCE, conf._n);
|
||||
break;
|
||||
case FilterProperties::FT_compress:
|
||||
res1=dsp->setParameter(FMOD_DSP_COMPRESSOR_THRESHOLD, conf._a);
|
||||
res2=dsp->setParameter(FMOD_DSP_COMPRESSOR_ATTACK, conf._b);
|
||||
res3=dsp->setParameter(FMOD_DSP_COMPRESSOR_RELEASE, conf._c);
|
||||
res4=dsp->setParameter(FMOD_DSP_COMPRESSOR_GAINMAKEUP,conf._d);
|
||||
res1 = dsp->setParameter(FMOD_DSP_COMPRESSOR_THRESHOLD, conf._a);
|
||||
res2 = dsp->setParameter(FMOD_DSP_COMPRESSOR_ATTACK, conf._b);
|
||||
res3 = dsp->setParameter(FMOD_DSP_COMPRESSOR_RELEASE, conf._c);
|
||||
res4 = dsp->setParameter(FMOD_DSP_COMPRESSOR_GAINMAKEUP,conf._d);
|
||||
break;
|
||||
}
|
||||
|
||||
if ((res1!=FMOD_OK)||(res2!=FMOD_OK)||(res3!=FMOD_OK)||(res4!=FMOD_OK)||
|
||||
(res5!=FMOD_OK)||(res6!=FMOD_OK)||(res7!=FMOD_OK)||(res8!=FMOD_OK)) {
|
||||
(res5!=FMOD_OK)||(res6!=FMOD_OK)||(res7!=FMOD_OK)||(res8!=FMOD_OK)||
|
||||
(res9!=FMOD_OK)||(res10!=FMOD_OK)||(res11!=FMOD_OK)||(res12!=FMOD_OK)||
|
||||
(res13!=FMOD_OK)||(res14!=FMOD_OK)) {
|
||||
audio_error("Could not configure DSP");
|
||||
dsp->release();
|
||||
return NULL;
|
||||
@ -493,12 +509,18 @@ getSpeakerSetup() {
|
||||
case FMOD_SPEAKERMODE_7POINT1:
|
||||
returnMode = 6;
|
||||
break;
|
||||
case FMOD_SPEAKERMODE_PROLOGIC:
|
||||
case FMOD_SPEAKERMODE_SRS5_1_MATRIX:
|
||||
returnMode = 7;
|
||||
break;
|
||||
case FMOD_SPEAKERMODE_MAX:
|
||||
case FMOD_SPEAKERMODE_DOLBY5_1_MATRIX:
|
||||
returnMode = 8;
|
||||
break;
|
||||
case FMOD_SPEAKERMODE_MYEARS:
|
||||
returnMode = 9;
|
||||
break;
|
||||
case FMOD_SPEAKERMODE_MAX:
|
||||
returnMode = 10;
|
||||
break;
|
||||
default:
|
||||
returnMode = -1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user