snes9x/apu/resampler.h

61 lines
1.2 KiB
C++

/* Simple resampler based on bsnes's ruby audio library */
#ifndef __RESAMPLER_H
#define __RESAMPLER_H
#include "ring_buffer.h"
class Resampler : public ring_buffer
{
public:
virtual void clear (void) = 0;
virtual void time_ratio (double) = 0;
virtual void read (short *, int) = 0;
virtual int avail (void) = 0;
Resampler (int num_samples) : ring_buffer (num_samples << 1)
{
}
virtual ~Resampler ()
{
}
inline bool
push (short *src, int num_samples)
{
if (max_write () < num_samples)
return false;
!num_samples || ring_buffer::push ((unsigned char *) src, num_samples << 1);
return true;
}
inline int
space_empty (void) const
{
return buffer_size - size;
}
inline int
space_filled (void) const
{
return size;
}
inline int
max_write (void) const
{
return space_empty () >> 1;
}
inline void
resize (int num_samples)
{
ring_buffer::resize (num_samples << 1);
}
};
#endif /* __RESAMPLER_H */