Example #1
0
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;
}
Example #2
0
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 );
}