aboutsummaryrefslogtreecommitdiff
path: root/sound
diff options
context:
space:
mode:
authorMax Horn2003-08-06 17:13:04 +0000
committerMax Horn2003-08-06 17:13:04 +0000
commit69ee268e7fc0c335962bbc65be9e13f932636429 (patch)
treeb04b80f4fd860b348e48bccba1e1c99190dbd5ec /sound
parent32107ae69a6f4d8ab55a1ba801a721ee0c838de8 (diff)
downloadscummvm-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.cpp1
-rw-r--r--sound/rate.cpp1
-rw-r--r--sound/rate.h5
-rw-r--r--sound/resample.cpp70
-rw-r--r--sound/resample.h93
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