diff --git a/release-packaging/Classes/FluidBufToKr.sc b/release-packaging/Classes/FluidBufToKr.sc index b3d2e88..7d78f4e 100644 --- a/release-packaging/Classes/FluidBufToKr.sc +++ b/release-packaging/Classes/FluidBufToKr.sc @@ -1,9 +1,15 @@ FluidKrToBuf { *kr { arg krStream, buffer; - if(buffer.numFrames == 0) {"FluidKrToBuf: UGen will have 0 outputs!".warn}; - if(buffer.numFrames > 1000) {"FluidKrToBuf: Buffer is % frames. This is probably not the buffer you intended.".format(buffer.numFrames).error}; - ^buffer.numFrames.do{ + + if(buffer.isKindOf(Buffer).or(buffer.isKindOf(LocalBuf)),{ + if(buffer.numFrames == 0) {"FluidKrToBuf:kr Buffer has 0 frames".warn}; + if(buffer.numFrames > 1000) { + Error("FluidKrToBuf:kr Buffer is % frames. This is probably not the buffer you intended.".format(buffer.numFrames)).throw; + }; + }); + + ^krStream.numChannels.do{ arg i; BufWr.kr(krStream[i], buffer, i); } @@ -12,12 +18,21 @@ FluidKrToBuf { FluidBufToKr { *kr { - arg buffer; - if(buffer.numFrames == 0) {"FluidKrToBuf: Buffer has 0 frames!".warn}; - if(buffer.numFrames > 1000) {"FluidKrToBuf: Buffer is % frames. This is probably not the buffer you intended.".format(buffer.numFrames).error}; + arg buffer, numFrames; + + if((buffer.isKindOf(Buffer).or(buffer.isKindOf(LocalBuf))).not.and(numFrames.isNil),{ + Error("FluidBufToKr:kr needs to be passed either an existing buffer or an OutputProxy and a number of frames for the buffer that will be supplied").throw; + }); + + numFrames = numFrames ?? {buffer.numFrames}; + + if(numFrames == 0) {"FluidKrToBuf:kr indicated numFrames is zero.".warn}; + if(numFrames > 1000) { + Error("FluidKrToBuf: Buffer is indicated to have % frames. This is probably not the buffer you intended.".format(numFrames)).throw; + }; - if(buffer.numFrames > 1,{ - ^buffer.numFrames.collect{ + if(numFrames > 1,{ + ^numFrames.collect{ arg i; BufRd.kr(1,buffer,i,0,0); } diff --git a/test/FluidBufToKr test.scd b/test/FluidBufToKr test.scd index 4e93e11..b3c070c 100644 --- a/test/FluidBufToKr test.scd +++ b/test/FluidBufToKr test.scd @@ -64,7 +64,7 @@ s.waitForBoot{ FluidKrToBuf.kr(sig,buf); }.play; - 3.wait; + 1.wait; defer{buf.plot}; }.play; @@ -85,7 +85,7 @@ s.waitForBoot{ FluidKrToBuf.kr(sig,buf); }.play; - 3.wait; + 1.wait; defer{buf.plot}; }.play; @@ -137,7 +137,7 @@ s.waitForBoot{ s.sync; { - var sig = SinOsc.kr(rrand(1.0.dup(buf.numFrames),4.0)); + var sig = SinOsc.kr(rrand(1.0.dup(10),4.0)); FluidKrToBuf.kr(sig,buf); }.play; @@ -177,7 +177,7 @@ s.waitForBoot{ arg buf; FluidKrToBuf.kr(SinOsc.kr(Array.fill(5,{rrand(0.0,1.0)})),buf); - FluidBufToKr.kr(buf).poll; + FluidBufToKr.kr(buf).poll; ///////// this will now throw an error asking for a numFrames }.play; 2.wait; @@ -194,10 +194,10 @@ s.waitForBoot{ s.waitForBoot{ Routine{ ~synth = { - arg buf; + arg buf = 999; FluidKrToBuf.kr(SinOsc.kr(Array.fill(5,{rrand(0.0,1.0)})),buf); - FluidBufToKr.kr(buf,5).poll; + FluidBufToKr.kr(buf,5).poll; ////////// this will work becaues it knows how many frames the buffer will be }.play; 2.wait; @@ -207,4 +207,4 @@ s.waitForBoot{ ~synth.set(\buf,~buffer); }.play; }; -) \ No newline at end of file +)