Bank : Singleton { classvar <>root, <>extensions, <>lazyLoading=true; var buffers.size) { buffers = buffers.extend(paths.size) }; paths.do { |path, i| var buffer; buffer = buffers[i]; if (path.notNil) { if (lazyLoading.not) { this.bufferAt(i) } } { if (buffer.notNil) { buffer.free; buffers[i] = buffer = nil; } } }; buffers[paths.size..].do { |b| b.free; }; buffers.extend(paths.size); } } doOnServerBoot { if (paths.size > 0) { buffers = []; this.prUpdateBuffers(); "***Loaded samples for %***".format(this.asString).postln; } } doOnServerQuit { buffers = []; } pat { |keyPat| ^Pindex(Pseq([this], inf), keyPat) } // Single buffer support asBuffer { ^this.singleSampleWrap(nil) } asControlInput { |...args| ^this.prSingleSampleWrap(\asControlInput, *args) } play { |...args| ^this.prSingleSampleWrap(\play, *args) } prSingleSampleWrap { |method ...args| var buffer; if (buffers.size == 1) { buffer = this.bufferAt(0); if (method.isNil) { ^buffer } { if (buffer.numFrames.isNil) { fork { Server.default.sync; buffer.performList(method, args) }; ^nil; } { ^buffer.performList(method, args) } } } { Error("Trying to % a SAMP with multiple buffers".format(method)).throw; } } }