/* * This file is taken from: https://gist.github.com/scztt/73a2ae402d9765294ae8f72979d1720e * I have added a method to list the samples in the bank. */ // 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) // } // // 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; // } // } // } 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; } } }