ならば

音とかで遊んでいたログ

サウンドバッファ

メディアファイルを処理したり再生するには、まずSndBufというユニットジェネレータにデータを読み込む。"foo.wav"というファイルを読み込んで再生するだけなら、

SndBuf buf => dac;
"foo.wav" => buf.read;
buf.samples()::samp => now;

readにファイル名を突っ込めば読み込み完了。samplesで読み込んだデータのサンプル数を取得できる。
exampleのsndbuf.ckを少し改変してみた。ローカルに適当な素材がなかったのでOSに付いてるやつを使った。まだXP…。あ、素材の並びに特に意味はないよ。

["C:/WINDOWS/Media/Windows XP Startup.wav",
"C:/WINDOWS/Media/Windows XP Logon Sound.wav",
"C:/WINDOWS/Media/Windows XP Notify.wav",
"C:/WINDOWS/Media/Windows XP Exclamation.wav",
"C:/WINDOWS/Media/Windows XP Error.wav",
"C:/WINDOWS/Media/Windows XP Critical Stop.wav",
"C:/WINDOWS/Media/Windows XP Logoff Sound.wav",
"C:/WINDOWS/Media/Windows XP Shutdown.wav"] 
    @=> string fname[];
fname.cap() => int n;

SndBuf buf[n];
for (0 => int i; i < n; i++) 
    fname[i] => buf[i].read;

for (0 => int i; ; (i + 1) % n => i)
{
    0 => buf[i].pos; // posは再生位置で0からsamplesまでの範囲
    buf[i] => dac;
    Std.rand2f(.2, .9) => buf[i].gain;
    Std.rand2f(.5, 1.5) => buf[i].rate; // rate倍速
    (buf[i].samples() / buf[i].rate())::samp => now;
    buf[i] =< dac;
}

ChucKでは文字列はstringというオブジェクトで扱う。文字列操作はまだほとんど実装されてないので不便。出力もデバッグプリントしかないし。
それぞれのSndBufは実際に再生するときだけdacにつなぐようにした。演算子「=<」*1はUnChucK演算子といってChucK演算子でつないだユニットジェネレータ同士の接続を切るときに使う。

*1:「!=>」でもOK