1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
;
typedef unsigned bufptr_t;
class SNDRENDER;
class SNDBUFFER
;
// USAGE EXAMPLE
#include "sndrender/*.h"
SNDBUFFER buf(4096);
SNDCHIP ay1(buf), ay2(buf);
SNDRENDER beeper(buf);
// global emulation loop
for (;;) {
ay1.start_frame();
ay2.start_frame();
beeper.start_frame();
// Z80 emulation before INT
for (int t = 0; t < 71680; t++) {
ay1.select(0);
ay1.write(t, t % 100);
ay2.select(3);
ay2.write(t, t % 100);
beeper.update(t, t % 4000, t % 400);
}
ay1.end_frame(t);
ay2.end_frame(t);
beeper.end_frame(t);
buf.count_start();
buf.count(ay1);
buf.count(ay2);
buf.count(beeper);
unsigned n_samples = buf.count_end();
bufptr_t pos1, pos2;
unsigned size1, size2;
buf.get_buffers(pos1, size1, pos2, size2, n_samples);
wav_play(buf.buffer+pos1, size1);
wav_play(buf.buffer+pos2, size2);
buf.samples_read(n_samples);
}