Я написал следующий код для определения SynthDef, который записывает звук в буфер, переданный в качестве одного из параметров.
(
SynthDef(\recordTone, { |freq, bufnum, duration|
var w = SinOsc.ar(freq) * XLine.ar(101,1,duration,add: -1) / 100;
RecordBuf.ar(w!2,bufnum,loop: 0,doneAction: 2);
}).add;
)
У меня также есть приведенный ниже код, который вызывает Synth для вышеуказанного SynthDef и пытается записать буфер в файл.
({
var recordfn = { |freq, duration, fileName|
var server = Server.local;
var buf = Buffer.alloc(server,server.sampleRate * duration,2);
Synth(\recordTone,[\freq, 440, \bufnum, buf.bufnum, \duration, duration]);
buf.write(
"/Users/minerva/Temp/snd/" ++ fileName ++ ".wav",
"WAVE",
"int16",
completionMessage: ["b_free", buf.bufnum]
);
};
recordfn.value(440,0.5,"test");
}.value)
Выходной файл создается, но не содержит слышимого звука. Что я делаю не так? Я просмотрел всю документацию SuperCollider, которую смог найти, но ничего не работает! Любые указатели приветствуются.