RedSampler playing soundfiles from memory
superclass: RedAbstractSampler
nothing fancy. this class just loads soundfiles into RAM and then uses PlayBuf to play them back.
it uses the same interface as RedDiskInSampler.
see also [RedDiskInSampler] [RedDiskInSamplerGiga]
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;