// 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); } } } } } }