RedSampler playing soundfiles from memory
Inherits from: RedAbstractSampler
see also: RedDiskInSampler RedDiskInSamplerGiga
nothing fancy. this class just loads soundfiles into RAM and then uses PlayBuf to play them back.
it uses the same interface as RedDiskInSampler.
//--
s.boot;
a= RedSampler(s);
//-- setting up which samples to use and prepare them
a.prepareForPlay(\snd1, "sounds/a11wlk01-44_1.aiff");
a.prepareForPlay(\snd2, "sounds/break"); //add your own soundfile
a.prepareForPlay(\snd3, "sounds/a11wlk01-44_1.aiff", 44100, 22050); //offset 44100 samples, 0.5sec
//-- play
a.play(\snd1); //play the whole soundfile
a.voicesLeft(\snd1)
a.stop(\snd1); //stop
a.play(\snd1, 1, 0, 0.05); //play with slow attack and quick release
a.play(\snd2); //play another sample
a.play(\snd3); //and another
a.play(\snd3, 0.1, 0, 0.1); //very short
a.play(\snd3, 3, 3, 3, loop:2) //using loop:2 to both have finite duration and loop on
a.play(\snd2, loop:1); //looping forever
a.stop(\snd2, 4); //stop with 4 second fadetime
( //start many at once
a.play(\snd1);
a.play(\snd2);
a.play(\snd3, loop:1);
)
a.flush(0); //stop all right away
a.play(\snd2);
a.play(\snd2);
a.voicesLeft(\snd2); //check if any free voices
a.stop(\snd2, 0);
a.stop(\snd2, 0);
a.voicesLeft(\snd2); //check if any free voices
a.loadedKeys; //report all keys that have soundfiles loaded
a.overlaps; //how many voices allowed to play simultaneously
a.length(\snd1); //how long is the soundfile in seconds
a.length(\snd3);
a.channels(\snd1); //how many channels
a.buffers(\snd1); //access buffers for a key. one for each overlap
a.free; //free synths, close files and free buffers
//--example that play back short sections of all your soundfiles in your sounds directory
s.boot;
(
a= RedSampler(s);
p= PathName("sounds").deepFiles.select{|x|
var sf= SoundFile.openRead(x.fullPath);
if(sf.notNil, {
sf.close;
true;
}, {
false;
});
};
p.do{|x|
var sf= SoundFile(x.fullPath);
var len= if(sf.numFrames<44100, {-1}, {sf.numFrames.rand});
("loading..."+x.fullPath).postln;
a.prepareForPlay(sf.path, sf.path, sf.numFrames.rand, len);
sf.close;
};
r= Routine.run{
1.wait;
inf.do{
a.play(a.loadedKeys.choose.postln, 4, 2.rrand(6), 4, loop:2);
2.rrand(5).wait;
};
};
)
r.stop;
a.free;
//--example that chops up a soundfile into segments and plays them back one after the other in random order
s.boot;
a= RedSampler(s);
(
10.do{|x|
a.prepareForPlay(("cut"++x).asSymbol, "sounds/a11wlk01-44_1.aiff", 100000.linrand, 50000.linrand); //key, path, offset and length
};
)
a.play(\cut3); //quick test
(
r= Routine({
inf.do{
var key= a.loadedKeys.choose;
a.play(key.postln, attack: 0.05, release: 0.1, out:2.rand);
while({a.isPlaying(key)}, {0.001.wait});
};
}).play;
)
r.stop;
a.free;