Commit Graph

7 Commits

Author SHA1 Message Date
Glenn Maynard d5f6445a5e fix double-counting reads below 0 2007-03-06 22:39:26 +00:00
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 5224b4b1c7 comment 2007-01-19 06:51:57 +00:00
Glenn Maynard 55195a502f fix crash when GetEndFrame() < m_iPositionFrames due to jumped position 2007-01-09 00:26:56 +00:00
Glenn Maynard e090c7b115 no need to manually propagate error messages 2006-12-23 06:55:21 +00:00
Glenn Maynard 27b4606e9d add RageSoundReader_Extend. This implements several RageSound
features (eg. fading, looping), but in a way that can be applied anywhere
in a sound filter chain.
2006-12-22 08:15:46 +00:00