//! From BeBook examples. #include #include #include typedef struct cookie_record { float value; float direction; } cookie_record; void BufferProc(void* _cookie, void* buffer, size_t size, const media_raw_audio_format& format) { // We're going to be cheap and only work for floating-point audio if (format.format != media_raw_audio_format::B_AUDIO_FLOAT) return; // Now fill the buffer with sound! cookie_record* cookie = (cookie_record*)_cookie; uint32 channelCount = format.channel_count; size_t floatSize = size / 4; float* buf = (float*)buffer; for (size_t i = 0; i < floatSize; i += channelCount) { for (size_t j = 0; j < channelCount; j++) { buf[i + j] = cookie->value; } if (cookie->direction == 1.0 && cookie->value >= 1.0) cookie->direction = -1.0; else if (cookie->direction == -1.0 && cookie->value <= -1.0) cookie->direction = 1.0; cookie->value += cookie->direction * (1.0 / 64.0); } } int main() { BApplication app("application/dzwiek"); cookie_record cookie; cookie.value = 0.0; cookie.direction = 1.0; BSoundPlayer player("wave_player", BufferProc, NULL, &cookie); player.Start(); player.SetHasData(true); sleep(5); player.Stop(); }