- _free_sources.push_back(source);
- _sources_in_use.erase(_sources_in_use.begin()+i,
- _sources_in_use.begin()+i+1);
- break;
+ // sample name was not found in the buffer cache.
+ if ( sample->is_file() ) {
+ unsigned int size;
+ int freq, format;
+ void *data;
+
+ load(sample_name, &data, &format, &size, &freq);
+ sample->set_data( (unsigned char *)data );
+ sample->set_frequency( freq );
+ sample->set_format( format );
+ sample->set_size( size );
+ }
+
+ // create an OpenAL buffer handle
+ alGenBuffers(1, &buffer);
+ if ( !testForALError("generate buffer") ) {
+ // Copy data to the internal OpenAL buffer
+
+ const ALvoid *data = sample->get_data();
+ ALenum format = sample->get_format();
+ ALsizei size = sample->get_size();
+ ALsizei freq = sample->get_frequency();
+ alBufferData( buffer, format, data, size, freq );
+ sample->free_data();
+
+ if ( !testForALError("buffer add data") ) {
+ sample->set_buffer(buffer);
+ _buffers[sample_name] = refUint(buffer);
+ }