bool create_sound_buffer(sound_buffer_t *buffer, size_t channel_count, size_t sample_rate, size_t bits_per_sample, float duration) { if (buffer) { ALuint id = 0; ALenum format = al_format(channel_count, bits_per_sample); size_t bps = bits_per_sample * sample_rate * channel_count; size_t nbytes = size_t(ceil(duration * (bps / 8))); alGenBuffers(1, &id); if (id == 0) return false; buffer->Id = id; buffer->Format = format; buffer->ChannelCount = channel_count; buffer->SampleRate = sample_rate; buffer->BitsPerSample = bits_per_sample; buffer->DataSize = nbytes; buffer->Duration = duration; return true; } else return false; }
void al_mus_process( ALuint b ) { int l; ALuint format; l = si.StreamRead( mus_stream, BUFFER_SIZE, decode_buffer ); if ( l == 0 ) { si.StreamClose( mus_stream ); mus_stream = si.StreamOpen( s_backgroundLoop ); if ( !mus_stream ) { SndAl_StopBackgroundTrack(); return; } l = si.StreamRead( mus_stream, BUFFER_SIZE, decode_buffer ); } format = al_format( mus_stream->info.width, mus_stream->info.channels ); qalBufferData( b, format, decode_buffer, l, mus_stream->info.rate ); }