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