diff options
author | Max Horn | 2003-08-06 17:13:04 +0000 |
---|---|---|
committer | Max Horn | 2003-08-06 17:13:04 +0000 |
commit | 69ee268e7fc0c335962bbc65be9e13f932636429 (patch) | |
tree | b04b80f4fd860b348e48bccba1e1c99190dbd5ec /sound | |
parent | 32107ae69a6f4d8ab55a1ba801a721ee0c838de8 (diff) | |
download | scummvm-rg350-69ee268e7fc0c335962bbc65be9e13f932636429.tar.gz scummvm-rg350-69ee268e7fc0c335962bbc65be9e13f932636429.tar.bz2 scummvm-rg350-69ee268e7fc0c335962bbc65be9e13f932636429.zip |
some cleanup
svn-id: r9575
Diffstat (limited to 'sound')
-rw-r--r-- | sound/mixer.cpp | 1 | ||||
-rw-r--r-- | sound/rate.cpp | 1 | ||||
-rw-r--r-- | sound/rate.h | 5 | ||||
-rw-r--r-- | sound/resample.cpp | 70 | ||||
-rw-r--r-- | sound/resample.h | 93 |
5 files changed, 91 insertions, 79 deletions
diff --git a/sound/mixer.cpp b/sound/mixer.cpp index b9e3f2441b..40f59714ab 100644 --- a/sound/mixer.cpp +++ b/sound/mixer.cpp @@ -27,6 +27,7 @@ #include "sound/mixer.h" #include "sound/rate.h" +#include "sound/audiostream.h" #pragma mark - diff --git a/sound/rate.cpp b/sound/rate.cpp index 552c3fbd14..a99794c6ef 100644 --- a/sound/rate.cpp +++ b/sound/rate.cpp @@ -29,6 +29,7 @@ #include "stdafx.h" #include "sound/rate.h" +#include "sound/audiostream.h" /** * The precision of the fractional computations used by the rate converter. diff --git a/sound/rate.h b/sound/rate.h index a3ef9652d1..67224b2377 100644 --- a/sound/rate.h +++ b/sound/rate.h @@ -22,13 +22,12 @@ #ifndef SOUND_RATE_H #define SOUND_RATE_H -#include <stdio.h> -#include <assert.h> #include "common/scummsys.h" #include "common/engine.h" #include "common/util.h" -#include "sound/audiostream.h" +//#include "sound/audiostream.h" +class AudioInputStream; typedef int16 st_sample_t; typedef uint16 st_volume_t; diff --git a/sound/resample.cpp b/sound/resample.cpp index 32cc19e2c5..99deeaf3aa 100644 --- a/sound/resample.cpp +++ b/sound/resample.cpp @@ -50,18 +50,55 @@ * Get the idea? :) */ +#include "stdafx.h" #include <math.h> -#include <stdlib.h> -#include <string.h> -#include "rate.h" - -/* resample includes */ -#include "resample.h" +#include "sound/resample.h" +#include "sound/audiostream.h" + + +/* Conversion constants */ +#define Lc 7 +#define Nc (1<<Lc) +#define La 16 +#define Na (1<<La) +#define Lp (Lc+La) +#define Np (1<<Lp) +#define Amask (Na-1) +#define Pmask (Np-1) + +#define MAXNWING (80<<Lc) +/* Description of constants: + * + * Nc - is the number of look-up values available for the lowpass filter + * between the beginning of its impulse response and the "cutoff time" + * of the filter. The cutoff time is defined as the reciprocal of the + * lowpass-filter cut off frequence in Hz. For example, if the + * lowpass filter were a sinc function, Nc would be the index of the + * impulse-response lookup-table corresponding to the first zero- + * crossing of the sinc function. (The inverse first zero-crossing + * time of a sinc function equals its nominal cutoff frequency in Hz.) + * Nc must be a power of 2 due to the details of the current + * implementation. The default value of 128 is sufficiently high that + * using linear interpolation to fill in between the table entries + * gives approximately 16-bit precision, and quadratic interpolation + * gives about 23-bit (float) precision in filter coefficients. + * + * Lc - is log base 2 of Nc. + * + * La - is the number of bits devoted to linear interpolation of the + * filter coefficients. + * + * Lp - is La + Lc, the number of bits to the right of the binary point + * in the integer "time" variable. To the left of the point, it indexes + * the input array (X), and to the right, it is interpreted as a number + * between 0 and 1 sample of the input X. The default value of 23 is + * about right. There is a constraint that the filter window must be + * "addressable" in a int32_t, more precisely, if Nmult is the number + * of sinc zero-crossings in the right wing of the filter window, then + * (Nwing<<Lp) must be expressible in 31 bits. + * + */ -typedef struct { - byte priv[1024]; -} eff_struct; -typedef eff_struct *eff_t; /* this Float MUST match that in filter.c */ #define Float double/*float*/ @@ -284,6 +321,7 @@ int st_resample_flow(eff_t effp, AudioInputStream &input, st_sample_t *obuf, st_ long Nproc; // The number of bytes we process to generate Nout output bytes const long obufSize = *osamp; +/* TODO: adjust for the changes made to AudioInputStream; add support for stereo initially, could just average the left/right channel -> bad for quality of course, but easiest to implement and would get this going again. @@ -293,6 +331,7 @@ But better for efficiency would be to rewrite those to deal with 2 channels, too Because esp in SrcEX/SrcUD, only very few computations depend on the input data, and dealing with both channels in parallel should only be a little slower than dealing with them alone +*/ // Constrain amount we actually process //fprintf(stderr,"Xp %d, Xread %d\n",r->Xp, r->Xread); @@ -740,17 +779,6 @@ static void LpFilter(double *c, long N, double frq, double Beta, long Num) { #pragma mark - -class ResampleRateConverter : public RateConverter { -protected: - eff_struct effp; -public: - ResampleRateConverter(st_rate_t inrate, st_rate_t outrate, int quality); - ~ResampleRateConverter(); - virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol); - virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol); -}; - - ResampleRateConverter::ResampleRateConverter(st_rate_t inrate, st_rate_t outrate, int quality) { // FIXME: quality is for now a nasty hack. // Valid values are 0,1,2,3 (everything else is treated like 0 for now) diff --git a/sound/resample.h b/sound/resample.h index f66ad75a5d..c64787906d 100644 --- a/sound/resample.h +++ b/sound/resample.h @@ -1,61 +1,44 @@ -/* - * FILE: resample.h - * BY: Julius Smith (at CCRMA, Stanford U) - * C BY: translated from SAIL to C by Christopher Lee Fraley - * (cf0v@andrew.cmu.edu) - * DATE: 7-JUN-88 - * VERS: 2.0 (17-JUN-88, 3:00pm) - */ - -/* - * October 29, 1999 - * Various changes, bugfixes(?), increased precision, by Stan Brooks. +/* ScummVM - Scumm Interpreter + * Copyright (C) 2001-2003 The ScummVM project * - * This source code is distributed in the hope that it will be useful, + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. + + * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. - * - */ + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. -/* Conversion constants */ -#define Lc 7 -#define Nc (1<<Lc) -#define La 16 -#define Na (1<<La) -#define Lp (Lc+La) -#define Np (1<<Lp) -#define Amask (Na-1) -#define Pmask (Np-1) - -#define MAXNWING (80<<Lc) -/* Description of constants: - * - * Nc - is the number of look-up values available for the lowpass filter - * between the beginning of its impulse response and the "cutoff time" - * of the filter. The cutoff time is defined as the reciprocal of the - * lowpass-filter cut off frequence in Hz. For example, if the - * lowpass filter were a sinc function, Nc would be the index of the - * impulse-response lookup-table corresponding to the first zero- - * crossing of the sinc function. (The inverse first zero-crossing - * time of a sinc function equals its nominal cutoff frequency in Hz.) - * Nc must be a power of 2 due to the details of the current - * implementation. The default value of 128 is sufficiently high that - * using linear interpolation to fill in between the table entries - * gives approximately 16-bit precision, and quadratic interpolation - * gives about 23-bit (float) precision in filter coefficients. - * - * Lc - is log base 2 of Nc. + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * - * La - is the number of bits devoted to linear interpolation of the - * filter coefficients. - * - * Lp - is La + Lc, the number of bits to the right of the binary point - * in the integer "time" variable. To the left of the point, it indexes - * the input array (X), and to the right, it is interpreted as a number - * between 0 and 1 sample of the input X. The default value of 23 is - * about right. There is a constraint that the filter window must be - * "addressable" in a int32_t, more precisely, if Nmult is the number - * of sinc zero-crossings in the right wing of the filter window, then - * (Nwing<<Lp) must be expressible in 31 bits. + * $Header$ * */ + +#ifndef SOUND_RESAMPLE_H +#define SOUND_RESAMPLE_H + +#include "sound/rate.h" + +typedef struct { + byte priv[1024]; +} eff_struct; +typedef eff_struct *eff_t; + +/** High quality rate conversion algorithm, based on SoX (http://sox.sourceforge.net). */ +class ResampleRateConverter : public RateConverter { +protected: + eff_struct effp; +public: + ResampleRateConverter(st_rate_t inrate, st_rate_t outrate, int quality); + ~ResampleRateConverter(); + virtual int flow(AudioInputStream &input, st_sample_t *obuf, st_size_t osamp, st_volume_t vol); + virtual int drain(st_sample_t *obuf, st_size_t osamp, st_volume_t vol); +}; + + +#endif |