title: Clearing OpenAL for loading new sounds
body: <p>I am loading a initial set of 100+ sounds into the OpenAL buffer. After a while I am clearing the OpenAL context and reloading another set of sounds. But the newly loaded files are not playing. It seems that the previous OpenAL buffers are not really released.</p>
  
  <p>Here is my code for initializing and destroying OpenAL</p>
  
  <pre><code>- (void)initOpenAL
  {
      // Initialization
      mDevice = alcOpenDevice(NULL); // select the “preferred device”
      if (mDevice) {
          // use the device to make a context
          mContext=alcCreateContext(mDevice,NULL);
          // set my context to the currently active one
          alcMakeContextCurrent(mContext);
      }
  }
  
  - (void)cleanUpOpenAL
  {
      // delete the sources
      for (NSNumber * sourceNumber in [soundDictionary allValues]) 
      {
          NSUInteger sourceID = [sourceNumber unsignedIntegerValue];
          alDeleteSources(1, &amp;sourceID);
      }
  
      [soundDictionary removeAllObjects];
  
      // delete the buffers
      for (NSNumber * bufferNumber in bufferStorageArray) 
      {
          NSUInteger bufferID = [bufferNumber unsignedIntegerValue];
          alDeleteBuffers(1, &amp;bufferID);
      }
  
      [bufferStorageArray removeAllObjects];
  
      // destroy the context
      alcDestroyContext(mContext);
      // close the device
      alcCloseDevice(mDevice);
  }
  </code></pre>
  
  <p>This is how I load the sounds inside a loop:</p>
  
  <pre><code>NSString *filePath = [[NSBundle mainBundle] pathForResource:subString ofType:@"wav"];
          AudioFileID fileID = [self openAudioFile:filePath];
  
          // find out how big the actual audio data is
          UInt32 fileSize = (UInt32)[self audioFileSize:fileID];
  
          // this is where the audio data will live for the moment
          unsigned char * outData = malloc(fileSize);
  
          // this where we actually get the bytes from the file and put them
          // into the data buffer
          OSStatus result = noErr;
          result = AudioFileReadBytes(fileID, false, 0, &amp;fileSize, outData);
  
          if (result != 0) NSLog(@"cannot load effect: %@",fileName);
  
          NSUInteger bufferID;
          // grab a buffer ID from openAL
          alGenBuffers(1, &amp;bufferID);
          if((alGetError()) != AL_NO_ERROR) {
              printf("Error!");
          }
  
          // jam the audio data into the new buffer
          alBufferData(bufferID,AL_FORMAT_STEREO16,outData,fileSize,44100);
          if((alGetError()) != AL_NO_ERROR) {
              printf("Error!");
          }
  
          // clean up the buffer
          if (outData)
          {
              free(outData);
          }
          else
          {
              outData = NULL;
          }
  
          // save the buffer so I can release it later
          [bufferStorageArray addObject:[NSNumber numberWithUnsignedInteger:bufferID]];
  
          NSUInteger sourceID;
  
          // grab a source ID from openAL
          alGenSources(1, &amp;sourceID);
  
          // attach the buffer to the source
          alSourcei(sourceID, AL_BUFFER, bufferID);
  
          // store this for future use
          [soundDictionary setObject:[NSNumber numberWithUnsignedInt:sourceID] forKey: [NSNumber numberWithUnsignedInt:i+(padNumber*10)]];
  
          subString = NULL;
          filePath = NULL;
  </code></pre>
  
  <p>And this is what I am doing before I am reloading the new set of sounds:</p>
  
  <pre><code>[self cleanUpOpenAL];
  [self initOpenAL];
  </code></pre>
  
  <p>Any idea where things are going wrong?</p>