Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
RishiRecon
GitHub Repository: RishiRecon/exploits
Path: blob/main/misc/emulator/xnes/snes9x/apu/resampler.h
28798 views
1
/* Simple resampler based on bsnes's ruby audio library */
2
3
#ifndef __RESAMPLER_H
4
#define __RESAMPLER_H
5
6
#include "ring_buffer.h"
7
8
class Resampler : public ring_buffer
9
{
10
public:
11
virtual void clear (void) = 0;
12
virtual void time_ratio (double) = 0;
13
virtual void read (short *, int) = 0;
14
virtual int avail (void) = 0;
15
16
Resampler (int num_samples) : ring_buffer (num_samples << 1)
17
{
18
}
19
20
virtual ~Resampler ()
21
{
22
}
23
24
inline bool
25
push (short *src, int num_samples)
26
{
27
if (max_write () < num_samples)
28
return false;
29
30
!num_samples || ring_buffer::push ((unsigned char *) src, num_samples << 1);
31
32
return true;
33
}
34
35
inline int
36
space_empty (void)
37
{
38
return buffer_size - size;
39
}
40
41
inline int
42
space_filled (void)
43
{
44
return size;
45
}
46
47
inline int
48
max_write (void)
49
{
50
return space_empty () >> 1;
51
}
52
53
inline void
54
resize (int num_samples)
55
{
56
ring_buffer::resize (num_samples << 1);
57
}
58
};
59
60
#endif /* __RESAMPLER_H */
61
62