1//! From BeBook examples.
2
3
4#include <Application.h>
5#include <Sound.h>
6#include <SoundPlayer.h>
7
8
9typedef struct cookie_record {
10	float value;
11	float direction;
12} cookie_record;
13
14
15void
16BufferProc(void* _cookie, void* buffer, size_t size,
17	const media_raw_audio_format& format)
18{
19	// We're going to be cheap and only work for floating-point audio
20
21	if (format.format != media_raw_audio_format::B_AUDIO_FLOAT)
22		return;
23
24	// Now fill the buffer with sound!
25
26	cookie_record* cookie = (cookie_record*)_cookie;
27	uint32 channelCount = format.channel_count;
28	size_t floatSize = size / 4;
29	float* buf = (float*)buffer;
30
31	for (size_t i = 0; i < floatSize; i += channelCount) {
32		for (size_t j = 0; j < channelCount; j++) {
33			buf[i + j] = cookie->value;
34		}
35
36		if (cookie->direction == 1.0 && cookie->value >= 1.0)
37			cookie->direction = -1.0;
38		else if (cookie->direction == -1.0 && cookie->value <= -1.0)
39			cookie->direction = 1.0;
40
41		cookie->value += cookie->direction * (1.0 / 64.0);
42	}
43}
44
45
46int
47main()
48{
49	BApplication app("application/dzwiek");
50
51	cookie_record cookie;
52
53	cookie.value = 0.0;
54	cookie.direction = 1.0;
55
56	BSoundPlayer player("wave_player", BufferProc, NULL, &cookie);
57	player.Start();
58	player.SetHasData(true);
59
60	sleep(5);
61
62	player.Stop();
63}
64