//-----------------------------------------------------------------------------
// name: LiSa-load.ck
// desc: function for loading an audio file into LiSa
//
// author: Dan Trueman, original example (2007): was LiSa-SndBuf.ck
// Ge Wang, modified example (2021): rolled function, added twilight
// sound (see twilight-granular-kb-interp.ck for more info)
// and bi-directional loop
//-----------------------------------------------------------------------------
// this example shows how to open a soundfile and use it in LiSa. someday LiSa
// may be able to open soundfiles directly, but don't hold your breath.
//
// note that unlike SndBuf, LiSa wants a dur (not an int) to specify the index
// of the sample location
//-----------------------------------------------------------------------------
// one-stop function for creating a LiSa, loaded with the specified audio file
load( me.dir() + "twilight/twilight-granular.aiff" ) @=> LiSa @ lisa;
// connect
lisa => dac;
// party on...
2 => lisa.rate; // rate!
1 => lisa.loop; // loop it!
1 => lisa.bi; // bi-directional loop!
1 => lisa.play; // play!
// commence party
while( true ) 1::second => now;
// create a new LiSa pre-loaded with the specified file
fun LiSa load( string filename )
{
// sound buffer
SndBuf buffy;
// load it
filename => buffy.read;
// instantiate new LiSa (will be returned)
LiSa lisa;
// set duration
buffy.samples()::samp => lisa.duration;
// transfer values from SndBuf to LiSa
for( 0 => int i; i < buffy.samples(); i++ )
{
// args are sample value and sample index
// (dur must be integral in samples)
lisa.valueAt( buffy.valueAt(i), i::samp );
}
// set default LiSa parameters; actual usage parameters intended
// to be set to taste by the user after this function returns
lisa.play( false );
lisa.loop( false );
return lisa;
}