From 50f8c18936581be0273f9563acbd717fef5b4c3f Mon Sep 17 00:00:00 2001 From: Raphael Forment Date: Wed, 27 Dec 2023 15:05:24 +0100 Subject: [PATCH] adding missing class file --- Classes/Bank.sc | 307 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 307 insertions(+) create mode 100644 Classes/Bank.sc diff --git a/Classes/Bank.sc b/Classes/Bank.sc new file mode 100644 index 0000000..836733d --- /dev/null +++ b/Classes/Bank.sc @@ -0,0 +1,307 @@ +/* +* This file is taken from: https://gist.github.com/scztt/73a2ae402d9765294ae8f72979d1720e +*/ + +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.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 bank with multiple buffers".format(method)).throw; + } + } +}