Advertisement
Guest User

Untitled

a guest
Jun 18th, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.07 KB | None | 0 0
  1. // testing convolution behavior
  2.  
  3. // s.options.hardwareBufferSize = 2048; //optionaly test with hardware buffer size equeling kernel size...
  4. // s.reboot;
  5.  
  6. ( // allocate three buffers
  7. ~kernelSize = 2048;
  8. ~kernel = Buffer.alloc(s,~kernelSize);
  9. ~inOut = Buffer.alloc(s, ~kernelSize * 2, 2); //
  10.  
  11. ~kernel.zero;
  12. ~inOut.zero;
  13. )
  14.  
  15. ~kernel.set(0, 1); //single impulse in the kernel
  16. ~kernel.plot;
  17.  
  18. //Convolution2
  19. (
  20. SynthDef("conv2Rec", { |out, kernel, trig = 0|
  21. var input, conv;
  22.  
  23. input = Impulse.ar(1);
  24.  
  25. conv = Convolution2.ar(input, kernel, trig, ~kernelSize, 1);
  26. RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  27.  
  28. Out.ar(out, [input, conv]);
  29. }).add
  30.  
  31. )
  32.  
  33.  
  34. x = Synth.new("conv2Rec",[\kernel, ~kernel, \buffer, ~inOut]);
  35.  
  36. ~inOut.plot; //Convolution2 introduces delay
  37.  
  38. //Convolution3
  39. (
  40. SynthDef("conv3Rec", { |out, kernel, trig = 0|
  41. var input, conv;
  42.  
  43. input = Impulse.ar(1);
  44.  
  45. conv = Convolution3.ar(input, kernel, trig, ~kernelSize, 1);
  46. RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  47.  
  48. Out.ar(out, [input, conv]);
  49. }).add
  50.  
  51. )
  52.  
  53. x = Synth.new("conv3Rec",[\kernel, ~kernel, \buffer, ~inOut, \trig, 1]);
  54.  
  55.  
  56. ~inOut.plot; //Convolution3 results in kernel being repeated (?)
  57.  
  58. ~inOut.getToFloatArray(action: {|arr| a = arr});
  59. a[..4].plot
  60. a[0]
  61. a[1]
  62.  
  63.  
  64. //Convolution - less efficient
  65. (
  66. SynthDef("convRec", { |out, kernel, trig = 0|
  67. var input, conv, kernelSig;
  68.  
  69. input = Impulse.ar(1);
  70.  
  71. kernelSig = PlayBuf.ar(1, kernel, BufRateScale.kr(kernel), 1, 0, 0);
  72. // conv = Convolution.ar(input, kernelSig, ~kernelSize, 1);
  73. conv = Convolution.ar(input, kernelSig, s.options.blockSize, 1);
  74. // RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  75. RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0);
  76.  
  77. Out.ar(out, [input, conv]);
  78. }).add
  79.  
  80. )
  81. //Convolution - less efficient
  82. (
  83. SynthDef("convRec", { |out, kernel, trig = 0|
  84. var input, conv, kernelSig;
  85.  
  86. input = SinOsc.ar(200, 0, -12.dbamp);
  87.  
  88. kernelSig = PlayBuf.ar(1, kernel, BufRateScale.kr(kernel), 1, 0, 1);
  89. // conv = Convolution.ar(input, kernelSig, ~kernelSize, 1);
  90. conv = Convolution.ar(input, kernelSig, s.options.blockSize, 1);
  91. // RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  92. RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0);
  93.  
  94. Out.ar(out, [input, conv]);
  95. }).add
  96.  
  97. )
  98.  
  99. x.free; x = Synth.new("convRec",[\kernel, ~kernel, \buffer, ~inOut, \trig, 1]);
  100.  
  101. ~inOut.plot; //also has a delay
  102.  
  103.  
  104. //partconv
  105. (
  106. //setup
  107. ~irbufsize = PartConv.calcBufSize(~kernelSize, ~kernel);
  108. ~irKernel = Buffer.alloc(s, ~irbufsize, 1);
  109. ~irKernel.preparePartConv(~kernel, ~kernelSize);
  110. )
  111. // ~irKernel.plot;
  112. ~kernel.plot;
  113.  
  114.  
  115. (
  116. SynthDef("partConvRec", { |out, kernel, trig = 0|
  117. var input, conv;
  118.  
  119. input = Impulse.ar(1);
  120.  
  121. conv = PartConv.ar(input, ~kernelSize, kernel, 1);
  122. RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  123.  
  124. Out.ar(out, [input, conv]);
  125. }).add
  126.  
  127. )
  128.  
  129. x = Synth.new("partConvRec",[\kernel, ~irKernel, \buffer, ~inOut, \trig, 1]);
  130.  
  131.  
  132. ~inOut.plot; //delay
  133.  
  134.  
  135. // also modified Don's convolution
  136.  
  137. (
  138. SynthDef("partConv2Rec", { |out, kernel, trig = 0|
  139. var input, conv;
  140.  
  141. input = Impulse.ar(1);
  142.  
  143. conv = PartConv2.ar(input, ~kernelSize, kernel, 1);
  144. RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  145.  
  146. Out.ar(out, [input, conv]);
  147. }).add
  148.  
  149. )
  150.  
  151. x = Synth.new("partConv2Rec",[\kernel, ~irKernel, \buffer, ~inOut, \trig, 1]);
  152.  
  153.  
  154. ~inOut.plot; //also delay
  155.  
  156.  
  157.  
  158.  
  159. //sl kernel ispection
  160. ~slKernel = Buffer.read(s, "/Volumes/data/Dokumenty/2012-2013/dxSoundLab/kernels/SoundLabKernels113/96000/moderate/k_24_1.365w_18c_5b_0.0t/FIR_01.wav")
  161. ~slKernel.numFrames; //32768
  162.  
  163.  
  164. //test multiple sl kernels using convolution 3
  165.  
  166. //Convolution3
  167. (
  168. SynthDef("conv3Rec", { |out, kernel, trig = 0|
  169. var input, conv;
  170.  
  171. input = Impulse.ar(1);
  172.  
  173. conv = Convolution3.ar(input, kernel, trig, 2048, 1);
  174. // conv = Convolution3.ar(input, kernel, trig, ~slKernel.numFrames, 1);
  175. // RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  176.  
  177. Out.ar(out, [input, conv]);
  178. }).add
  179.  
  180. )
  181.  
  182. x = Synth.new("conv3Rec",[\kernel, ~slKernel, \buffer, ~inOut, \trig, 1]); //400% CPU for 32768 kernel size
  183.  
  184. x.free;
  185.  
  186.  
  187.  
  188.  
  189. s.options.hardwareBufferSize = 128; //optionaly test with hardware buffer size equeling kernel size...
  190. s.options.memSize = 2**16;
  191. s.options.sampleRate = 48000;
  192. s.options.sampleRate = 44100;
  193. s.options.numOutputBusChannels = 16;
  194. s.options.numInputBusChannels = 16;
  195. s.reboot;
  196. // Server.killAll
  197.  
  198. //partconv SL kernel
  199. //sl kernel ispection
  200. ~slKernel.free; ~slKernel = Buffer.read(s, "/Volumes/data/Dokumenty/2012-2013/dxSoundLab/kernels/SoundLabKernels117/44100/moderate_with_desk-realtime/m_24_1.365w_18c_5b_0.7t/FIR_03.wav"); //realtime
  201. ~slKernel.free; ~slKernel = Buffer.read(s, "/Volumes/data/Dokumenty/2012-2013/dxSoundLab/kernels/SoundLabKernels113/96000/moderate/k_24_1.365w_18c_5b_0.0t/FIR_01.wav")
  202. ~slKernel.numFrames; //32768
  203.  
  204. // ~slKernel.play
  205.  
  206. (
  207. //setup
  208. ~kernel = ~slKernel;
  209. ~kernelSize = 256;
  210. ~irbufsize = PartConv.calcBufSize(~kernelSize, ~kernel);
  211. ~numpartitions= PartConv.calcNumPartitions(~kernelSize, ~kernel);
  212. ~numpartitions.postln;
  213. ~irKernel.free; ~irKernel = Buffer.alloc(s, ~irbufsize, 1);
  214. ~irKernel.preparePartConv(~kernel, ~kernelSize);
  215. )
  216. ~irKernel.plot;
  217. ~kernel.plot;
  218.  
  219.  
  220. (
  221. SynthDef("partConvTest", { |out, kernel, trig = 0|
  222. var input, conv;
  223.  
  224. input = Impulse.ar(1);
  225. // input = SinOsc.ar(300, 0, -12.dbamp);
  226.  
  227. conv = PartConv.ar(input, ~kernelSize, kernel, 1);
  228. // RecordBuf.ar([input, conv], \buffer.kr(0), loop: 0, doneAction: Done.freeSelf);
  229.  
  230. // Out.ar(out, [input, conv]* \amp.kr(1));
  231. Out.ar(out, [conv] * \amp.kr(1));
  232. //monitoring
  233. Out.ar(\monOut.kr(0), [input * \srcAmp.kr(-12.dbamp), SoundIn.ar(\in.kr(0))]);
  234. }).add
  235.  
  236. )
  237.  
  238. x.free; x = Synth.new("partConvTest",[\kernel, ~irKernel.bufnum, \buffer, ~inOut, \trig, 1]);
  239. x.free;
  240.  
  241. x.free;
  242. ~num = 32;
  243. ~num
  244. x.do(_.free); x = ~num.collect({Synth.new("partConvTest",[\kernel, ~irKernel, \buffer, ~inOut, \trig, 1, \amp, -24.dbamp])});
  245. x.do(_.free); x = ~num.collect({Synth.new("partConvTest",[\kernel, ~irKernel, \buffer, ~inOut, \trig, 1, \amp, -36.dbamp/~num, \srcAmp, 1/~num, \out, 4, \in, 2, \monOut, 0])});
  246. x.do(_.free);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement