snes9x/apu/resampler.h

61 lines
1.2 KiB
C
Raw Normal View History

2010-09-25 15:46:12 +00:00
/* 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:
2010-09-25 16:46:06 +00:00
virtual void clear (void) = 0;
virtual void time_ratio (double) = 0;
virtual void read (short *, int) = 0;
virtual int avail (void) = 0;
2010-09-25 15:46:12 +00:00
Resampler (int num_samples) : ring_buffer (num_samples << 1)
{
}
~Resampler ()
{
}
2010-09-25 16:46:06 +00:00
inline bool
2010-09-25 15:46:12 +00:00
push (short *src, int num_samples)
{
if (max_write () < num_samples)
return false;
2010-09-25 16:46:06 +00:00
!num_samples || ring_buffer::push ((unsigned char *) src, num_samples << 1);
2010-09-25 15:46:12 +00:00
return true;
}
2010-09-25 16:46:06 +00:00
inline int
space_empty (void) const
2010-09-25 16:46:06 +00:00
{
return buffer_size - size;
}
2010-09-25 16:46:06 +00:00
inline int
space_filled (void) const
2010-09-25 16:46:06 +00:00
{
return size;
}
2010-09-25 16:46:06 +00:00
inline int
max_write (void) const
2010-09-25 15:46:12 +00:00
{
return space_empty () >> 1;
}
2010-09-25 16:46:06 +00:00
inline void
2010-09-25 15:46:12 +00:00
resize (int num_samples)
{
ring_buffer::resize (num_samples << 1);
}
};
#endif /* __RESAMPLER_H */