/// <summary> /// Allocates the unmanaged memory for the midi headers and buffers. /// </summary> private void AllocateBuffers() { if (this.BufferSize > 0 && this.BufferCount > 0) { this.memHeaders = MemoryUtil.Alloc(MemoryUtil.SizeOfMidiHeader * this.BufferCount); this.memBuffers = MemoryUtil.Alloc(this.BufferSize * this.BufferCount); GC.AddMemoryPressure((MemoryUtil.SizeOfMidiHeader + this.BufferSize) * this.BufferCount); IntPtr headerMem = IntPtr.Add(this.memHeaders, 0); IntPtr bufferMem = IntPtr.Add(this.memBuffers, 0); for (int i = 0; i < this.BufferCount; i++) { var buffer = new MidiBufferStream(headerMem, bufferMem, this.BufferSize, this.StreamAccess); try { this.unusedBuffers.Enqueue(buffer); this.mapBuffers.Add(headerMem, buffer); headerMem = IntPtr.Add(headerMem, MemoryUtil.SizeOfMidiHeader); bufferMem = IntPtr.Add(bufferMem, this.BufferSize); } catch { buffer.Dispose(); throw; } } } }