private bool FillBuffer(int buffer) { int totalRead = 0; int needToRead = BufferSize / decoder.GetBlockSize(); while (true) { int actuallyRead = decoder.ReadBlocks(decodedData, totalRead, needToRead - totalRead); totalRead += actuallyRead; if (totalRead == needToRead || !looping) { break; } decoder.Rewind(); } if (totalRead > 0) { ALFormat format = (decoder.GetFormat() == AudioFormat.Stereo16) ? ALFormat.Stereo16 : ALFormat.Mono16; int dataSize = totalRead * decoder.GetBlockSize(); AL.BufferData(buffer, format, decodedData, dataSize, decoder.GetFrequency()); return(true); } return(false); }