You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

236 lines
5.9KB

  1. #include "mscHack.hpp"
  2. RACK_PLUGIN_MODEL_DECLARE(mscHack, Alienz);
  3. RACK_PLUGIN_MODEL_DECLARE(mscHack, ASAF8);
  4. RACK_PLUGIN_MODEL_DECLARE(mscHack, Dronez);
  5. RACK_PLUGIN_MODEL_DECLARE(mscHack, MasterClockx4);
  6. RACK_PLUGIN_MODEL_DECLARE(mscHack, Seq_3x16x16);
  7. RACK_PLUGIN_MODEL_DECLARE(mscHack, SEQ_6x32x16);
  8. RACK_PLUGIN_MODEL_DECLARE(mscHack, Seq_Triad2);
  9. RACK_PLUGIN_MODEL_DECLARE(mscHack, SEQ_Envelope_8);
  10. RACK_PLUGIN_MODEL_DECLARE(mscHack, Maude_221);
  11. RACK_PLUGIN_MODEL_DECLARE(mscHack, ARP700);
  12. RACK_PLUGIN_MODEL_DECLARE(mscHack, SynthDrums);
  13. RACK_PLUGIN_MODEL_DECLARE(mscHack, XFade);
  14. RACK_PLUGIN_MODEL_DECLARE(mscHack, Mix_1x4_Stereo);
  15. RACK_PLUGIN_MODEL_DECLARE(mscHack, Mix_2x4_Stereo);
  16. RACK_PLUGIN_MODEL_DECLARE(mscHack, Mix_4x4_Stereo);
  17. RACK_PLUGIN_MODEL_DECLARE(mscHack, Mix_9_3_4);
  18. RACK_PLUGIN_MODEL_DECLARE(mscHack, Mix_16_4_4);
  19. RACK_PLUGIN_MODEL_DECLARE(mscHack, Mix_24_4_4);
  20. RACK_PLUGIN_MODEL_DECLARE(mscHack, Morze);
  21. RACK_PLUGIN_MODEL_DECLARE(mscHack, StepDelay);
  22. RACK_PLUGIN_MODEL_DECLARE(mscHack, OSC_WaveMorph_3);
  23. RACK_PLUGIN_MODEL_DECLARE(mscHack, PingPong);
  24. RACK_PLUGIN_MODEL_DECLARE(mscHack, Osc_3Ch);
  25. RACK_PLUGIN_MODEL_DECLARE(mscHack, Compressor);
  26. RACK_PLUGIN_MODEL_DECLARE(mscHack, Windz);
  27. RACK_PLUGIN_INIT(mscHack) {
  28. RACK_PLUGIN_INIT_ID();
  29. RACK_PLUGIN_INIT_WEBSITE("https://github.com/mschack/VCV-Rack-Plugins");
  30. RACK_PLUGIN_MODEL_ADD(mscHack, Alienz);
  31. RACK_PLUGIN_MODEL_ADD(mscHack, ASAF8);
  32. RACK_PLUGIN_MODEL_ADD(mscHack, Dronez);
  33. RACK_PLUGIN_MODEL_ADD(mscHack, MasterClockx4);
  34. RACK_PLUGIN_MODEL_ADD(mscHack, Seq_3x16x16);
  35. RACK_PLUGIN_MODEL_ADD(mscHack, SEQ_6x32x16);
  36. RACK_PLUGIN_MODEL_ADD(mscHack, Seq_Triad2);
  37. RACK_PLUGIN_MODEL_ADD(mscHack, SEQ_Envelope_8);
  38. RACK_PLUGIN_MODEL_ADD(mscHack, Maude_221);
  39. RACK_PLUGIN_MODEL_ADD(mscHack, ARP700);
  40. RACK_PLUGIN_MODEL_ADD(mscHack, SynthDrums);
  41. RACK_PLUGIN_MODEL_ADD(mscHack, XFade);
  42. RACK_PLUGIN_MODEL_ADD(mscHack, Mix_1x4_Stereo);
  43. RACK_PLUGIN_MODEL_ADD(mscHack, Mix_2x4_Stereo);
  44. RACK_PLUGIN_MODEL_ADD(mscHack, Mix_4x4_Stereo);
  45. RACK_PLUGIN_MODEL_ADD(mscHack, Mix_9_3_4);
  46. RACK_PLUGIN_MODEL_ADD(mscHack, Mix_16_4_4);
  47. RACK_PLUGIN_MODEL_ADD(mscHack, Mix_24_4_4);
  48. RACK_PLUGIN_MODEL_ADD(mscHack, Morze);
  49. RACK_PLUGIN_MODEL_ADD(mscHack, StepDelay);
  50. RACK_PLUGIN_MODEL_ADD(mscHack, OSC_WaveMorph_3);
  51. RACK_PLUGIN_MODEL_ADD(mscHack, PingPong);
  52. RACK_PLUGIN_MODEL_ADD(mscHack, Osc_3Ch);
  53. RACK_PLUGIN_MODEL_ADD(mscHack, Compressor);
  54. RACK_PLUGIN_MODEL_ADD(mscHack, Windz);
  55. }
  56. namespace rack_plugin_mscHack {
  57. //-----------------------------------------------------
  58. // Procedure: random
  59. //
  60. //-----------------------------------------------------
  61. #define PHI 0x9e3779b9
  62. unsigned int Q[4096], c = 362436;
  63. unsigned int g_myrindex = 4095;
  64. void init_rand( unsigned int seed )
  65. {
  66. int i;
  67. Q[0] = seed;
  68. Q[1] = seed + PHI;
  69. Q[2] = seed + PHI + PHI;
  70. for (i = 3; i < 4096; i++)
  71. Q[i] = Q[i - 3] ^ Q[i - 2] ^ PHI ^ i;
  72. c = 362436;
  73. g_myrindex = 4095;
  74. }
  75. unsigned short srand(void)
  76. {
  77. long long t, a = 18782LL;
  78. unsigned int x, r = 0xfffffffe;
  79. g_myrindex = (g_myrindex + 1) & 4095;
  80. t = a * Q[g_myrindex] + c;
  81. c = (t >> 32);
  82. x = t + c;
  83. if (x < c)
  84. {
  85. x++;
  86. c++;
  87. }
  88. return (unsigned short)( ( Q[g_myrindex] = r - x ) & 0xFFFF );
  89. }
  90. float frand(void)
  91. {
  92. return (float)srand() / (float)0xFFFF;
  93. }
  94. float frand_mm( float fmin, float fmax )
  95. {
  96. float range = fmax - fmin;
  97. return fmin + ( frand() * range );
  98. }
  99. bool brand( void )
  100. {
  101. return ( srand() & 1 );
  102. }
  103. bool frand_perc( float perc )
  104. {
  105. return ( frand() <= (perc / 100.0f) );
  106. }
  107. //-----------------------------------------------------
  108. // Procedure: JsonDataInt
  109. //
  110. //-----------------------------------------------------
  111. void JsonDataInt( bool bTo, std::string strName, json_t *root, int *pdata, int len )
  112. {
  113. int i;
  114. json_t *jsarray, *js;
  115. if( !pdata || !root || len <= 0 )
  116. return;
  117. if( bTo )
  118. {
  119. jsarray = json_array();
  120. for ( i = 0; i < len; i++ )
  121. {
  122. js = json_integer( pdata[ i ] );
  123. json_array_append_new( jsarray, js );
  124. }
  125. json_object_set_new( root, strName.c_str(), jsarray );
  126. }
  127. else
  128. {
  129. jsarray = json_object_get( root, strName.c_str() );
  130. if( jsarray )
  131. {
  132. for ( i = 0; i < len; i++)
  133. {
  134. js = json_array_get( jsarray, i );
  135. if( js )
  136. pdata[ i ] = json_integer_value( js );
  137. }
  138. }
  139. }
  140. }
  141. //-----------------------------------------------------
  142. // Procedure: JsonDataBool
  143. //
  144. //-----------------------------------------------------
  145. void JsonDataBool( bool bTo, std::string strName, json_t *root, bool *pdata, int len )
  146. {
  147. int i;
  148. json_t *jsarray, *js;
  149. if( !pdata || !root || len <= 0 )
  150. return;
  151. if( bTo )
  152. {
  153. jsarray = json_array();
  154. for ( i = 0; i < len; i++ )
  155. {
  156. js = json_boolean( pdata[ i ] );
  157. json_array_append_new( jsarray, js );
  158. }
  159. json_object_set_new( root, strName.c_str(), jsarray );
  160. }
  161. else
  162. {
  163. jsarray = json_object_get( root, strName.c_str() );
  164. if( jsarray )
  165. {
  166. for ( i = 0; i < len; i++)
  167. {
  168. js = json_array_get( jsarray, i );
  169. if( js )
  170. pdata[ i ] = json_boolean_value( js );
  171. }
  172. }
  173. }
  174. }
  175. //-----------------------------------------------------
  176. // Procedure: JsonDataString
  177. //
  178. //-----------------------------------------------------
  179. void JsonDataString( bool bTo, std::string strName, json_t *root, std::string *strText )
  180. {
  181. json_t *textJ;
  182. if( !root )
  183. return;
  184. if( bTo )
  185. {
  186. json_object_set_new( root, strName.c_str(), json_string( strText->c_str() ) );
  187. }
  188. else
  189. {
  190. textJ = json_object_get( root, strName.c_str() );
  191. if( textJ )
  192. *strText = json_string_value( textJ );
  193. }
  194. }
  195. } // namespace rack_plugin_mscHack
  196. using namespace rack_plugin_mscHack;