diff options
author | Paweł Kołodziejski | 2003-09-02 20:34:22 +0000 |
---|---|---|
committer | Paweł Kołodziejski | 2003-09-02 20:34:22 +0000 |
commit | 7c4e678a874eee9e1de7d9e476f737892e773de0 (patch) | |
tree | 79c53d11b0012fef0b89af655e203b513d6fd776 /sound/rate.cpp | |
parent | 47a2bc6eb62c99d212ea83ae56402241a871f733 (diff) | |
download | scummvm-rg350-7c4e678a874eee9e1de7d9e476f737892e773de0.tar.gz scummvm-rg350-7c4e678a874eee9e1de7d9e476f737892e773de0.tar.bz2 scummvm-rg350-7c4e678a874eee9e1de7d9e476f737892e773de0.zip |
moved volume and pan control into flow func
svn-id: r9976
Diffstat (limited to 'sound/rate.cpp')
-rw-r--r-- | sound/rate.cpp | 19 |
1 files changed, 16 insertions, 3 deletions
diff --git a/sound/rate.cpp b/sound/rate.cpp index a99794c6ef..e4f9fb6b19 100644 --- a/sound/rate.cpp +++ b/sound/rate.cpp @@ -80,7 +80,7 @@ protected: public: LinearRateConverter(st_rate_t inrate, st_rate_t outrate); - int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol); + int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol, byte vol_p, int8 pan); int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol) { return (ST_SUCCESS); } @@ -124,7 +124,7 @@ LinearRateConverter<stereo, reverseStereo>::LinearRateConverter(st_rate_t inrate * Return number of samples processed. */ template<bool stereo, bool reverseStereo> -int LinearRateConverter<stereo, reverseStereo>::flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol) +int LinearRateConverter<stereo, reverseStereo>::flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol, byte vol_p, int8 pan) { st_sample_t *ostart, *oend; st_sample_t out[2], tmpOut; @@ -170,6 +170,13 @@ int LinearRateConverter<stereo, reverseStereo>::flow(AudioInputStream &input, st out[reverseStereo ? 0 : 1] = (st_sample_t)((tmpOut * vol) >> 8); } + byte pan_l = abs(pan - 128); + byte pan_r = abs(pan + 128); + out[0] = (st_sample_t)((out[0] * vol_p) >> 8); + out[1] = (st_sample_t)((out[1] * vol_p) >> 8); + out[0] = (st_sample_t)((out[0] * pan_l) >> 8); + out[1] = (st_sample_t)((out[1] * pan_r) >> 8); + // output left channel clampedAdd(*obuf++, out[0]); @@ -201,7 +208,7 @@ the_end: template<bool stereo, bool reverseStereo> class CopyRateConverter : public RateConverter { public: - virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol) { + virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol, byte vol_p, int8 pan) { int16 tmp[2]; st_size_t len = osamp; assert(input.isStereo() == stereo); @@ -209,6 +216,12 @@ public: tmp[0] = tmp[1] = (input.read() * vol) >> 8; if (stereo) tmp[reverseStereo ? 0 : 1] = (input.read() * vol) >> 8; + byte pan_l = abs(pan - 128); + byte pan_r = abs(pan + 128); + tmp[0] = ((tmp[0] * vol_p) >> 8); + tmp[1] = ((tmp[1] * vol_p) >> 8); + tmp[0] = ((tmp[0] * pan_l) >> 8); + tmp[1] = ((tmp[1] * pan_r) >> 8); clampedAdd(*obuf++, tmp[0]); clampedAdd(*obuf++, tmp[1]); } |