Advertisement
Guest User

Untitled

a guest
Jul 29th, 2017
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.80 KB | None | 0 0
  1. void SampleEditor::tool_generateNoise(const FilterParameters* par)
  2. {
  3. if (isEmptySample())
  4. return;
  5.  
  6. pp_int32 sStart = selectionStart;
  7. pp_int32 sEnd = selectionEnd;
  8.  
  9. if (hasValidSelection())
  10. {
  11. if (sStart >= 0 && sEnd >= 0)
  12. {
  13. if (sEnd < sStart)
  14. {
  15. pp_int32 s = sEnd; sEnd = sStart; sStart = s;
  16. }
  17. }
  18. }
  19. else
  20. {
  21. sStart = 0;
  22. sEnd = sample->samplen;
  23. }
  24.  
  25. preFilter(&SampleEditor::tool_generateNoise, par);
  26.  
  27. prepareUndo();
  28.  
  29. pp_int32 i;
  30.  
  31. pp_int32 type = par->getParameter(0).intPart;
  32.  
  33. VRand rand;
  34. rand.seed();
  35.  
  36. switch (type)
  37. {
  38. case 0:
  39. for (i = sStart; i < sEnd; i++)
  40. setFloatSampleInWaveform(i, rand.white()*2.0f);
  41. break;
  42. case 1:
  43. for (i = sStart; i < sEnd; i++)
  44. setFloatSampleInWaveform(i, rand.pink()*2.0f);
  45. break;
  46. case 2:
  47. for (i = sStart; i < sEnd; i++)
  48. setFloatSampleInWaveform(i, rand.brown()*2.0f);
  49. break;
  50. }
  51.  
  52. finishUndo();
  53.  
  54. postFilter();
  55. }
  56.  
  57. void SampleEditor::tool_generateSine(const FilterParameters* par)
  58. {
  59. if (isEmptySample())
  60. return;
  61.  
  62. pp_int32 sStart = selectionStart;
  63. pp_int32 sEnd = selectionEnd;
  64.  
  65. if (hasValidSelection())
  66. {
  67. if (sStart >= 0 && sEnd >= 0)
  68. {
  69. if (sEnd < sStart)
  70. {
  71. pp_int32 s = sEnd; sEnd = sStart; sStart = s;
  72. }
  73. }
  74. }
  75. else
  76. {
  77. sStart = 0;
  78. sEnd = sample->samplen;
  79. }
  80.  
  81. preFilter(&SampleEditor::tool_generateSine, par);
  82.  
  83. mp_sint32 sLen = sEnd - sStart;
  84.  
  85. prepareUndo();
  86.  
  87. pp_int32 i;
  88.  
  89. const float numPeriods = (float)(6.283185307179586476925286766559 * par->getParameter(1).floatPart);
  90. const float amplify = par->getParameter(0).floatPart;
  91.  
  92. // generate sine wave here
  93. for (i = sStart; i < sEnd; i++)
  94. {
  95. float per = (i-sStart)/(float)sLen * numPeriods;
  96. setFloatSampleInWaveform(i, (float)sin(per)*amplify);
  97. }
  98.  
  99. finishUndo();
  100.  
  101. postFilter();
  102. }
  103.  
  104. void SampleEditor::tool_generateSquare(const FilterParameters* par)
  105. {
  106. if (isEmptySample())
  107. return;
  108.  
  109. pp_int32 sStart = selectionStart;
  110. pp_int32 sEnd = selectionEnd;
  111.  
  112. if (hasValidSelection())
  113. {
  114. if (sStart >= 0 && sEnd >= 0)
  115. {
  116. if (sEnd < sStart)
  117. {
  118. pp_int32 s = sEnd; sEnd = sStart; sStart = s;
  119. }
  120. }
  121. }
  122. else
  123. {
  124. sStart = 0;
  125. sEnd = sample->samplen;
  126. }
  127.  
  128. preFilter(&SampleEditor::tool_generateSquare, par);
  129.  
  130. mp_sint32 sLen = sEnd - sStart;
  131.  
  132. prepareUndo();
  133.  
  134. pp_int32 i;
  135.  
  136. const float numPeriods = par->getParameter(1).floatPart;
  137. const float amplify = par->getParameter(0).floatPart;
  138.  
  139. // generate square wave here
  140. for (i = sStart; i < sEnd; i++)
  141. {
  142. float per = (i-sStart)/(float)sLen * numPeriods;
  143. float frac = per-(float)floor(per);
  144. setFloatSampleInWaveform(i, frac < 0.5f ? amplify : -amplify);
  145. }
  146.  
  147. finishUndo();
  148.  
  149. postFilter();
  150. }
  151.  
  152. void SampleEditor::tool_generateTriangle(const FilterParameters* par)
  153. {
  154. if (isEmptySample())
  155. return;
  156.  
  157. pp_int32 sStart = selectionStart;
  158. pp_int32 sEnd = selectionEnd;
  159.  
  160. if (hasValidSelection())
  161. {
  162. if (sStart >= 0 && sEnd >= 0)
  163. {
  164. if (sEnd < sStart)
  165. {
  166. pp_int32 s = sEnd; sEnd = sStart; sStart = s;
  167. }
  168. }
  169. }
  170. else
  171. {
  172. sStart = 0;
  173. sEnd = sample->samplen;
  174. }
  175.  
  176. preFilter(&SampleEditor::tool_generateTriangle, par);
  177.  
  178. mp_sint32 sLen = sEnd - sStart;
  179.  
  180. prepareUndo();
  181.  
  182. pp_int32 i;
  183.  
  184. const float numPeriods = par->getParameter(1).floatPart;
  185. const float amplify = par->getParameter(0).floatPart;
  186.  
  187. // generate triangle wave here
  188. for (i = sStart; i < sEnd; i++)
  189. {
  190. float per = (i-sStart)/(float)sLen * numPeriods;
  191. float frac = per-(float)floor(per);
  192. if (frac < 0.25f)
  193. setFloatSampleInWaveform(i, (frac*4.0f)*amplify);
  194. else if (frac < 0.75f)
  195. setFloatSampleInWaveform(i, (1.0f-(frac-0.25f)*4.0f)*amplify);
  196. else
  197. setFloatSampleInWaveform(i, (-1.0f+(frac-0.75f)*4.0f)*amplify);
  198. }
  199.  
  200. finishUndo();
  201.  
  202. postFilter();
  203. }
  204.  
  205. void SampleEditor::tool_generateSawtooth(const FilterParameters* par)
  206. {
  207. if (isEmptySample())
  208. return;
  209.  
  210. pp_int32 sStart = selectionStart;
  211. pp_int32 sEnd = selectionEnd;
  212.  
  213. if (hasValidSelection())
  214. {
  215. if (sStart >= 0 && sEnd >= 0)
  216. {
  217. if (sEnd < sStart)
  218. {
  219. pp_int32 s = sEnd; sEnd = sStart; sStart = s;
  220. }
  221. }
  222. }
  223. else
  224. {
  225. sStart = 0;
  226. sEnd = sample->samplen;
  227. }
  228.  
  229. preFilter(&SampleEditor::tool_generateSawtooth, par);
  230.  
  231. mp_sint32 sLen = sEnd - sStart;
  232.  
  233. prepareUndo();
  234.  
  235. pp_int32 i;
  236.  
  237. const float numPeriods = par->getParameter(1).floatPart;
  238. const float amplify = par->getParameter(0).floatPart;
  239.  
  240. // generate saw-tooth wave here
  241. for (i = sStart; i < sEnd; i++)
  242. {
  243. float per = (i-sStart)/(float)sLen * numPeriods;
  244. float frac = per-(float)floor(per);
  245. setFloatSampleInWaveform(i, frac < 0.5f ? (frac*2.0f)*amplify : (-1.0f+((frac-0.5f)*2.0f))*amplify);
  246. }
  247.  
  248. finishUndo();
  249.  
  250. postFilter();
  251. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement