10 ao_sample_format format
;
14 int AoWriter_init(struct AoWriter
*self
) {
16 memset(self
, 0, sizeof(*self
));
17 self
->format
.bits
= 8;
18 self
->format
.channels
= 1;
19 self
->format
.rate
= 11025;
20 self
->format
.byte_format
= AO_FMT_LITTLE
;
21 self
->aodriver
= ao_default_driver_id();
22 self
->device
= ao_open_live(self
->aodriver
, &self
->format
, NULL
);
23 return self
->device
!= NULL
;
26 int AoWriter_write(struct AoWriter
*self
, void* buffer
, size_t bufsize
) {
27 return ao_play(self
->device
, buffer
, bufsize
);
30 int AoWriter_close(struct AoWriter
*self
) {
31 return ao_close(self
->device
);
35 int msleep(long millisecs
) {
36 struct timespec req
, rem
;
37 req
.tv_sec
= millisecs
/ 1000;
38 req
.tv_nsec
= (millisecs
% 1000) * 1000 * 1000;
40 while((ret
= nanosleep(&req
, &rem
)) == -1 && errno
== EINTR
) req
= rem
;
48 int numsamples
= 1000;
49 int samplerate
= 11025;
50 unsigned char samples
[numsamples
];
52 for(i
= 0; i
< numsamples
; i
++) {
53 samples
[i
] = round(120*sin(i
*(2*M_PI
)/30.0)+128);
56 float delay
= ((float)numsamples
/(float)samplerate
) * 1000.f
;
57 AoWriter_write(&ao
, samples
, numsamples
);