// use sound buffer
 private static void UseSoundBuffer(int SoundBufferIndex)
 {
     if (OpenAlContext != IntPtr.Zero)
     {
         if (SoundBufferIndex >= 0)
         {
             if (!SoundBuffers[SoundBufferIndex].TriedLoading)
             {
                 SoundBuffers[SoundBufferIndex].TriedLoading = true;
                 if (!SoundBuffers[SoundBufferIndex].OpenAlBufferIndex.Valid)
                 {
                     try
                     {
                         WaveParser.WaveData data = WaveParser.LoadFromFile(SoundBuffers[SoundBufferIndex].FileName);
                         data = WaveParser.ConvertToMono8Or16(data);
                         if (data.Format.BitsPerSample == 8)
                         {
                             int buffer;
                             Al.alGenBuffers(1, out buffer);
                             Al.alBufferData(buffer, Al.AL_FORMAT_MONO8, data.Bytes, data.Bytes.Length, data.Format.SampleRate);
                             SoundBuffers[SoundBufferIndex].OpenAlBufferIndex = new OpenAlIndex(buffer, true);
                             SoundBuffers[SoundBufferIndex].Duration          = (double)data.Bytes.Length / (double)(data.Format.SampleRate);
                         }
                         else if (data.Format.BitsPerSample == 16)
                         {
                             int buffer;
                             Al.alGenBuffers(1, out buffer);
                             Al.alBufferData(buffer, Al.AL_FORMAT_MONO16, data.Bytes, data.Bytes.Length, data.Format.SampleRate);
                             SoundBuffers[SoundBufferIndex].OpenAlBufferIndex = new OpenAlIndex(buffer, true);
                             SoundBuffers[SoundBufferIndex].Duration          = (double)data.Bytes.Length / (double)(2 * data.Format.SampleRate);
                         }
                         else
                         {
                             SoundBuffers[SoundBufferIndex].OpenAlBufferIndex = new OpenAlIndex(0, false);
                         }
                     }
                     catch
                     {
                         SoundBuffers[SoundBufferIndex].OpenAlBufferIndex = new OpenAlIndex(0, false);
                     }
                 }
             }
         }
     }
 }