Skip to content
This repository has been archived by the owner. It is now read-only.
Permalink
Browse files

First shot at new audio resampling code.

  • Loading branch information
icculus committed Jan 11, 2009
1 parent 12091e3 commit a5d15370caa66bc0f14aefc9587d2a72e42798bd
Showing with 14,058 additions and 1,048 deletions.
  1. +1 −6 include/SDL_audio.h
  2. +2 −0 src/audio/SDL_audio.c
  3. +11 −0 src/audio/SDL_audio_c.h
  4. +93 −1,042 src/audio/SDL_audiocvt.c
  5. +13,951 −0 src/audio/SDL_audiotypecvt.c
@@ -147,15 +147,10 @@ typedef struct SDL_AudioCVT
SDL_AudioFormat dst_format; /* Target audio format */
double rate_incr; /* Rate conversion increment */
Uint8 *buf; /* Buffer to hold entire audio data */
Uint8 *coeff; /* Filter coefficients: either big windowed sinc filter, or 6 IIR lowpass coefficients */
Uint8 *state_buf; /* Sample history for either the FIR or IIR filter. For IIR filter, first two elements are X, second two are Y, and state_pos toggles the order */
int state_pos; /* Position in the state */
int len_sinc; /* Length of windowed sinc filter, in appropriate units (not necessarily bytes) */
int len; /* Length of original audio buffer */
int len_cvt; /* Length of converted audio buffer */
int len_mult; /* buffer must be len*len_mult big */
int len_div; /* destination length = len_mult / len_div * src length */
double len_ratio; /* Given len, final size is len*len_ratio ( len_ratio = len_mult / len_div ) */
double len_ratio; /* Given len, final size is len*len_ratio */
SDL_AudioFilter filters[10]; /* Filter list */
int filter_index; /* Current audio conversion function */
} SDL_AudioCVT;
@@ -371,6 +371,7 @@ SDL_RunAudio(void *devicep)
silence = 0;
}

#if 0 /* !!! FIXME: I took len_div out of the structure. Use rate_incr instead? */
/* If the result of the conversion alters the length, i.e. resampling is being used, use the streamer */
if (device->convert.len_mult != 1 || device->convert.len_div != 1) {
/* The streamer's maximum length should be twice whichever is larger: spec.size or len_cvt */
@@ -391,6 +392,7 @@ SDL_RunAudio(void *devicep)
device->spec.size * device->convert.len_div /
device->convert.len_mult;
}
#endif

/* stream_len = device->convert.len; */
stream_len = device->spec.size;
@@ -42,4 +42,15 @@ typedef struct
} SDL_AudioTypeFilters;
extern const SDL_AudioTypeFilters sdl_audio_type_filters[];

/* this is used internally to access some autogenerated code. */
typedef struct
{
SDL_AudioFormat fmt;
int channels;
int upsample;
int multiple;
SDL_AudioFilter filter;
} SDL_AudioRateFilters;
extern const SDL_AudioRateFilters sdl_audio_rate_filters[];

/* vi: set ts=4 sw=4 expandtab: */

0 comments on commit a5d1537

Please sign in to comment.