Commit Graph
10 Commits
Author SHA1 Message Date
Glenn Maynard 1bd5513698 Switch to floating-point sound internally.
This allows us to change the volume of sounds in filters ("volume",
"fade" properties) without quantizing the audio prematurely.  Previously,
we had a hack to apply volume changes as a mixing-time step.  This
can be done at any point in the filter chain now.

This also means we only need to worry about clipping at the very
last mixing step, instead of at every place we change sound.

Dithering for 16-bit audio and more intelligent gain control
is possible, as we have full-resolution, unclipped sound at the
mixing phase.

We support high resolution source sounds; both Vorbis and MAD
supply more than 16 bits.

Several filters, such as resampling, are easier to implement as
floats; these no longer need to convert back and forth.

Negatives:
 - More memory use.  The main case of this is in RageSoundReader_Preload,
which will be fixed: we can preload in 16-bit without losing most of the
above.
 - Some extra overhead for accessing more memory.
2007-01-27 07:14:58 +00:00
Glenn Maynard fd4b5f93bb RageSoundReader::Read(char *) -> int16_t *. This was originally
char * based on the idea of supporting more than one sample type.
I don't plan to do that (though I may change the sample type to float
or int32).
2007-01-20 01:10:24 +00:00
Glenn Maynard 18d09949c5 less overhead when not used 2007-01-18 10:30:47 +00:00
Glenn Maynard 8f9885c229 Both the pitch changer and the resampler quantize the supplied ratio, making
aligning their speeds very difficult.  The resampler is more limited, and it's easier
to remove this restriction from the speed changer, so reverse this logic, basing
the ratio on the resampler instead of the speed changer.  (also simpler)
2006-12-27 07:46:10 +00:00
Glenn Maynard 65e6922aca better rounding error fix. The ratio goes through a relatively low-resolution
fixed-point representation within SpeedChange (m_iDeltaFrames).
2006-12-27 05:40:00 +00:00
Glenn Maynard 102ccf3ed1 snap ratio 2006-12-27 01:58:52 +00:00
Glenn Maynard 7cf7403e29 simplify 2006-12-27 01:58:20 +00:00
Glenn Maynard 87cba64986 ratio fixup 2006-12-10 07:34:35 +00:00
Glenn Maynard 25e67dd4dc RageSoundReader::Read(buf, unsigned bytes) -> (buf, int frames);
return value in frames, not bytes
2006-12-10 03:56:36 +00:00
Glenn Maynard 8419633852 add pitch change filter 2006-11-30 03:59:35 +00:00