libcm is a C development framework with an emphasis on audio signal processing applications.
Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.

cmDspPgm.c 106KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481
  1. #include "cmPrefix.h"
  2. #include "cmGlobal.h"
  3. #include "cmFloatTypes.h"
  4. #include "cmRpt.h"
  5. #include "cmErr.h"
  6. #include "cmCtx.h"
  7. #include "cmMem.h"
  8. #include "cmMallocDebug.h"
  9. #include "cmLinkedHeap.h"
  10. #include "cmFileSys.h"
  11. #include "cmSymTbl.h"
  12. #include "cmJson.h"
  13. #include "cmPrefs.h"
  14. #include "cmDspValue.h"
  15. #include "cmMsgProtocol.h"
  16. #include "cmThread.h"
  17. #include "cmUdpPort.h"
  18. #include "cmUdpNet.h"
  19. #include "cmAudioSys.h"
  20. #include "cmProcObj.h"
  21. #include "cmDspCtx.h"
  22. #include "cmDspClass.h"
  23. #include "cmDspSys.h"
  24. #include "cmDspPgm.h"
  25. #include "cmDspPgmPP.h"
  26. #include "cmDspPgmKr.h"
  27. cmDspRC_t _cmDspSysPgm_Test_Midi( cmDspSysH_t h, void** userPtrPtr )
  28. {
  29. cmDspRC_t rc = kOkDspRC;
  30. cmDspInst_t* sendBtn = cmDspSysAllocInst( h,"Button", "Send", 2, kButtonDuiId, 0.0 );
  31. cmDspInst_t* status = cmDspSysAllocInst( h,"Scalar", "Status", 5, kNumberDuiId, 0.0, 127.0, 1.0, 144.0);
  32. cmDspInst_t* d0 = cmDspSysAllocInst( h,"Scalar", "D0", 5, kNumberDuiId, 0.0, 127.0, 1.0, 64.0);
  33. cmDspInst_t* d1 = cmDspSysAllocInst( h,"Scalar", "D1", 5, kNumberDuiId, 0.0, 127.0, 1.0, 64.0);
  34. cmDspInst_t* midiOut = cmDspSysAllocInst( h,"MidiOut", NULL, 2, "Fastlane", "Fastlane MIDI A");
  35. cmDspInst_t* midiIn = cmDspSysAllocInst( h,"MidiIn", NULL, 0 );
  36. cmDspInst_t* printer = cmDspSysAllocInst( h,"Printer", NULL, 1, ">" );
  37. // check for allocation errors
  38. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  39. goto errLabel;
  40. cmDspSysInstallCb( h, sendBtn, "out", d1, "send", NULL);
  41. cmDspSysInstallCb( h, sendBtn, "out", d0, "send", NULL);
  42. cmDspSysInstallCb( h, sendBtn, "out", status, "send", NULL);
  43. cmDspSysInstallCb( h, status, "val", midiOut, "status",NULL);
  44. cmDspSysInstallCb( h, d0, "val", midiOut, "d0", NULL);
  45. cmDspSysInstallCb( h, d1, "val", midiOut, "d1", NULL);
  46. cmDspSysInstallCb( h, midiIn, "status", printer, "in", NULL);
  47. cmDspSysInstallCb( h, midiIn, "d0", printer, "in", NULL);
  48. cmDspSysInstallCb( h, midiIn, "d1", printer, "in", NULL);
  49. cmDspSysInstallCb( h, midiIn, "smpidx", printer, "in", NULL);
  50. errLabel:
  51. return rc;
  52. }
  53. cmDspRC_t _cmDspSysPgm_Stereo_Through( cmDspSysH_t h, void** userPtrPtr )
  54. {
  55. bool useBuiltInFl = true;
  56. cmDspInst_t* ignp = cmDspSysAllocInst( h,"Scalar", "In Gain", 5, kNumberDuiId, 0.0, 4.0, 0.01, 1.0);
  57. //cmDspInst_t* ognp = cmDspSysAllocInst( h,"Scalar", "Out Gain", 5, kNumberDuiId, 0.0, 4.0, 0.01, 1.0);
  58. cmDspInst_t* hzp = cmDspSysAllocInst(h,"Scalar", "Hz", 5, kNumberDuiId, 0.0, 10.0, 0.001, 1.0);
  59. cmDspInst_t* php = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  60. cmDspInst_t* wtp = cmDspSysAllocInst(h,"WaveTable",NULL, 2, cmDspSysSampleRate(h), 2 );
  61. cmDspInst_t* ai0p = cmDspSysAllocInst(h,"AudioIn", NULL, 1, useBuiltInFl ? 0 : 2 );
  62. cmDspInst_t* ai1p = cmDspSysAllocInst(h,"AudioIn", NULL, 1, useBuiltInFl ? 1 : 3 );
  63. // MOTU Traveler: Use channels 2&3 (out plugs:3&4) because 0&1 do not show up on plugs 1&2.
  64. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  65. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  66. cmDspInst_t* im0p = cmDspSysAllocInst(h,"AMeter","In 0", 0);
  67. cmDspInst_t* im1p = cmDspSysAllocInst(h,"AMeter","In 1", 0);
  68. cmDspInst_t* om0p = cmDspSysAllocInst(h,"AMeter","Out 0", 0);
  69. cmDspInst_t* om1p = cmDspSysAllocInst(h,"AMeter","Out 1",0);
  70. //cmDspSysConnectAudio(h, ai0p, "out", ao0p, "in");
  71. //cmDspSysConnectAudio(h, ai1p, "out", ao1p, "in");
  72. cmDspSysConnectAudio(h, ai0p, "out", im0p, "in"); //ain0 -> imtr0
  73. cmDspSysConnectAudio(h, ai1p, "out", im1p, "in"); //ain1 -> imtr1
  74. cmDspSysInstallCb( h, hzp, "out", php, "mult", NULL); // hz -> phs
  75. cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phs -> wt
  76. cmDspSysConnectAudio(h, wtp, "out", ao0p, "in" ); // wt -> aout0
  77. cmDspSysConnectAudio(h, wtp, "out", om0p, "in" ); // wt -> omtr0
  78. cmDspSysInstallCb( h, ignp,"val", ai1p, "gain", NULL); // igain -> ain1
  79. cmDspSysConnectAudio(h, ai1p,"out", ao1p, "in" ); // ain1 -> aout1
  80. cmDspSysConnectAudio(h, ai1p,"out", om1p, "in" ); // ain1 -> omtr1
  81. return kOkDspRC;
  82. }
  83. cmDspRC_t _cmDspSysPgm_Stereo_Fx( cmDspSysH_t h, void** userPtrPtr )
  84. {
  85. bool useBuiltInFl = true;
  86. cmDspInst_t* ignp = cmDspSysAllocInst( h,"Scalar", "In Gain", 5, kNumberDuiId, 0.0, 4.0, 0.01, 1.0);
  87. cmDspInst_t* ognp = cmDspSysAllocInst( h,"Scalar", "Out Gain", 5, kNumberDuiId, 0.0, 4.0, 0.01, 1.0);
  88. //cmDspInst_t* fb0p = cmDspSysAllocInst( h,"Scalar", "Feeback 0", 5, kNumberDuiId, 0.0, 1.0, 0.001, 0.0);
  89. //cmDspInst_t* fb1p = cmDspSysAllocInst( h,"Scalar", "Feedback 1", 5, kNumberDuiId, 0.0, 1.0, 0.001, 0.0);
  90. //cmDspInst_t* tm0p = cmDspSysAllocInst( h,"Scalar", "Time 0", 5, kNumberDuiId, 0.0, 1000.0, 0.0001, 10.0);
  91. //cmDspInst_t* tm1p = cmDspSysAllocInst( h,"Scalar", "Time 1", 5, kNumberDuiId, 0.0, 1000.0, 0.0001, 10.0);
  92. cmDspInst_t* rt0p = cmDspSysAllocInst( h,"Scalar", "Ratio 0", 5, kNumberDuiId, 0.01, 10.0, 0.01, 1.0);
  93. cmDspInst_t* rt1p = cmDspSysAllocInst( h,"Scalar", "Ratio 1", 5, kNumberDuiId, 0.01, 10.0, 0.01, 1.0);
  94. cmDspInst_t* ai0p = cmDspSysAllocInst(h,"AudioIn", NULL, 1, useBuiltInFl ? 0 : 2 );
  95. cmDspInst_t* ai1p = cmDspSysAllocInst(h,"AudioIn", NULL, 1, useBuiltInFl ? 1 : 3 );
  96. cmDspInst_t* om0p = cmDspSysAllocInst(h,"AMeter","Out Left", 0);
  97. cmDspInst_t* om1p = cmDspSysAllocInst(h,"AMeter","Out Right",0);
  98. //cmDspInst_t* dy0p = cmDspSysAllocInst(h,"Delay", NULL, 2, 1000.0, 0.5 );
  99. //cmDspInst_t* dy1p = cmDspSysAllocInst(h,"Delay", NULL, 2, 2000.0, 0.7 );
  100. cmDspInst_t* ps0p = cmDspSysAllocInst(h,"PShift", NULL, 0 );
  101. cmDspInst_t* ps1p = cmDspSysAllocInst(h,"PShift", NULL, 0 );
  102. // MOTU Traveler: Use channels 2&3 (out plugs:3&4) because 0&1 do not show up on plugs 1&2.
  103. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  104. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  105. cmDspSysConnectAudio(h, ai0p,"out", om0p, "in" ); // input meter connection
  106. cmDspSysConnectAudio(h, ai1p,"out", om1p, "in" );
  107. //cmDspSysConnectAudio(h, ai0p,"out", dy0p, "in" ); // input -> delay
  108. //cmDspSysConnectAudio(h, ai1p,"out", dy1p, "in" );
  109. cmDspSysConnectAudio(h, ai0p,"out", ps0p, "in" ); // delay -> pshift
  110. cmDspSysConnectAudio(h, ai1p,"out", ps1p, "in" );
  111. cmDspSysConnectAudio(h, ps0p,"out", ao0p, "in" ); // pshift -> output
  112. cmDspSysConnectAudio(h, ps1p,"out", ao1p, "in" );
  113. //cmDspSysConnectAudio(h, dy0p,"out", ao0p, "in" ); // delay -> output
  114. //cmDspSysConnectAudio(h, dy1p,"out", ao1p, "in" );
  115. cmDspSysInstallCb( h, ignp,"val", ai0p, "gain", NULL); // input gain
  116. cmDspSysInstallCb( h, ignp,"val", ai1p, "gain", NULL);
  117. cmDspSysInstallCb( h, ognp, "val", ao0p, "gain", NULL); // output gain
  118. cmDspSysInstallCb( h, ognp, "val", ao1p, "gain", NULL);
  119. //cmDspSysInstallCb( h, fb0p, "val", dy0p, "fb", NULL); // feedback
  120. //cmDspSysInstallCb( h, fb1p, "val", dy1p, "fb", NULL);
  121. //cmDspSysInstallCb( h, tm0p, "val", dy0p, "time", NULL); // delay time
  122. //cmDspSysInstallCb( h, tm1p, "val", dy1p, "time", NULL);
  123. cmDspSysInstallCb( h, rt0p, "val", ps0p, "ratio", NULL); // pitch ratio
  124. cmDspSysInstallCb( h, rt1p, "val", ps1p, "ratio", NULL);
  125. return kOkDspRC;
  126. }
  127. cmDspRC_t _cmDspSysPgm_PlaySine( cmDspSysH_t h, void** userPtrPtr )
  128. {
  129. bool useBuiltInFl = true;
  130. double frqHz = 440.0;
  131. cmDspInst_t* chp = cmDspSysAllocInst( h,"Scalar", "Channel", 5, kNumberDuiId, 0.0, 100.0, 1.0, 0.0);
  132. cmDspInst_t* php = cmDspSysAllocInst(h,"Phasor", NULL, 2, cmDspSysSampleRate(h), frqHz );
  133. cmDspInst_t* wtp = cmDspSysAllocInst(h,"WaveTable", NULL, 2, ((int)cmDspSysSampleRate(h)), 4);
  134. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut", NULL, 1, useBuiltInFl ? 0 : 2 );
  135. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut", NULL, 1, useBuiltInFl ? 1 : 3 );
  136. cmDspInst_t* om0p = cmDspSysAllocInst(h,"AMeter","Out", 0);
  137. cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phasor -> wave table
  138. cmDspSysConnectAudio(h, wtp, "out", ao0p, "in" ); // wave table -> audio out
  139. cmDspSysConnectAudio(h, wtp, "out", ao1p, "in" ); //
  140. cmDspSysConnectAudio(h, wtp, "out", om0p, "in" );
  141. cmDspSysInstallCb( h, chp, "val", ao0p, "ch", NULL);
  142. return kOkDspRC;
  143. }
  144. cmDspRC_t _cmDspSysPgm_PlayFile( cmDspSysH_t h, void** userPtrPtr )
  145. {
  146. bool useBuiltInFl = true;
  147. const char* fn0 = "media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  148. //int beg = 6900826;
  149. //int end = 13512262;
  150. const cmChar_t* fn = cmFsMakeFn(cmFsUserDir(),fn0,NULL,NULL );
  151. cmDspInst_t* ofp = cmDspSysAllocInst(h,"Scalar", "Offset", 5, kNumberDuiId, 0.0, cmDspSysSampleRate(h)*600.0, 1.0, 0.0);
  152. cmDspInst_t* fnp = cmDspSysAllocInst(h,"Fname", NULL, 3, false,"Audio Files (*.wav,*.aiff,*.aif)\tAudio Files (*.{wav,aiff,aif})",fn);
  153. cmDspInst_t* php = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  154. cmDspInst_t* wtp = cmDspSysAllocInst(h,"WaveTable",NULL, 2, ((int)cmDspSysSampleRate(h)), 1 );
  155. //cmDspInst_t* afp = cmDspSysAllocInst(h,"AudioFileOut",NULL,2,"/home/kevin/temp/record0.aif",1);
  156. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  157. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  158. cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phasor -> wave table
  159. cmDspSysConnectAudio(h, wtp, "out", ao0p, "in" ); // wave table -> audio out
  160. cmDspSysConnectAudio(h, wtp, "out", ao1p, "in" ); //
  161. //cmDspSysConnectAudio(h, wtp, "out", afp, "in0");
  162. cmDspSysInstallCb(h, ofp, "val", wtp, "beg", NULL );
  163. cmDspSysInstallCb(h, fnp, "out", wtp, "fn", NULL);
  164. return kOkDspRC;
  165. }
  166. cmDspRC_t _cmDspSysPgm_GateDetect( cmDspSysH_t h, void** userPtrPtr )
  167. {
  168. bool useBuiltInFl = true;
  169. //const char* fn0 = "media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  170. //int beg = 6900826;
  171. //int end = 13512262;
  172. //const char* fn0 = "media/audio/McGill-3/1 Audio Track.aiff";
  173. const char* fn0 = "temp/gate_detect0.aif";
  174. int beg = 0;
  175. int end = -1;
  176. const cmChar_t* fn = cmFsMakeFn(cmFsUserDir(),fn0,NULL,NULL );
  177. const cmChar_t* tfn = "/home/kevin/temp/test0.txt";
  178. cmDspInst_t* ofp = cmDspSysAllocInst(h,"Scalar", "Offset", 5, kNumberDuiId, 0.0, cmDspSysSampleRate(h)*600.0, 1.0, 0.0);
  179. //cmDspInst_t* fnp = cmDspSysAllocInst(h,"Fname", NULL, 3, false,"Audio Files (*.wav,*.aiff,*.aif)\tAudio Files (*.{wav,aiff,aif})",fn);
  180. cmDspInst_t* php = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  181. cmDspInst_t* wtp = cmDspSysAllocInst(h,"WaveTable", NULL, 6, ((int)cmDspSysSampleRate(h)), 1, fn, -1, beg, end );
  182. cmDspInst_t* gdp = cmDspSysAllocInst(h,"GateDetect",NULL, 1, 20.0);
  183. cmDspInst_t* gmp = cmDspSysAllocInst(h,"Meter", NULL, 3, 0.0, 0.0, 1.0);
  184. cmDspInst_t* rmp = cmDspSysAllocInst(h,"Meter", NULL, 3, -100.0, -100.0, 0.0);
  185. cmDspInst_t* txp = cmDspSysAllocInst(h,"TextFile", NULL, 2, 3, tfn);
  186. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  187. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  188. cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phasor -> wave table
  189. cmDspSysConnectAudio(h, wtp, "out", ao0p, "in" ); // wave table -> audio out
  190. cmDspSysConnectAudio(h, wtp, "out", ao1p, "in" ); //
  191. cmDspSysConnectAudio(h, wtp, "out", gdp, "in" );
  192. cmDspSysInstallCb(h, ofp, "val", wtp, "beg", NULL );
  193. cmDspSysInstallCb(h, gdp, "gate", gmp, "in", NULL );
  194. cmDspSysInstallCb(h, gdp, "rms", rmp, "in", NULL );
  195. cmDspSysInstallCb(h, gdp, "gate", txp, "in-0", NULL);
  196. cmDspSysInstallCb(h, gdp, "rms", txp, "in-1", NULL);
  197. cmDspSysInstallCb(h, gdp, "mean", txp, "in-2", NULL);
  198. return kOkDspRC;
  199. }
  200. cmDspRC_t _cmDspSysPgm_Record(cmDspSysH_t h, void** userPtrPtr)
  201. {
  202. int chCnt = 8;
  203. cmDspInst_t* a[chCnt];
  204. int i;
  205. for(i=0; i<chCnt; ++i)
  206. a[i] = cmDspSysAllocInst( h, "AudioIn", NULL, 1, i );
  207. cmDspInst_t* mxp = cmDspSysAllocInst( h, "AMix", NULL, chCnt+1, chCnt, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0 );
  208. cmDspInst_t* afp = cmDspSysAllocInst( h, "AudioFileOut", NULL, 2,"/home/kevin/temp/gate_detect.aif",1);
  209. cmDspInst_t* aop = cmDspSysAllocInst( h, "AudioOut", NULL, 1, 0 );
  210. cmDspInst_t* txp = cmDspSysAllocInst( h, "TextFile", NULL, 2, 1, "/home/kevin/temp/gate_detect.txt");
  211. cmDspInst_t* chp = cmDspSysAllocInst( h, "Scalar", "Channel", 5, kNumberDuiId, 0.0, 7.0, 1.0, 0.0);
  212. for(i=0; i<chCnt; ++i)
  213. {
  214. cmChar_t lbl[15];
  215. snprintf(lbl,15,"in-%i",i);
  216. cmDspSysConnectAudio(h,a[i], "out", mxp, lbl);
  217. }
  218. cmDspSysConnectAudio(h, mxp, "out", afp, "in0" );
  219. cmDspSysConnectAudio(h, mxp, "out", aop, "in" );
  220. cmDspSysInstallCb(h, chp, "out", txp, "in-0", NULL);
  221. return kOkDspRC;
  222. }
  223. cmDspRC_t _cmDspSysPgm_PitchShiftFile( cmDspSysH_t h, void** userPtrPtr )
  224. {
  225. bool useBuiltInFl = true;
  226. const cmChar_t* fn0 = "media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  227. const cmChar_t* fn1 = "temp/record0.aif";
  228. int beg = 6900826;
  229. int end = 13512262;
  230. const cmChar_t* fn = cmFsMakeFn(cmFsUserDir(),fn0,NULL,NULL );
  231. const cmChar_t* ofn = cmFsMakeFn(cmFsUserDir(),fn1,NULL,NULL );
  232. cmDspInst_t* rt0p = cmDspSysAllocInst(h,"Scalar", "Ratio 0", 5, kNumberDuiId, 0.01, 10.0, 0.01, 1.0);
  233. cmDspInst_t* rt1p = cmDspSysAllocInst(h,"Scalar", "Ratio 1", 5, kNumberDuiId, 0.01, 10.0, 0.01, 1.0);
  234. cmDspInst_t* ofp = cmDspSysAllocInst(h,"Scalar", "Offset", 5, kNumberDuiId, 0.0, cmDspSysSampleRate(h)*600.0, 1.0, 0.0);
  235. //cmDspInst_t* fnp = cmDspSysAllocInst(h,"Fname", NULL, 3, false,"Audio Files (*.wav,*.aiff,*.aif)\tAudio Files (*.{wav,aiff,aif})",fn);
  236. cmDspInst_t* php = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  237. cmDspInst_t* wtp = cmDspSysAllocInst(h,"WaveTable",NULL, 6, ((int)cmDspSysSampleRate(h)), 1, fn, -1, beg, end );
  238. cmDspInst_t* afp = cmDspSysAllocInst(h,"AudioFileOut",NULL,2,ofn,1);
  239. cmDspInst_t* ps0p = cmDspSysAllocInst(h,"PShift", NULL, 0 );
  240. cmDspInst_t* ps1p = cmDspSysAllocInst(h,"PShift", NULL, 0 );
  241. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  242. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  243. cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phasor -> wave table
  244. cmDspSysConnectAudio(h, wtp, "out", ps0p, "in" ); // wave table -> shift
  245. cmDspSysConnectAudio(h, wtp, "out", ps1p, "in" ); //
  246. cmDspSysConnectAudio(h, ps0p, "out", ao0p, "in" ); // shift -> audio out
  247. cmDspSysConnectAudio(h, ps1p, "out", ao1p, "in" ); //
  248. cmDspSysConnectAudio(h, ps0p, "out", afp, "in0"); //
  249. cmDspSysInstallCb(h, ofp, "val", wtp, "beg", NULL );
  250. //cmDspSysInstallCb(h, fnp, "out", wtp, "fn", NULL);
  251. cmDspSysInstallCb(h, rt0p, "val", ps0p, "ratio", NULL);
  252. cmDspSysInstallCb(h, rt1p, "val", ps1p, "ratio", NULL);
  253. return kOkDspRC;
  254. }
  255. cmDspRC_t _cmDspSysPgm_LoopRecd( cmDspSysH_t h, void** userPtrPtr )
  256. {
  257. bool useBuiltInFl = true;
  258. const cmChar_t* fn0 = "media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  259. const cmChar_t* fn = cmFsMakeFn(cmFsUserDir(),fn0,NULL,NULL );
  260. int beg = 6900826;
  261. int end = 13512262;
  262. cmDspInst_t* rfl = cmDspSysAllocInst(h,"Button", "Recd", 2, kCheckDuiId, 0.0 );
  263. cmDspInst_t* pfl = cmDspSysAllocInst(h,"Button", "Play", 2, kButtonDuiId, 1.0 );
  264. cmDspInst_t* rtp = cmDspSysAllocInst(h,"Scalar", "Ratio", 5, kNumberDuiId, 0.0, 10.0, 0.01, 1.0 );
  265. cmDspInst_t* ofp = cmDspSysAllocInst(h,"Scalar", "Offset", 5, kNumberDuiId, 0.0, cmDspSysSampleRate(h)*600.0, 1.0, 0.0);
  266. //cmDspInst_t* fnp = cmDspSysAllocInst(h,"Fname", NULL, 3, false,"Audio Files (*.wav,*.aiff,*.aif)\tAudio Files (*.{wav,aiff,aif})",fn);
  267. cmDspInst_t* php = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  268. cmDspInst_t* wtp = cmDspSysAllocInst(h,"WaveTable",NULL, 6, ((int)cmDspSysSampleRate(h)), 1, fn, -1, beg, end );
  269. //cmDspInst_t* afp = cmDspSysAllocInst(h,"AudioFileOut",NULL,2,"/home/kevin/temp/record0.aif",1);
  270. cmDspInst_t* lrp = cmDspSysAllocInst(h,"LoopRecd", NULL, 0 );
  271. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  272. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  273. cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phasor -> wave table
  274. cmDspSysConnectAudio(h, wtp, "out", lrp, "in" ); // wave table -> shift
  275. cmDspSysConnectAudio(h, lrp, "out", ao0p, "in" ); // shift -> audio out
  276. cmDspSysConnectAudio(h, wtp, "out", ao1p, "in" );
  277. cmDspSysInstallCb(h, ofp, "val", wtp, "beg", NULL );
  278. //cmDspSysInstallCb(h, fnp, "out", wtp, "fn", NULL);
  279. cmDspSysInstallCb(h, rfl, "out", lrp, "recd", NULL);
  280. cmDspSysInstallCb(h, pfl, "out", lrp, "play", NULL);
  281. cmDspSysInstallCb(h, rtp, "val", lrp, "ratio",NULL);
  282. return kOkDspRC;
  283. }
  284. cmDspRC_t _cmDspSysPgm_UiTest(cmDspSysH_t h, void** userPtrPtr )
  285. {
  286. cmDspRC_t rc = kOkDspRC;
  287. cmDspInst_t* mdp = cmDspSysAllocInst(h,"Scalar", "Mode", 5, kNumberDuiId, 0.0, 4.0, 1.0, 1.0);
  288. cmDspInst_t* wsp = cmDspSysAllocInst(h,"MsgList","wndSmpCnt", 3, "wndSmpCnt", NULL, 2);
  289. cmDspInst_t* hfp = cmDspSysAllocInst(h,"MsgList","hopFact", 3, "hopFact", NULL, 2);
  290. cmDspInst_t* thp = cmDspSysAllocInst(h,"Scalar", "threshold", 5, kNumberDuiId, 0.0, 1.0, 0.01, 0.5 );
  291. cmDspInst_t* trp = cmDspSysAllocInst(h,"Scalar", "target", 5, kNumberDuiId, 0.0, 1.0, 0.01, 0.5 );
  292. cmDspInst_t* btn = cmDspSysAllocInst(h,"Button", "btn", 2, kButtonDuiId, 12.3 );
  293. cmDspInst_t* chk = cmDspSysAllocInst(h,"Button", "check", 2, kCheckDuiId, 0 );
  294. cmDspInst_t* txt = cmDspSysAllocInst(h,"Text", "text", 1, "Hello" );
  295. cmDspInst_t* prp = cmDspSysAllocInst(h,"Printer", NULL, 1, ">" );
  296. cmDspInst_t* mtp = cmDspSysAllocInst(h,"Meter", "meter", 3, 0.0, 0.0, 4.0);
  297. cmDspInst_t* ctp = cmDspSysAllocInst(h,"Counter", NULL, 3, 0.0, 10.0, 1.0 );
  298. cmDspSysAllocInst(h,"Label", "label1", 1, "label2");
  299. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  300. return rc;
  301. cmDspSysInstallCb(h, mdp, "val", thp, "val", NULL );
  302. cmDspSysInstallCb(h, mdp, "val", prp, "in", NULL );
  303. cmDspSysInstallCb(h, wsp, "out", prp, "in", NULL );
  304. cmDspSysInstallCb(h, hfp, "out", prp, "in", NULL );
  305. cmDspSysInstallCb(h, trp, "val", prp, "in", NULL );
  306. cmDspSysInstallCb(h, btn, "out", prp, "in", NULL );
  307. cmDspSysInstallCb(h, chk, "out", prp, "in", NULL );
  308. cmDspSysInstallCb(h, ctp, "out", prp, "in", NULL );
  309. cmDspSysInstallCb(h, mdp, "val", btn, "in", NULL );
  310. cmDspSysInstallCb(h, thp, "val", mtp, "in", NULL );
  311. cmDspSysInstallCb(h, thp, "val", trp, "val", NULL );
  312. cmDspSysInstallCb(h, btn, "sym", prp, "in", NULL );
  313. cmDspSysInstallCb(h, btn, "out", ctp, "next", NULL );
  314. cmDspSysInstallCb(h, txt, "val", prp, "in", NULL );
  315. return rc;
  316. }
  317. cmDspRC_t _cmDspSysPgm_Xfade( cmDspSysH_t h, void** userPtrPtr )
  318. {
  319. cmDspRC_t rc = kOkDspRC;
  320. unsigned leftChIdx = 0;
  321. unsigned rightChIdx = 1;
  322. unsigned chCnt = 2;
  323. double xfadeMs = 1000; // cross fade time
  324. double sgHz = 500;
  325. unsigned sgShapeId = 1;
  326. double sgGain = 0.5;
  327. cmDspInst_t* sg = cmDspSysAllocInst( h, "SigGen", NULL, 3, sgHz, sgShapeId, sgGain );
  328. cmDspInst_t* xfp = cmDspSysAllocInst(h,"Xfader", NULL, 2, chCnt, xfadeMs );
  329. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, leftChIdx );
  330. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, rightChIdx );
  331. cmDspInst_t* im0p = cmDspSysAllocInst(h,"AMeter","In 0", 0);
  332. cmDspInst_t* im1p = cmDspSysAllocInst(h,"AMeter","In 1", 0);
  333. cmDspInst_t* om0p = cmDspSysAllocInst(h,"AMeter","Out 0", 0);
  334. cmDspInst_t* om1p = cmDspSysAllocInst(h,"AMeter","Out 1", 0);
  335. cmDspInst_t* mstr = cmDspSysAllocInst(h,"Button", "Mstr", 2, kCheckDuiId, 0.0 );
  336. cmDspInst_t* btn0 = cmDspSysAllocInst(h,"Button", "Fade 0", 2, kCheckDuiId, 0.0 );
  337. cmDspInst_t* btn1 = cmDspSysAllocInst(h,"Button", "Fade 1", 2, kCheckDuiId, 1.0 );
  338. cmDspInst_t* gm0p = cmDspSysAllocInst(h,"Meter","Gain 0", 3, 0.0, 0.0, 1.0);
  339. cmDspInst_t* gm1p = cmDspSysAllocInst(h,"Meter","Gain 1", 3, 0.0, 0.0, 1.0);
  340. cmDspInst_t* pon = cmDspSysAllocInst(h,"Printer", NULL, 1, "on:" );
  341. cmDspInst_t* pof = cmDspSysAllocInst(h,"Printer", NULL, 1, "off:" );
  342. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  343. return rc;
  344. cmDspSysConnectAudio(h, sg, "out", im0p, "in"); // ain -> meter
  345. cmDspSysConnectAudio(h, sg, "out", im1p, "in"); //
  346. cmDspSysConnectAudio(h, sg, "out", xfp, "in-0"); // ain -> xfader
  347. cmDspSysConnectAudio(h, sg, "out", xfp, "in-1");
  348. cmDspSysConnectAudio(h, xfp, "out-0", om0p, "in" ); // xfade -> meter
  349. cmDspSysConnectAudio(h, xfp, "out-1", om1p, "in" ); //
  350. cmDspSysConnectAudio(h, xfp, "out-0", ao0p, "in" ); // xfade -> aout
  351. cmDspSysConnectAudio(h, xfp, "out-1", ao1p, "in" ); //
  352. cmDspSysInstallCb(h, btn0, "out", xfp, "gate-0", NULL ); // check -> xfade gate
  353. cmDspSysInstallCb(h, btn1, "out", xfp, "gate-1", NULL );
  354. cmDspSysInstallCb(h, mstr, "out", xfp, "mgate", NULL );
  355. cmDspSysInstallCb(h, xfp, "gain-0", gm0p, "in", NULL );
  356. cmDspSysInstallCb(h, xfp, "gain-1", gm1p, "in", NULL );
  357. cmDspSysInstallCb(h, xfp, "on", pon, "in", NULL );
  358. cmDspSysInstallCb(h, xfp, "off", pof, "in", NULL );
  359. return cmDspSysLastRC(h);
  360. }
  361. cmDspRC_t _cmDspSysPgm6( cmDspSysH_t h, void* audioDir )
  362. {
  363. cmDspRC_t rc = kOkDspRC;
  364. int wndSmpCnt = 2048;
  365. int hopFact = 4;
  366. //const char* afDir = "/Volumes/LaTetra0/media/audio/20110723-Kriesberg/Audio Files";
  367. //const char* afDir = "/Users/administrator/Documents/kc";
  368. const char* afDir = "/home/kevin/media/audio/20110723-Kriesberg/Audio Files";
  369. cmDspInst_t* ph0p = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  370. cmDspInst_t* wt0p = cmDspSysAllocInst(h,"WaveTable",NULL, 0 );
  371. cmDspInst_t* ro0p = cmDspSysAllocInst(h,"Reorder", NULL, 5, 3, 2, 0, 1, 2 );
  372. cmDspInst_t* kr0p = cmDspSysAllocInst(h,"Kr", NULL, 2, wndSmpCnt, hopFact );
  373. cmDspInst_t* kr1p = cmDspSysAllocInst(h,"Kr", NULL, 2, wndSmpCnt, hopFact );
  374. cmDspInst_t* prp = cmDspSysAllocInst(h,"Printer", NULL, 0 );
  375. bool useBuiltInFl = true;
  376. // MOTU Traveler: Use channels 2&3 (out plugs:3&4) because 0&1 do not show up on plugs 1&2.
  377. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  378. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  379. // BUG: If audio inputs are not connected a 'not an audio buffer' msg is generated.
  380. // This is a problem with type determination in the cmDspClass related code : see cmDspClass.c 833
  381. // for a place that this error would be thrown in the following audio outputs were not connected
  382. // to audio sources.
  383. cmDspInst_t* ao2p = NULL;
  384. cmDspInst_t* ao3p = NULL;
  385. if( !useBuiltInFl )
  386. {
  387. ao2p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 4 );
  388. ao3p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 5 );
  389. }
  390. cmDspInst_t* al0p = cmDspSysAllocInst(h,"MsgList","audFiles", 2, "audFiles",NULL);
  391. cmDspInst_t* fl0p = cmDspSysAllocInst(h,"MsgList","audFragsA", 2, "audFrags",NULL);
  392. cmDspInst_t* fn0p = cmDspSysAllocInst(h,"Sprintf","filename", 1, "%s/%s_%02i.wav");
  393. cmDspInst_t* md0p = cmDspSysAllocInst(h,"Scalar", "Mode", 5, kNumberDuiId, 0.0, 4.0, 1.0, 1.0);
  394. cmDspInst_t* ws0p = cmDspSysAllocInst(h,"MsgList","wndSmpCnt", 3, "wndSmpCnt", NULL, 2);
  395. cmDspInst_t* hf0p = cmDspSysAllocInst(h,"MsgList","hopFact", 3, "hopFact", NULL, 2);
  396. cmDspInst_t* th0p = cmDspSysAllocInst(h,"Scalar", "threshold", 5, kNumberDuiId, 0.0, 100.0, 1.0, 60.0 );
  397. cmDspInst_t* us0p = cmDspSysAllocInst(h,"Scalar", "upr slope", 5, kNumberDuiId, 0.0, 10.0, 0.01, 0.0 );
  398. cmDspInst_t* ls0p = cmDspSysAllocInst(h,"Scalar", "lwr slope", 5, kNumberDuiId, 0.3, 10.0, 0.01, 2.0 );
  399. cmDspInst_t* of0p = cmDspSysAllocInst(h,"Scalar", "offset", 5, kNumberDuiId, 0.0, 100.0, 0.01, 30.0 );
  400. cmDspInst_t* iv0p = cmDspSysAllocInst(h,"Scalar", "invert", 5, kNumberDuiId, 0.0, 1.0, 1.0, 0.0 );
  401. cmDspSysNewColumn(h,0);
  402. //cmDspInst_t* al1p = cmDspSysAllocInst(h,"MsgList","audFiles", 2, "audFiles",NULL);
  403. //cmDspInst_t* fl1p = cmDspSysAllocInst(h,"MsgList","audFrags1", 2, "audFrags",NULL);
  404. //cmDspInst_t* fn1p = cmDspSysAllocInst(h,"Sprintf","filename", 1, "%s/%s_%02i.wav");
  405. cmDspInst_t* md1p = cmDspSysAllocInst(h,"Scalar", "Mode", 5, kNumberDuiId, 0.0, 4.0, 1.0, 1.0);
  406. cmDspInst_t* ws1p = cmDspSysAllocInst(h,"MsgList","wndSmpCnt", 3, "wndSmpCnt", NULL, 2);
  407. cmDspInst_t* hf1p = cmDspSysAllocInst(h,"MsgList","hopFact", 3, "hopFact", NULL, 2);
  408. cmDspInst_t* th1p = cmDspSysAllocInst(h,"Scalar", "threshold", 5, kNumberDuiId, 0.0, 100.0, 1.0, 60.0 );
  409. cmDspInst_t* us1p = cmDspSysAllocInst(h,"Scalar", "upr slope", 5, kNumberDuiId, 0.0, 10.0, 0.01, 0.0 );
  410. cmDspInst_t* ls1p = cmDspSysAllocInst(h,"Scalar", "lwr slope", 5, kNumberDuiId, 0.3, 10.0, 0.01, 2.0 );
  411. cmDspInst_t* of1p = cmDspSysAllocInst(h,"Scalar", "offset", 5, kNumberDuiId, 0.0, 100.0, 0.01, 30.0 );
  412. cmDspInst_t* iv1p = cmDspSysAllocInst(h,"Scalar", "invert", 5, kNumberDuiId, 0.0, 1.0, 1.0, 0.0 );
  413. cmDspSysNewColumn(h,0);
  414. cmDspInst_t* dnp = cmDspSysAllocInst(h,"Fname", "audDir", 3, true,NULL,afDir);
  415. cmDspInst_t* mtp = cmDspSysAllocInst(h,"Meter","MyMeter", 3, 50.0, 0.0, 100.0);
  416. cmDspInst_t* atp = cmDspSysAllocInst(h,"AMeter","Audio Meter",0);
  417. if( (rc = cmDspSysLastRC(h)) != kOkDspRC )
  418. return rc;
  419. cmDspSysConnectAudio(h, ph0p, "out", wt0p, "phs"); // phasor->wt:phs
  420. cmDspSysConnectAudio(h, wt0p, "out", kr0p, "in"); // wt->kr
  421. cmDspSysConnectAudio(h, kr0p, "out", ao0p, "in"); // kr->aout- 0
  422. cmDspSysConnectAudio(h, wt0p, "out", kr1p, "in"); // wt->kr
  423. cmDspSysConnectAudio(h, kr1p, "out", ao1p, "in"); // kr->aout - 1
  424. if( ao2p != NULL )
  425. cmDspSysConnectAudio(h, wt0p,"out", ao2p, "in"); // wt->aout - 2
  426. if( ao3p != NULL )
  427. cmDspSysConnectAudio(h, wt0p,"out", ao3p, "in"); // wt->aout - 3
  428. cmDspSysConnectAudio(h, wt0p,"out", atp, "in"); // wt->meter
  429. cmDspSysInstallCb(h, ws0p, "out", kr0p, "wndn", NULL ); // wndSmpCnt->kr
  430. cmDspSysInstallCb(h, hf0p, "out", kr0p, "hopf", NULL ); // hopFact->kr
  431. cmDspSysInstallCb(h, md0p, "val", kr0p, "mode", NULL ); // mode->kr
  432. cmDspSysInstallCb(h, th0p, "val", kr0p, "thrh", NULL ); // thresh->kr
  433. cmDspSysInstallCb(h, ls0p, "val", kr0p, "lwrs", NULL ); // lwrSlope->kr
  434. cmDspSysInstallCb(h, us0p, "val", kr0p, "uprs", NULL ); // uprSlope->kr
  435. cmDspSysInstallCb(h, of0p, "val", kr0p, "offs", NULL ); // offset->kr
  436. cmDspSysInstallCb(h, iv0p, "val", kr0p, "invt", NULL ); // invert->kr
  437. cmDspSysInstallCb(h, th0p, "val", mtp, "in", NULL );
  438. cmDspSysInstallCb(h, ws1p, "out", kr1p, "wndn", NULL ); // wndSmpCnt->kr
  439. cmDspSysInstallCb(h, hf1p, "out", kr1p, "hopf", NULL ); // hopFact->kr
  440. cmDspSysInstallCb(h, md1p, "val", kr1p, "mode", NULL ); // mode->kr
  441. cmDspSysInstallCb(h, th1p, "val", kr1p, "thrh", NULL ); // thresh->kr
  442. cmDspSysInstallCb(h, ls1p, "val", kr1p, "lwrs", NULL ); // lwrSlope->kr
  443. cmDspSysInstallCb(h, us1p, "val", kr1p, "uprs", NULL ); // uprSlope->kr
  444. cmDspSysInstallCb(h, of1p, "val", kr1p, "offs", NULL ); // offset->kr
  445. cmDspSysInstallCb(h, iv1p, "val", kr1p, "invt", NULL ); // invert->kr
  446. cmDspSysInstallCb(h, dnp, "out", fn0p, "in-0", NULL); // dir->fn:0
  447. cmDspSysInstallCb(h, al0p, "out", fn0p, "in-1", NULL ); // fn->fn:1
  448. cmDspSysInstallCb(h, fl0p, "take", fn0p, "in-2", NULL ); // take->fn:2
  449. cmDspSysInstallCb(h, fn0p, "out", ro0p, "in-0", NULL); // fn->print
  450. cmDspSysInstallCb(h, fl0p, "beg", ro0p, "in-1", NULL); //
  451. cmDspSysInstallCb(h, fl0p, "end", ro0p, "in-2", NULL); //
  452. cmDspSysInstallCb(h, ro0p, "out-0", wt0p, "fn", NULL ); // fn->wt:fn
  453. cmDspSysInstallCb(h, ro0p, "out-1", wt0p, "beg", NULL ); // beg->wt:beg
  454. cmDspSysInstallCb(h, ro0p, "out-2", wt0p, "end", NULL ); // end->wt:end
  455. cmDspSysInstallCb(h, ro0p, "out-1", prp, "in", NULL ); //
  456. //cmDspSysInstallCb(h, dnp, "out", fn1p, "in-0", NULL); // dir->fn:0
  457. //cmDspSysInstallCb(h, al1p, "out", fn1p, "in-1", NULL ); // fn->fn:1
  458. //cmDspSysInstallCb(h, fl1p, "take", fn1p, "in-2", NULL ); // take->fn:2
  459. //cmDspSysInstallCb(h, fn1p, "out", ro1p, "in-0", NULL); // fn->print
  460. //cmDspSysInstallCb(h, fl1p, "beg", ro1p, "in-1", NULL); //
  461. //cmDspSysInstallCb(h, fl1p, "end", ro1p, "in-2", NULL); //
  462. //cmDspSysInstallCb(h, ro1p, "out-0", wt1p, "fn", NULL ); // fn->wt:fn
  463. //cmDspSysInstallCb(h, ro1p, "out-1", wt1p, "beg", NULL ); // beg->wt:beg
  464. //cmDspSysInstallCb(h, ro1p, "out-2", wt1p, "end", NULL ); // end->wt:end
  465. return cmDspSysLastRC(h);
  466. }
  467. cmDspRC_t _cmDspSysPgmGuitar( cmDspSysH_t h, void** userPtrPtr )
  468. {
  469. cmDspRC_t rc = kOkDspRC;
  470. int wndSmpCnt = 2048;
  471. int hopFact = 4;
  472. const char* afDir = "/Volumes/LaTetra0/media/audio/20110723-Kriesberg/Audio Files";
  473. //const char* afDir = "/Users/administrator/Documents/kc";
  474. cmDspInst_t* ph0p = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  475. cmDspInst_t* wt0p = cmDspSysAllocInst(h,"WaveTable",NULL, 0 );
  476. cmDspInst_t* ro0p = cmDspSysAllocInst(h,"Reorder", NULL, 5, 3, 2, 0, 1, 2 );
  477. cmDspInst_t* kr0p = cmDspSysAllocInst(h,"Kr", NULL, 2, wndSmpCnt, hopFact );
  478. cmDspInst_t* kr1p = cmDspSysAllocInst(h,"Kr", NULL, 2, wndSmpCnt, hopFact );
  479. cmDspInst_t* prp = cmDspSysAllocInst(h,"Printer", NULL, 0 );
  480. bool useBuiltInFl = true;
  481. // MOTU Traveler: Use channels 2&3 (out plugs:3&4) because 0&1 do not show up on plugs 1&2.
  482. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 0 : 2 );
  483. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, useBuiltInFl ? 1 : 3 );
  484. // BUG: If audio inputs are not connected a 'not an audio buffer' msg is generated.
  485. // This is a problem with type determination in the cmDspClass related code : see cmDspClass.c 833
  486. // for a place that this error would be thrown in the following audio outputs were not connected
  487. // to audio sources.
  488. cmDspInst_t* ao2p = NULL;
  489. cmDspInst_t* ao3p = NULL;
  490. if( !useBuiltInFl )
  491. {
  492. ao2p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 4 );
  493. ao3p = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 5 );
  494. }
  495. cmDspInst_t* al0p = cmDspSysAllocInst(h,"MsgList","audFiles", 2, "audFiles",NULL);
  496. cmDspInst_t* fl0p = cmDspSysAllocInst(h,"MsgList","audFragsA", 2, "audFrags",NULL);
  497. cmDspInst_t* fn0p = cmDspSysAllocInst(h,"Sprintf","filename", 1, "%s/%s_%02i.wav");
  498. cmDspInst_t* md0p = cmDspSysAllocInst(h,"Scalar", "Mode", 5, kNumberDuiId, 0.0, 4.0, 1.0, 1.0);
  499. cmDspInst_t* ws0p = cmDspSysAllocInst(h,"MsgList","wndSmpCnt", 3, "wndSmpCnt", NULL, 2);
  500. cmDspInst_t* hf0p = cmDspSysAllocInst(h,"MsgList","hopFact", 3, "hopFact", NULL, 2);
  501. cmDspInst_t* th0p = cmDspSysAllocInst(h,"Scalar", "threshold", 5, kNumberDuiId, 0.0, 100.0, 1.0, 60.0 );
  502. cmDspInst_t* us0p = cmDspSysAllocInst(h,"Scalar", "upr slope", 5, kNumberDuiId, 0.0, 10.0, 0.01, 0.0 );
  503. cmDspInst_t* ls0p = cmDspSysAllocInst(h,"Scalar", "lwr slope", 5, kNumberDuiId, 0.3, 10.0, 0.01, 2.0 );
  504. cmDspInst_t* of0p = cmDspSysAllocInst(h,"Scalar", "offset", 5, kNumberDuiId, 0.0, 100.0, 0.01, 30.0 );
  505. cmDspInst_t* iv0p = cmDspSysAllocInst(h,"Scalar", "invert", 5, kNumberDuiId, 0.0, 1.0, 1.0, 0.0 );
  506. cmDspSysNewColumn(h,0);
  507. //cmDspInst_t* al1p = cmDspSysAllocInst(h,"MsgList","audFiles", 2, "audFiles",NULL);
  508. //cmDspInst_t* fl1p = cmDspSysAllocInst(h,"MsgList","audFrags1", 2, "audFrags",NULL);
  509. //cmDspInst_t* fn1p = cmDspSysAllocInst(h,"Sprintf","filename", 1, "%s/%s_%02i.wav");
  510. cmDspInst_t* md1p = cmDspSysAllocInst(h,"Scalar", "Mode", 5, kNumberDuiId, 0.0, 4.0, 1.0, 1.0);
  511. cmDspInst_t* ws1p = cmDspSysAllocInst(h,"MsgList","wndSmpCnt", 3, "wndSmpCnt", NULL, 2);
  512. cmDspInst_t* hf1p = cmDspSysAllocInst(h,"MsgList","hopFact", 3, "hopFact", NULL, 2);
  513. cmDspInst_t* th1p = cmDspSysAllocInst(h,"Scalar", "threshold", 5, kNumberDuiId, 0.0, 100.0, 1.0, 60.0 );
  514. cmDspInst_t* us1p = cmDspSysAllocInst(h,"Scalar", "upr slope", 5, kNumberDuiId, 0.0, 10.0, 0.01, 0.0 );
  515. cmDspInst_t* ls1p = cmDspSysAllocInst(h,"Scalar", "lwr slope", 5, kNumberDuiId, 0.3, 10.0, 0.01, 2.0 );
  516. cmDspInst_t* of1p = cmDspSysAllocInst(h,"Scalar", "offset", 5, kNumberDuiId, 0.0, 100.0, 0.01, 30.0 );
  517. cmDspInst_t* iv1p = cmDspSysAllocInst(h,"Scalar", "invert", 5, kNumberDuiId, 0.0, 1.0, 1.0, 0.0 );
  518. cmDspSysNewColumn(h,0);
  519. cmDspInst_t* dnp = cmDspSysAllocInst(h,"Fname", "audDir", 3, true,NULL,afDir);
  520. cmDspInst_t* mtp = cmDspSysAllocInst(h,"Meter","MyMeter", 3, 50.0, 0.0, 100.0);
  521. cmDspInst_t* atp = cmDspSysAllocInst(h,"AMeter","Audio Meter",0);
  522. if( (rc = cmDspSysLastRC(h)) != kOkDspRC )
  523. return rc;
  524. cmDspSysConnectAudio(h, ph0p, "out", wt0p, "phs"); // phasor->wt:phs
  525. cmDspSysConnectAudio(h, wt0p, "out", kr0p, "in"); // wt->kr
  526. cmDspSysConnectAudio(h, kr0p, "out", ao0p, "in"); // kr->aout- 0
  527. cmDspSysConnectAudio(h, wt0p, "out", kr1p, "in"); // wt->kr
  528. cmDspSysConnectAudio(h, kr1p, "out", ao1p, "in"); // kr->aout - 1
  529. if( ao2p != NULL )
  530. cmDspSysConnectAudio(h, wt0p,"out", ao2p, "in"); // wt->aout - 2
  531. if( ao3p != NULL )
  532. cmDspSysConnectAudio(h, wt0p,"out", ao3p, "in"); // wt->aout - 3
  533. cmDspSysConnectAudio(h, wt0p,"out", atp, "in"); // wt->meter
  534. cmDspSysInstallCb(h, ws0p, "out", kr0p, "wndn", NULL ); // wndSmpCnt->kr
  535. cmDspSysInstallCb(h, hf0p, "out", kr0p, "hopf", NULL ); // hopFact->kr
  536. cmDspSysInstallCb(h, md0p, "val", kr0p, "mode", NULL ); // mode->kr
  537. cmDspSysInstallCb(h, th0p, "val", kr0p, "thrh", NULL ); // thresh->kr
  538. cmDspSysInstallCb(h, ls0p, "val", kr0p, "lwrs", NULL ); // lwrSlope->kr
  539. cmDspSysInstallCb(h, us0p, "val", kr0p, "uprs", NULL ); // uprSlope->kr
  540. cmDspSysInstallCb(h, of0p, "val", kr0p, "offs", NULL ); // offset->kr
  541. cmDspSysInstallCb(h, iv0p, "val", kr0p, "invt", NULL ); // invert->kr
  542. cmDspSysInstallCb(h, th0p, "val", mtp, "in", NULL );
  543. cmDspSysInstallCb(h, ws1p, "out", kr1p, "wndn", NULL ); // wndSmpCnt->kr
  544. cmDspSysInstallCb(h, hf1p, "out", kr1p, "hopf", NULL ); // hopFact->kr
  545. cmDspSysInstallCb(h, md1p, "val", kr1p, "mode", NULL ); // mode->kr
  546. cmDspSysInstallCb(h, th1p, "val", kr1p, "thrh", NULL ); // thresh->kr
  547. cmDspSysInstallCb(h, ls1p, "val", kr1p, "lwrs", NULL ); // lwrSlope->kr
  548. cmDspSysInstallCb(h, us1p, "val", kr1p, "uprs", NULL ); // uprSlope->kr
  549. cmDspSysInstallCb(h, of1p, "val", kr1p, "offs", NULL ); // offset->kr
  550. cmDspSysInstallCb(h, iv1p, "val", kr1p, "invt", NULL ); // invert->kr
  551. cmDspSysInstallCb(h, dnp, "out", fn0p, "in-0", NULL); // dir->fn:0
  552. cmDspSysInstallCb(h, al0p, "out", fn0p, "in-1", NULL ); // fn->fn:1
  553. cmDspSysInstallCb(h, fl0p, "take", fn0p, "in-2", NULL ); // take->fn:2
  554. cmDspSysInstallCb(h, fn0p, "out", ro0p, "in-0", NULL); // fn->print
  555. cmDspSysInstallCb(h, fl0p, "beg", ro0p, "in-1", NULL); //
  556. cmDspSysInstallCb(h, fl0p, "end", ro0p, "in-2", NULL); //
  557. cmDspSysInstallCb(h, ro0p, "out-0", wt0p, "fn", NULL ); // fn->wt:fn
  558. cmDspSysInstallCb(h, ro0p, "out-1", wt0p, "beg", NULL ); // beg->wt:beg
  559. cmDspSysInstallCb(h, ro0p, "out-2", wt0p, "end", NULL ); // end->wt:end
  560. cmDspSysInstallCb(h, ro0p, "out-1", prp, "in", NULL ); //
  561. //cmDspSysInstallCb(h, dnp, "out", fn1p, "in-0", NULL); // dir->fn:0
  562. //cmDspSysInstallCb(h, al1p, "out", fn1p, "in-1", NULL ); // fn->fn:1
  563. //cmDspSysInstallCb(h, fl1p, "take", fn1p, "in-2", NULL ); // take->fn:2
  564. //cmDspSysInstallCb(h, fn1p, "out", ro1p, "in-0", NULL); // fn->print
  565. //cmDspSysInstallCb(h, fl1p, "beg", ro1p, "in-1", NULL); //
  566. //cmDspSysInstallCb(h, fl1p, "end", ro1p, "in-2", NULL); //
  567. //cmDspSysInstallCb(h, ro1p, "out-0", wt1p, "fn", NULL ); // fn->wt:fn
  568. //cmDspSysInstallCb(h, ro1p, "out-1", wt1p, "beg", NULL ); // beg->wt:beg
  569. //cmDspSysInstallCb(h, ro1p, "out-2", wt1p, "end", NULL ); // end->wt:end
  570. return cmDspSysLastRC(h);
  571. }
  572. cmDspRC_t _cmDspSysPgm_Pickups0( cmDspSysH_t h, void** userPtrPtr )
  573. {
  574. unsigned i;
  575. unsigned chCnt = 8;
  576. double delayFb = 0.0;
  577. double delayMaxMs = 1000.0;
  578. cmDspInst_t* chArray[chCnt];
  579. cmDspInst_t* m_mxWet = cmDspSysAllocInst(h,"Scalar", "Mstr Wet", 5, kNumberDuiId, 0.0, 2.0, 0.01, 1.0 );
  580. cmDspInst_t* m_mxDry = cmDspSysAllocInst(h,"Scalar", "Mstr Dry", 5, kNumberDuiId, 0.0, 2.0, 0.01, 1.0 );
  581. cmDspSysNewColumn(h,0);
  582. cmDspInst_t* m_lpByp = cmDspSysAllocInst(h,"Button", "Mstr Lp Byps", 2, kCheckDuiId, 0.0 );
  583. cmDspInst_t* m_lpRcd = cmDspSysAllocInst(h,"Button", "Mstr Lp Recd", 2, kCheckDuiId, 0.0 );
  584. cmDspInst_t* m_lpRat = cmDspSysAllocInst(h,"Scalar", "Mstr Lp Ratio", 5, kNumberDuiId, 0.0, 10.0, 0.01, 1.0 );
  585. cmDspSysNewColumn(h,0);
  586. cmDspInst_t* m_dlyByp = cmDspSysAllocInst(h,"Button", "Mstr Dly Byps", 2, kCheckDuiId, 0.0 );
  587. cmDspInst_t* m_dlyMs = cmDspSysAllocInst(h,"Scalar", "Mstr Dly Time", 5, kNumberDuiId, 0.0, delayMaxMs, 1.0, 0.0 );
  588. cmDspInst_t* m_dlyFb = cmDspSysAllocInst(h,"Scalar", "Mstr Dly Fb", 5, kNumberDuiId, 0.0, 0.999, 0.01, 0.0 );
  589. cmDspSysNewColumn(h,0);
  590. cmDspInst_t* m_psByp = cmDspSysAllocInst(h,"Button", "Mstr PS Byps", 2, kCheckDuiId, 0.0 );
  591. cmDspInst_t* m_psRat = cmDspSysAllocInst(h,"Scalar", "Mstr PS Ratio", 5, kNumberDuiId, 0.0, 10.0, 0.01, 1.0 );
  592. cmDspSysNewColumn(h,0);
  593. cmDspInst_t* m_rcByp = cmDspSysAllocInst(h,"Button", "Mstr Rect Byps", 2, kCheckDuiId, 0.0 );
  594. cmDspSysInsertHorzBorder(h);
  595. for(i=0; i<chCnt; ++i)
  596. {
  597. int chIdx = i;
  598. cmDspInst_t* mxWet = cmDspSysAllocInst(h,"Scalar", "Wet", 5, kNumberDuiId, 0.0, 2.0, 0.01, 1.0 );
  599. cmDspInst_t* mxDry = cmDspSysAllocInst(h,"Scalar", "Dry", 5, kNumberDuiId, 0.0, 2.0, 0.01, 1.0 );
  600. cmDspInst_t* lpByp = cmDspSysAllocInst(h,"Button", "Lp Byps", 2, kCheckDuiId, 0.0 );
  601. cmDspInst_t* lpRcd = cmDspSysAllocInst(h,"Button", "Lp Recd", 2, kCheckDuiId, 0.0 );
  602. cmDspInst_t* lpRat = cmDspSysAllocInst(h,"Scalar", "Lp Ratio", 5, kNumberDuiId, 0.0, 10.0, 0.01, 1.0 );
  603. cmDspInst_t* dlyByp = cmDspSysAllocInst(h,"Button", "Delay Byps", 2, kCheckDuiId, 0.0 );
  604. cmDspInst_t* dlyMs = cmDspSysAllocInst(h,"Scalar", "Delay Time", 5, kNumberDuiId, 0.0, delayMaxMs, 1.0, 0.0 );
  605. cmDspInst_t* dlyFb = cmDspSysAllocInst(h,"Scalar", "Delay Fb", 5, kNumberDuiId, 0.0, 0.999, 0.01, 0.0 );
  606. cmDspInst_t* psByp = cmDspSysAllocInst(h,"Button", "PS Byps", 2, kCheckDuiId, 0.0 );
  607. cmDspInst_t* psRat = cmDspSysAllocInst(h,"Scalar", "PS Ratio", 5, kNumberDuiId, 0.0, 10.0, 0.01, 1.0 );
  608. cmDspInst_t* rcByp = cmDspSysAllocInst(h,"Button", "Rect Byps", 2, kCheckDuiId, 0.0 );
  609. cmDspInst_t* ain = cmDspSysAllocInst(h, "AudioIn", NULL, 1, chIdx );
  610. cmDspInst_t* loop = cmDspSysAllocInst(h, "LoopRecd", NULL, 0 );
  611. cmDspInst_t* dely = cmDspSysAllocInst(h, "Delay", NULL, 2, delayMaxMs, delayFb );
  612. cmDspInst_t* pshf = cmDspSysAllocInst(h, "PShift", NULL, 0 );
  613. cmDspInst_t* rect = cmDspSysAllocInst(h, "Rectify", NULL, 0 );
  614. cmDspInst_t* amix = cmDspSysAllocInst(h, "AMix", NULL, 1, 2 );
  615. //cmDspInst_t* aout = cmDspSysAllocInst(h, "AudioOut", NULL, 1, chIdx );
  616. chArray[i] = amix;
  617. cmDspSysNewColumn(h,0);
  618. cmDspSysConnectAudio(h, ain, "out", loop, "in"); // ain -> loop
  619. cmDspSysConnectAudio(h, loop, "out", dely, "in"); // loop -> delay
  620. cmDspSysConnectAudio(h, dely, "out", pshf, "in"); // delay -> pshf
  621. cmDspSysConnectAudio(h, pshf, "out", rect, "in"); // pshf -> rect
  622. cmDspSysConnectAudio(h, rect, "out", amix, "in-0"); // rect -> mix_wet
  623. cmDspSysConnectAudio(h, ain, "out", amix, "in-1"); // ain -> mix_dry
  624. //cmDspSysConnectAudio(h, amix, "out", aout, "in"); // mix -> out
  625. cmDspSysInstallCb(h, mxWet, "val", amix, "gain-0", NULL );
  626. cmDspSysInstallCb(h, mxDry, "val", amix, "gain-1", NULL );
  627. cmDspSysInstallCb(h, lpByp, "out", loop, "bypass", NULL );
  628. cmDspSysInstallCb(h, lpRcd, "out", loop, "recd", NULL );
  629. cmDspSysInstallCb(h, lpRat, "val", loop, "ratio", NULL );
  630. cmDspSysInstallCb(h, dlyByp,"val", dely, "bypass", NULL );
  631. cmDspSysInstallCb(h, dlyMs, "val", dely, "time", NULL );
  632. cmDspSysInstallCb(h, dlyFb, "out", dely, "fb", NULL );
  633. cmDspSysInstallCb(h, psByp, "out", pshf, "bypass", NULL );
  634. cmDspSysInstallCb(h, psRat, "val", pshf, "ratio", NULL );
  635. cmDspSysInstallCb(h, rcByp, "out", rect, "bypass", NULL );
  636. cmDspSysInstallCb(h, m_mxWet, "val", mxWet, "in", NULL );
  637. cmDspSysInstallCb(h, m_mxDry, "val", mxDry, "in", NULL );
  638. cmDspSysInstallCb(h, m_lpByp, "out", lpByp, "in", NULL );
  639. cmDspSysInstallCb(h, m_lpRcd, "out", lpRcd, "in", NULL );
  640. cmDspSysInstallCb(h, m_lpRat, "val", lpRat, "in", NULL );
  641. cmDspSysInstallCb(h, m_dlyByp,"out", dlyByp,"in", NULL );
  642. cmDspSysInstallCb(h, m_dlyMs, "val", dlyMs, "in", NULL );
  643. cmDspSysInstallCb(h, m_dlyFb, "val", dlyFb, "in", NULL );
  644. cmDspSysInstallCb(h, m_psByp, "out", psByp, "in", NULL );
  645. cmDspSysInstallCb(h, m_psRat, "val", psRat, "in", NULL );
  646. cmDspSysInstallCb(h, m_rcByp, "out", rcByp, "in", NULL );
  647. }
  648. double dfltGain = 0.5;
  649. cmDspInst_t* omix = cmDspSysAllocInst(h, "AMix", NULL, 9, 8, dfltGain, dfltGain, dfltGain, dfltGain, dfltGain, dfltGain, dfltGain, dfltGain );
  650. cmDspInst_t* aout0 = cmDspSysAllocInst(h, "AudioOut", NULL, 1, 0 );
  651. cmDspInst_t* aout1 = cmDspSysAllocInst(h, "AudioOut", NULL, 1, 1 );
  652. cmDspInst_t* aout2 = cmDspSysAllocInst(h, "AudioOut", NULL, 1, 2 );
  653. cmDspInst_t* aout3 = cmDspSysAllocInst(h, "AudioOut", NULL, 1, 3 );
  654. for(i=0; i<chCnt; ++i)
  655. {
  656. char label[32];
  657. snprintf(label,32,"in-%i",i);
  658. cmDspSysConnectAudio(h, chArray[i], "out", omix, label);
  659. }
  660. cmDspSysConnectAudio(h, omix, "out", aout0, "in");
  661. cmDspSysConnectAudio(h, omix, "out", aout1, "in");
  662. cmDspSysConnectAudio(h, omix, "out", aout2, "in");
  663. cmDspSysConnectAudio(h, omix, "out", aout3, "in");
  664. return kOkDspRC;
  665. }
  666. #include "cmAudioFile.h"
  667. #include "cmProcObj.h"
  668. #include "cmProc.h"
  669. #include "cmProc3.h"
  670. // Usage:
  671. // 1) Push 'start'.
  672. // 2) Select the first element in the Ch Cfg List UI.
  673. // 3) Play several examples of the note.
  674. // 4) Select the next element in the Ch Cfg List UI.
  675. // 5) Go to 3) until all ch's have been played.
  676. // 6) Push 'proc'. A new set of gains will be calc'd and sent to the audio input channels.
  677. // Note that if a mistake is made while playing a set of notes in 3) then
  678. // push select the same element from the list again and replay.
  679. // The order the notes are played in does not make any difference.
  680. cmDspRC_t _cmDspSysPgm_AutoGain( cmDspSysH_t h, void** userPtrPtr )
  681. {
  682. cmDspRC_t rc = kOkDspRC;
  683. unsigned i;
  684. //unsigned j;
  685. cmErr_t err;
  686. const cmChar_t* errLabelPtr = NULL;
  687. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  688. unsigned chCnt = 0;
  689. unsigned nsChCnt = 0;
  690. const cmChar_t* chCfgFn = NULL;
  691. const cmChar_t* chCfgPath = NULL;
  692. unsigned agMedCnt = 5;
  693. unsigned agAvgCnt = 9;
  694. unsigned agSuprCnt = 3;
  695. unsigned agOffCnt = 3;
  696. cmReal_t agSuprCoeff = 1.4;
  697. cmReal_t agOnThreshDb = -53.0;
  698. cmReal_t agOffThreshDb = -80.0;
  699. cmReal_t agHopMs = 25;
  700. //cmReal_t cdMaxTimeSpanMs = 50;
  701. //cmReal_t cdMinNoteCnt = 3;
  702. unsigned labelCharCnt = 31;
  703. char label0[ labelCharCnt + 1];
  704. cmErrSetup(&err,&cmCtx->rpt,"Auto-gain");
  705. // get the name of channel cfg file
  706. if( cmJsonPathValues( cmDspSysPgmRsrcHandle(h),"cfg/",NULL,&errLabelPtr,
  707. "chCfgFn", kStringTId, &chCfgFn,
  708. "agParms/hopMs", kRealTId, &agHopMs,
  709. "agParms/medCnt", kIntTId, &agMedCnt,
  710. "agParms/avgCnt", kIntTId, &agAvgCnt,
  711. "agParms/suprCnt", kIntTId, &agSuprCnt,
  712. "agParms/offCnt", kIntTId, &agOffCnt,
  713. "agParms/suprCoeff", kRealTId, &agSuprCoeff,
  714. "agParms/onThreshDb", kRealTId, &agOnThreshDb,
  715. "agParms/offThreshDb", kRealTId, &agOffThreshDb,
  716. NULL) != kOkJsRC )
  717. {
  718. rc = cmErrMsg(&err,kPgmCfgFailDspRC,"An error occurred while reading the required auto-tune JSON parameters.");
  719. goto errLabel;
  720. }
  721. // get the count of channels from the ch. cfg. array
  722. if(( chCnt = cmChCfgChannelCount(cmCtx,chCfgFn,&nsChCnt)) == 0 )
  723. {
  724. rc = cmErrMsg(&err,kPgmCfgFailDspRC,"Unable to obtain the channel count from '%s'.",cmStringNullGuard(chCfgFn));
  725. goto errLabel;
  726. }
  727. // prepend the prefs directory to the ch. cfg filename
  728. chCfgPath = cmFsMakeFn(cmFsPrefsDir(),chCfgFn,NULL,NULL);
  729. if( rc == kOkDspRC )
  730. {
  731. //mDspInst_t* ain[chCnt];
  732. cmDspInst_t* ef[chCnt];
  733. cmDspInst_t* mtr[chCnt];
  734. cmDspInst_t* amtr[chCnt];
  735. cmDspInst_t* on[chCnt];
  736. cmDspInst_t* off[chCnt];
  737. cmDspInst_t* rms[chCnt];
  738. ///cmDspInst_t* fdr0[chCnt];
  739. ///cmDspInst_t* fdr1[chCnt];
  740. ///cmDspInst_t* fdr2[chCnt];
  741. // allocate the audio inputs
  742. //for(i=0; i<chCnt; ++i)
  743. // ain[i] = cmDspSysAllocAudioIn(h,i,1.0);
  744. unsigned inChCnt;
  745. cmDspInst_t** ain = cmDspSysAllocAudioInAR( h, "audioInMap", 1.0, &inChCnt );
  746. // allocate the auto-gain calibration object
  747. cmDspInst_t* ag = cmDspSysAllocInst( h, "AutoGain", NULL, 9, chCnt, agHopMs,agMedCnt,agAvgCnt,agSuprCnt,agOffCnt,agSuprCoeff,agOnThreshDb,agOffThreshDb );
  748. // allocate the command buttons
  749. cmDspInst_t* start = cmDspSysAllocButton(h, "start", 0);
  750. cmDspInst_t* proc = cmDspSysAllocButton(h, "proc", 0);
  751. cmDspInst_t* cancel = cmDspSysAllocButton(h, "cancel", 0);
  752. cmDspInst_t* write = cmDspSysAllocButton(h, "write", 0);
  753. cmDspInst_t* print = cmDspSysAllocButton(h, "print", 0);
  754. cmDspInst_t* chMenu = cmDspSysAllocMsgList(h, chCfgPath, "ch_array", 0 );
  755. cmDspInst_t* onThr = cmDspSysAllocScalar(h,"On Thresh",-100.0,0.0,0.1,-45.0);
  756. cmDspInst_t* offThr = cmDspSysAllocScalar(h,"Off Thresh",-100.0,0.0,0.1,-80.0);
  757. //cmDspInst_t* prt = cmDspSysAllocInst(h,"Printer",NULL,1,"ag>");
  758. cmDspInst_t* sub = cmDspSysAllocInst(h,"ScalarOp",NULL,6,2,"+","in-0",0.0,"in-1",-1.0);
  759. cmDspSysNewColumn(h,200);
  760. cmDspSysAllocLabel(h,"EF Gate",kLeftAlignDuiId);
  761. // allocate the envelope followers and meters
  762. for(i=0; i<chCnt; ++i )
  763. {
  764. snprintf(label0,labelCharCnt,"%2i",i);
  765. ef[i] = cmDspSysAllocInst( h, "EnvFollow", NULL, 0 );
  766. mtr[i] = cmDspSysAllocInst( h, "Meter",label0, 3, 0.0, 0.0, 1.0 );
  767. }
  768. cmDspSysNewColumn(h,200);
  769. cmDspSysAllocLabel(h,"Audio",kLeftAlignDuiId);
  770. // allocate the envelope followers and meters
  771. for(i=0; i<chCnt; ++i )
  772. {
  773. amtr[i] = cmDspSysAllocInst( h, "AMeter", NULL, 0 );
  774. }
  775. // chord detector, note selector, mix0, mix1, mix2
  776. ///cmDspInst_t* cdp = cmDspSysAllocInst(h, "ChordDetect", NULL, 1, "cdSel" );
  777. ///cmDspInst_t* nsp = cmDspSysAllocInst(h, "NoteSelect", NULL, 1, chCnt );
  778. // onset count display
  779. cmDspSysNewColumn(h,150);
  780. cmDspSysAllocLabel(h,"Onsets",kLeftAlignDuiId);
  781. for(i=0; i<chCnt; ++i)
  782. on[i] = cmDspSysAllocScalar(h,NULL,0,1,0,0);
  783. // offset count display
  784. cmDspSysNewColumn(h,150);
  785. cmDspSysAllocLabel(h,"Offsets",kLeftAlignDuiId);
  786. for(i=0; i<chCnt; ++i)
  787. off[i] = cmDspSysAllocScalar(h,NULL,0,1,0,0);
  788. // offset count display
  789. cmDspSysNewColumn(h,150);
  790. cmDspSysAllocLabel(h,"RMS",kLeftAlignDuiId);
  791. for(i=0; i<chCnt; ++i)
  792. rms[i] = cmDspSysAllocScalar(h,NULL,0,1,0,0);
  793. /*
  794. // note select gate meters
  795. for(j=0; j<3; ++j)
  796. {
  797. snprintf(label0,labelCharCnt,"Set %i",j);
  798. cmDspSysNewColumn(h,50);
  799. cmDspSysAllocLabel(h,label0,kLeftAlignDuiId );
  800. for(i=0; i<chCnt; ++i)
  801. {
  802. cmDspInst_t* m = cmDspSysAllocInst(h, "Meter", NULL, 3, 0.0, 0.0, 1.0 );
  803. switch(j)
  804. {
  805. case 0: fdr0[i] = m; break;
  806. case 1: fdr1[i] = m; break;
  807. case 2: fdr2[i] = m; break;
  808. }
  809. }
  810. }
  811. // chord detector parameters
  812. cmDspSysNewColumn(h,150);
  813. cmDspSysAllocLabel(h,"Chord Detector",kLeftAlignDuiId);
  814. cmDspInst_t* cdSpanMs = cmDspSysAllocScalar(h,"Span Ms", 10.0,1000.0,1.0,cdMaxTimeSpanMs);
  815. cmDspInst_t* cdNoteCnt = cmDspSysAllocScalar(h,"Note Cnt", 1.0, 100.0,1.0,cdMinNoteCnt );
  816. cmDspInst_t* cdCount = cmDspSysAllocScalar(h,"Ch. Count", 0,1,0,0);
  817. */
  818. // allocate an audio mixer and two audio output channels
  819. cmDspInst_t* amix = cmDspSysAllocInst( h, "AMix", NULL, 1, chCnt);
  820. cmDspInst_t* ao0 = cmDspSysAllocAudioOut(h,0,1.0);
  821. cmDspInst_t* ao1 = cmDspSysAllocAudioOut(h,1,1.0);
  822. // alloc chCfg last so that it's default outputs are applied to connected objects
  823. cmDspInst_t* chCfg = cmDspSysAllocInst( h, "ChCfg", NULL, 1, chCfgFn );
  824. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  825. goto errLabel;
  826. cmDspSysConnectAudioN11N(h,ain, "out", ag, "in", chCnt); // ain -> auto gain
  827. cmDspSysConnectAudioN11N(h,ain, "out", amix, "in", chCnt); // ain -> amix
  828. cmDspSysConnectAudioN1N1(h,ain, "out", ef, "in", chCnt); // ain -> EF
  829. cmDspSysConnectAudioN1N1(h, ain, "out", amtr, "in",chCnt);
  830. cmDspSysInstallCb1N1N(h, ag, "gain", chCfg, "gain", chCnt ); // ag -> chCfg (gain)
  831. cmDspSysInstallCb1NN1(h, chCfg, "gain", ain, "gain", chCnt ); // cgCfg -> ain (gain)
  832. cmDspSysInstallCb1NN1(h, chCfg, "ch", ain, "ch", chCnt ); // cgCfg -> ain (ch)
  833. cmDspSysInstallCbN1N1(h, ef, "gate", mtr, "in", chCnt ); // EF gate -> meter
  834. cmDspSysInstallCb11N1(h, onThr, "val", ef, "ondb", chCnt ); //
  835. cmDspSysInstallCb11N1(h, offThr, "val", ef, "offdb", chCnt ); //
  836. cmDspSysInstallCbN1N1(h, ef, "ons", on, "val", chCnt ); // EF -> onset count
  837. cmDspSysInstallCbN1N1(h, ef, "offs", off, "val", chCnt ); // EF -> offset count
  838. cmDspSysInstallCbN1N1(h, ef, "rms", rms, "val", chCnt );
  839. ///cmDspSysInstallCbN11N(h, ef, "gate", cdp, "gate", chCnt ); // EF -> CD gate
  840. ///cmDspSysInstallCbN11N(h, ef, "rms", cdp, "rms", chCnt ); // EF -> CD rms
  841. ///cmDspSysInstallCb1N1N(h, cdp, "gate", nsp, "gate", chCnt ); // CD -> NS gate
  842. ///cmDspSysInstallCb1N1N(h, cdp, "rms", nsp, "rms", chCnt ); // CD -> NS rms
  843. ///cmDspSysInstallCb1NN1(h, nsp, "gate-0",fdr0, "in", chCnt ); // NS -> Fader 0 gate
  844. ///cmDspSysInstallCb1NN1(h, nsp, "gate-1",fdr1, "in", chCnt ); // NS -> Fader 1 gate
  845. ///cmDspSysInstallCb1NN1(h, nsp, "gate-2",fdr2, "in", chCnt ); // NS -> Fader 2 gate
  846. cmDspSysConnectAudio(h, amix, "out", ao0, "in"); // amix -> aout 0
  847. cmDspSysConnectAudio(h, amix, "out", ao1, "in"); // amix -> aout 1
  848. //cmDspSysInstallCb(h, chMenu, "ch", ag, "id", NULL );
  849. cmDspSysInstallCb(h, chMenu, "sel", sub, "in-0", NULL );
  850. cmDspSysInstallCb(h, sub, "out", ag, "id", NULL );
  851. cmDspSysInstallCb(h, start, "sym", ag, "sel", NULL );
  852. cmDspSysInstallCb(h, proc, "sym", ag, "sel", NULL );
  853. cmDspSysInstallCb(h, cancel, "sym", ag, "sel", NULL );
  854. cmDspSysInstallCb(h, print, "sym", ag, "sel", NULL );
  855. cmDspSysInstallCb(h, print, "sym", chCfg, "sel", NULL );
  856. cmDspSysInstallCb(h, write, "sym", chCfg, "sel", NULL );
  857. /*
  858. cmDspSysInstallCb(h, cdSpanMs, "val", cdp, "span", NULL );
  859. cmDspSysInstallCb(h, cdNoteCnt, "val", cdp, "notes", NULL );
  860. cmDspSysInstallCb(h, cdp, "count", cdCount, "val", NULL );
  861. cmDspSysInstallCb(h, cdp, "detect", nsp, "trig", NULL );
  862. */
  863. }
  864. errLabel:
  865. cmFsFreeFn(chCfgPath);
  866. return rc;
  867. }
  868. cmDspRC_t _cmDspSysPgm_PickupFxFile( cmDspSysH_t h, void** userPtrPtr )
  869. {
  870. cmDspRC_t rc = kOkDspRC;
  871. cmErr_t err;
  872. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  873. unsigned chCnt = 0;
  874. unsigned nsChCnt = 0;
  875. const cmChar_t* chCfgPath = NULL;
  876. const cmChar_t* chCfgFn = "pick_chs8.js";
  877. double cfMinHz = 20.0;
  878. double cfAlpha = 0.9;
  879. bool cfFbFl = true;
  880. unsigned sgShapeId = 2;
  881. const cmChar_t* afn = "/home/kevin/media/audio/gate_detect/gate_detect0.aif";
  882. unsigned abeg[] = { 9.842046, 18.838291, 27.007957, 35.562079, 45.461793, 52.920218, 60.436312, 68.913543};
  883. unsigned aend[] = {11.399088, 20.645229, 28.891786, 37.311349, 47.287954, 54.131251, 62.473923, 72.142964};
  884. bool cfBypassFl = false;
  885. unsigned i;
  886. cmErrSetup(&err,&cmCtx->rpt,"Pickup Effects");
  887. // prepend the prefs directory to the ch. cfg filename
  888. chCfgPath = cmFsMakeFn(cmFsPrefsDir(),chCfgFn,NULL,NULL);
  889. // get the count of channels from the ch. cfg. array
  890. if(( chCnt = cmChCfgChannelCount(cmCtx,chCfgFn,&nsChCnt)) == 0 )
  891. {
  892. rc = cmErrMsg(&err,kPgmCfgFailDspRC,"Unable to obtain the channel count from '%s'.",cmStringNullGuard(chCfgFn));
  893. goto errLabel;
  894. }
  895. if( rc == kOkDspRC )
  896. {
  897. cmDspInst_t* af[chCnt];
  898. //cmDspInst_t* aout[chCnt];
  899. cmDspInst_t* ef[chCnt];
  900. cmDspInst_t* cf[chCnt];
  901. cmDspInst_t* sg[chCnt];
  902. cmDspInst_t* mtr[chCnt];
  903. cmDspInst_t* mute[chCnt];
  904. cmDspInst_t* phs = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  905. // allocate the audio inputs
  906. for(i=0; i<chCnt; ++i)
  907. {
  908. unsigned labelCharCnt = 31;
  909. cmChar_t label[labelCharCnt+1];
  910. snprintf(label,labelCharCnt,"%i",i);
  911. int sbeg = floor(abeg[i] * cmDspSysSampleRate(h));
  912. int send = floor(aend[i] * cmDspSysSampleRate(h));
  913. //ain[i] = cmDspSysAllocAudioIn( h,i,1.0);
  914. af[i] = cmDspSysAllocInst(h,"WaveTable",NULL, 6, ((int)cmDspSysSampleRate(h)), 1, afn, -1, sbeg, send );
  915. //aout[i] = cmDspSysAllocAudioOut(h,i,1.0);
  916. ef[i] = cmDspSysAllocInst(h, "EnvFollow", NULL, 0 );
  917. sg[i] = cmDspSysAllocInst(h, "SigGen", NULL, 2, 1000.0, sgShapeId );
  918. cf[i] = cmDspSysAllocInst(h, "CombFilt", NULL, 5, cfBypassFl, cfMinHz, cfFbFl, cfMinHz, cfAlpha );
  919. mtr[i] = cmDspSysAllocInst( h, "Meter",label, 3, 0.0, 0.0, 1.0 );
  920. }
  921. // allocate the ch cfg last so that it's default outputs initialize connected objects
  922. cmDspInst_t* chCfg = cmDspSysAllocInst( h, "ChCfg", NULL, 1, chCfgFn );
  923. cmDspInst_t* mix = cmDspSysAllocInst( h, "AMix", NULL, 1, chCnt );
  924. cmDspSysNewColumn(h,50);
  925. for(i=0; i<chCnt; ++i)
  926. mute[i] = cmDspSysAllocCheck(h,"",0);
  927. // checkk for allocation errors
  928. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  929. goto errLabel;
  930. //
  931. //cmDspSysConnectAudioN1N1(h, ain, "out", aout, "in", chCnt );
  932. cmDspSysConnectAudio11N1(h, phs, "out", af, "phs", chCnt );
  933. cmDspSysConnectAudioN1N1(h, af, "out", ef, "in", chCnt ); // af -> EF
  934. cmDspSysConnectAudioN1N1(h, sg, "out", cf, "in", chCnt ); // sg -> CF
  935. cmDspSysConnectAudioN11N(h, cf, "out", mix, "in", chCnt ); // CF -> mix
  936. //cmDspSysInstallCb1NN1( h, chCfg, "gain", ain, "gain", chCnt ); // chCfg -> ain gain
  937. cmDspSysInstallCb1NN1( h, chCfg, "hz", cf, "hz", chCnt ); // chCfg -> CF Hz
  938. //cmDspSysInstallCbN1N1( h, ef, "rms", aout, "gain", chCnt ); // EF -> aout gain
  939. cmDspSysInstallCbN1N1( h, ef, "rms", mtr, "in", chCnt ); // EF -> meter RMS
  940. cmDspSysInstallCbN11N( h, ef, "rms", mix, "gain", chCnt );
  941. cmDspSysInstallCbN11N( h, mute, "out", mix, "mute", chCnt ); // mute -> mix
  942. }
  943. errLabel:
  944. cmFsFreeFn(chCfgPath);
  945. return rc;
  946. }
  947. cmDspRC_t _cmDspSysPgm_NoiseTails( cmDspSysH_t h, void** userPtrPtr )
  948. {
  949. cmDspRC_t rc = kOkDspRC;
  950. cmErr_t err;
  951. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  952. unsigned chCnt = 0;
  953. unsigned nsChCnt = 0;
  954. const cmChar_t* chCfgPath = NULL;
  955. const cmChar_t* chCfgFn = "pick_chs8.js";
  956. double cfMinHz = 20.0;
  957. double cfHz = 500;
  958. double cfAlpha = 0.9;
  959. bool cfFbFl = true;
  960. bool cfBypassFl= false;
  961. unsigned sgShapeId = 3;
  962. double dfltDelayMs = 100;
  963. unsigned i;
  964. cmErrSetup(&err,&cmCtx->rpt,"Noise Tails");
  965. // prepend the prefs directory to the ch. cfg filename
  966. chCfgPath = cmFsMakeFn(cmFsPrefsDir(),chCfgFn,NULL,NULL);
  967. // get the count of channels from the ch. cfg. array
  968. if(( chCnt = cmChCfgChannelCount(cmCtx,chCfgFn,&nsChCnt)) == 0 )
  969. {
  970. rc = cmErrMsg(&err,kPgmCfgFailDspRC,"Unable to obtain the channel count from '%s'.",cmStringNullGuard(chCfgFn));
  971. goto errLabel;
  972. }
  973. if( rc == kOkDspRC )
  974. {
  975. cmDspInst_t* ain[chCnt];
  976. cmDspInst_t* ef[chCnt];
  977. cmDspInst_t* cf[chCnt];
  978. cmDspInst_t* sg[chCnt];
  979. cmDspInst_t* mtr[chCnt];
  980. cmDspInst_t* add[chCnt];
  981. cmDspInst_t* mul[chCnt];
  982. cmDspInst_t* dly[chCnt];
  983. // allocate the audio inputs
  984. for(i=0; i<chCnt; ++i)
  985. {
  986. unsigned labelCharCnt = 31;
  987. cmChar_t label[labelCharCnt+1];
  988. snprintf(label,labelCharCnt,"%i",i);
  989. ain[i] = cmDspSysAllocAudioIn( h, i, 1.0);
  990. ef[i] = cmDspSysAllocInst( h, "EnvFollow", NULL, 0 );
  991. sg[i] = cmDspSysAllocInst( h, "SigGen", NULL, 2, 1000.0, sgShapeId );
  992. cf[i] = cmDspSysAllocInst( h, "CombFilt", NULL, 5, cfBypassFl, cfMinHz, cfFbFl, cfHz, cfAlpha );
  993. mtr[i] = cmDspSysAllocInst( h, "Meter",label, 3, 0.0, 0.0, 1.0 );
  994. add[i] = cmDspSysAllocInst( h, "ScalarOp", NULL, 6, 2, "+", "in-0", 0.0, "in-1", 0.0);
  995. mul[i] = cmDspSysAllocInst( h, "ScalarOp", NULL, 6, 2, "*", "in-0", 0.0, "in-1", 0.99);
  996. dly[i] = cmDspSysAllocInst( h, "MsgDelay", NULL, 2, 1000, dfltDelayMs );
  997. }
  998. // allocate the ch cfg last so that it's default outputs initialize connected objects
  999. cmDspInst_t* chCfg = cmDspSysAllocInst( h, "ChCfg", NULL, 1, chCfgFn );
  1000. cmDspInst_t* mix = cmDspSysAllocInst( h, "AMix", NULL, 1, chCnt );
  1001. cmDspInst_t* ao0 = cmDspSysAllocAudioOut( h, 0, 1.0 );
  1002. cmDspInst_t* ao1 = cmDspSysAllocAudioOut( h, 1, 1.0 );
  1003. cmDspInst_t* alpha = cmDspSysAllocScalar( h, "alpha", -1.0, 1.0, 0.001, cfAlpha );
  1004. cmDspInst_t* decay = cmDspSysAllocScalar( h, "decay", -1.0, 1.0, 0.001, 0.5);
  1005. cmDspInst_t* delay = cmDspSysAllocScalar( h, "delay", 0.0, 1000.0, 1.0, dfltDelayMs );
  1006. cmDspInst_t* zero = cmDspSysAllocScalar( h, "zero", 0.0, 0.0, 0.0, 0.0);
  1007. // check for allocation errors
  1008. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1009. goto errLabel;
  1010. cmDspSysConnectAudioN1N1( h, ain, "out", ef, "in", chCnt ); // ain -> EF
  1011. cmDspSysConnectAudioN1N1( h, sg, "out", cf, "in", chCnt ); // sg -> CF
  1012. cmDspSysConnectAudioN11N( h, cf, "out", mix, "in", chCnt ); // cf -> mix
  1013. cmDspSysConnectAudio( h, mix, "out", ao0, "in"); // mix -> aout L
  1014. cmDspSysConnectAudio( h, mix, "out", ao1, "in"); // mix -> aout R
  1015. cmDspSysInstallCb1NN1( h, chCfg, "gain", ain, "gain", chCnt ); // chCfg -> ain gain
  1016. cmDspSysInstallCb1NN1( h, chCfg, "hz", cf, "hz", chCnt ); // chCfg -> CF Hz
  1017. cmDspSysInstallCbN1N1( h, ef, "rms", add, "in-0", chCnt ); // EF -> mul 0
  1018. cmDspSysInstallCbN1N1( h, mul, "out", add, "in-1", chCnt ); // mul -> add
  1019. cmDspSysInstallCbN1N1( h, add, "out", dly, "in", chCnt ); // add -> delay
  1020. cmDspSysInstallCbN11N( h, dly, "out", mix, "gain", chCnt ); // delay -> mix gain
  1021. cmDspSysInstallCbN1N1( h, add, "out", mul, "in-0", chCnt); // add -> mul (feedback)
  1022. cmDspSysInstallCb11N1( h, decay, "val", mul, "in-1", chCnt ); // decay ctl
  1023. cmDspSysInstallCbN1N1( h, ef, "gate", mtr, "in", chCnt ); // EF -> meter RMS
  1024. cmDspSysInstallCb11N1( h, alpha, "val", cf, "alpha",chCnt ); // CF alpha
  1025. cmDspSysInstallCb11N1( h, delay, "val", dly, "delay",chCnt ); // Delay ctl
  1026. cmDspSysInstallCb111N( h, zero, "val", mix, "in", chCnt ); //
  1027. }
  1028. errLabel:
  1029. cmFsFreeFn(chCfgPath);
  1030. return rc;
  1031. }
  1032. cmDspRC_t _cmDspSysPgm_NoiseTails2( cmDspSysH_t h, void** userPtrPtr )
  1033. {
  1034. cmDspRC_t rc = kOkDspRC;
  1035. cmErr_t err;
  1036. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  1037. unsigned chCnt = 0;
  1038. unsigned nsChCnt = 0;
  1039. const cmChar_t* chCfgPath = NULL;
  1040. const cmChar_t* chCfgFn = "pick_chs8.js";
  1041. double cfMinHz = 20.0;
  1042. double cfHz = 500;
  1043. double cfAlpha = 0.9;
  1044. bool cfFbFl = true;
  1045. bool cfBypassFl = false;
  1046. unsigned sgShapeId = 3;
  1047. double adsrMaxMs = 10000;
  1048. double adsrMinMs = 0;
  1049. double adsrIncMs = 1;
  1050. double adsrMaxLevel = 100.0;
  1051. double adsrSusLevel = 100.0;
  1052. double adsrMinLevel = 0.0;
  1053. double adsrIncLevel = 0.001;
  1054. bool eqBypassFl = false;
  1055. unsigned eqModeSymId = cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"LP");
  1056. double eqF0hz = 250;
  1057. double eqQ = 1.0;
  1058. double eqFgain = 1.0;
  1059. bool mtBypassFl = false;
  1060. double mtTimeScale= 1.0;
  1061. double mtFeedback = 0.0;
  1062. unsigned i;
  1063. cmErrSetup(&err,&cmCtx->rpt,"Noise Tails");
  1064. // prepend the prefs directory to the ch. cfg filename
  1065. chCfgPath = cmFsMakeFn(cmFsPrefsDir(),chCfgFn,NULL,NULL);
  1066. // get the count of channels from the ch. cfg. array
  1067. if(( chCnt = cmChCfgChannelCount(cmCtx,chCfgFn,&nsChCnt)) == 0 )
  1068. {
  1069. rc = cmErrMsg(&err,kPgmCfgFailDspRC,"Unable to obtain the channel count from '%s'.",cmStringNullGuard(chCfgFn));
  1070. goto errLabel;
  1071. }
  1072. if( rc == kOkDspRC )
  1073. {
  1074. cmDspInst_t* ain[chCnt];
  1075. cmDspInst_t* ef[chCnt];
  1076. cmDspInst_t* cf[chCnt];
  1077. cmDspInst_t* sg[chCnt];
  1078. cmDspInst_t* mtr[chCnt];
  1079. cmDspInst_t* add[chCnt];
  1080. cmDspInst_t* mul[chCnt];
  1081. cmDspInst_t* env[chCnt];
  1082. cmDspInst_t* d2l[chCnt];
  1083. cmDspInst_t* eq[chCnt];
  1084. cmDspInst_t* mt[chCnt];
  1085. // allocate the audio inputs
  1086. for(i=0; i<chCnt; ++i)
  1087. {
  1088. unsigned labelCharCnt = 31;
  1089. cmChar_t label[labelCharCnt+1];
  1090. snprintf(label,labelCharCnt,"%i",i);
  1091. ain[i] = cmDspSysAllocAudioIn( h, i, 1.0);
  1092. ef[i] = cmDspSysAllocInst( h, "EnvFollow", NULL, 0 );
  1093. sg[i] = cmDspSysAllocInst( h, "SigGen", NULL, 2, 1000.0, sgShapeId );
  1094. cf[i] = cmDspSysAllocInst( h, "CombFilt", NULL, 5, cfBypassFl, cfMinHz, cfFbFl, cfHz, cfAlpha );
  1095. mtr[i] = cmDspSysAllocInst( h, "Meter",label, 3, 0.0, 0.0, 1.0 );
  1096. env[i] = cmDspSysAllocInst( h, "Adsr", NULL, 2, true, adsrMinLevel );
  1097. d2l[i] = cmDspSysAllocInst( h, "DbToLin", NULL, 0 );
  1098. add[i] = cmDspSysAllocInst( h, "ScalarOp", NULL, 6, 2, "+", "in-0", 0.0, "in-1", 0.0);
  1099. mul[i] = cmDspSysAllocInst( h, "ScalarOp", NULL, 6, 2, "*", "in-0", 0.0, "in-1", 0.99);
  1100. eq[i] = cmDspSysAllocInst( h, "BiQuadEq", NULL, 5, eqBypassFl, eqModeSymId, eqF0hz, eqQ, eqFgain );
  1101. mt[i] = cmDspSysAllocInst( h, "MtDelay", NULL, 9, mtBypassFl, mtTimeScale, mtFeedback, 20.0, 0.8, 15.0, 0.9, 12.0, 0.9 );
  1102. }
  1103. // allocate the ch cfg last so that it's default outputs initialize connected objects
  1104. cmDspInst_t* chCfg = cmDspSysAllocInst( h, "ChCfg", NULL, 1, chCfgFn );
  1105. cmDspInst_t* mix = cmDspSysAllocInst( h, "AMix", NULL, 1, chCnt );
  1106. cmDspInst_t* ao0 = cmDspSysAllocAudioOut( h, 0, 1.0 );
  1107. cmDspInst_t* ao1 = cmDspSysAllocAudioOut( h, 1, 1.0 );
  1108. cmDspInst_t* alpha = cmDspSysAllocScalar( h, "alpha", -1.0, 1.0, 0.001, cfAlpha );
  1109. cmDspInst_t* decay = cmDspSysAllocScalar( h, "decay", -1.0, 1.0, 0.001, 0.5);
  1110. cmDspInst_t* zero = cmDspSysAllocScalar( h, "zero", 0.0, 0.0, 0.0, 0.0);
  1111. // cmDspInst_t* print = cmDspSysAllocButton( h, "print", 0 );
  1112. cmDspSysNewColumn(h,200);
  1113. cmDspInst_t* dly = cmDspSysAllocScalar( h, "Dly Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 0.0);
  1114. cmDspInst_t* atk = cmDspSysAllocScalar( h, "Atk Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 2000.0);
  1115. cmDspInst_t* dcy = cmDspSysAllocScalar( h, "Dcy Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 100.0);
  1116. cmDspInst_t* hold = cmDspSysAllocScalar( h, "Hold Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 100.0);
  1117. cmDspInst_t* rls = cmDspSysAllocScalar( h, "Rls Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 4000.0);
  1118. cmDspInst_t* alvl = cmDspSysAllocScalar( h, "AdsrMax", adsrMinLevel,adsrMaxLevel,adsrIncLevel, adsrMaxLevel);
  1119. cmDspInst_t* sus = cmDspSysAllocScalar( h, "Sustain", adsrMinLevel,adsrMaxLevel,adsrIncLevel, adsrSusLevel );
  1120. cmDspSysNewColumn(h,200);
  1121. cmDspInst_t* onThr = cmDspSysAllocScalar(h,"On Thresh",-100.0,0.0,0.1,-55.0);
  1122. cmDspInst_t* offThr = cmDspSysAllocScalar(h,"Off Thresh",-100.0,0.0,0.1,-80.0);
  1123. cmDspInst_t* eqbyp = cmDspSysAllocCheck( h, "Eq Byp", 0 );
  1124. cmDspInst_t* eqmode = cmDspSysAllocInst( h, "MsgList","Mode", 1, "biQuadEqMode");
  1125. cmDspInst_t* eqq = cmDspSysAllocScalar( h, "Q", -100.0, 100.0, 0.1, eqQ);
  1126. cmDspInst_t* eqfgn = cmDspSysAllocScalar( h, "Filt Gain", 0.0, 1.0, 0.1, eqFgain);
  1127. cmDspInst_t* mtfb = cmDspSysAllocScalar( h, "Mt Feedback", 0.0, 1.0, 0.01, mtFeedback);
  1128. cmDspInst_t* mtscale= cmDspSysAllocScalar( h, "Mt Time Scale", 0.01, 10.0, 0.01, mtTimeScale);
  1129. // check for allocation errors
  1130. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1131. goto errLabel;
  1132. cmDspSysConnectAudioN1N1( h, ain, "out", ef, "in", chCnt ); // ain -> EF
  1133. cmDspSysConnectAudioN1N1( h, sg, "out", cf, "in", chCnt ); // sg -> CF
  1134. cmDspSysConnectAudioN1N1( h, cf, "out", eq, "in", chCnt );
  1135. cmDspSysConnectAudioN1N1( h, eq, "out", mt, "in", chCnt );
  1136. cmDspSysConnectAudioN11N( h, mt, "out", mix, "in", chCnt ); // cf -> mix
  1137. cmDspSysConnectAudio( h, mix, "out", ao0, "in"); // mix -> aout L
  1138. cmDspSysConnectAudio( h, mix, "out", ao1, "in"); // mix -> aout R
  1139. cmDspSysInstallCb1NN1( h, chCfg, "gain", ain, "gain", chCnt ); // chCfg -> ain gain
  1140. cmDspSysInstallCb1NN1( h, chCfg, "hz", cf, "hz", chCnt ); // chCfg -> CF Hz
  1141. cmDspSysInstallCb1NN1( h, chCfg, "hz", eq, "f0", chCnt ); // chCfg -> Eq Hz
  1142. cmDspSysInstallCbN1N1( h, mul, "out", add, "in-1", chCnt ); // mul -> add
  1143. cmDspSysInstallCbN1N1( h, ef, "gate", env, "gate", chCnt ); // EF -> adsr (gate)
  1144. cmDspSysInstallCbN1N1( h, ef, "rms", env, "rms", chCnt ); // EF ->adsr (rms)
  1145. //cmDspSysInstallCb11N1( h, print, "out", env, "cmd", chCnt );
  1146. cmDspSysInstallCbN1N1( h, env, "out", d2l, "in", chCnt );
  1147. cmDspSysInstallCbN11N( h, d2l, "out", mix, "gain", chCnt );
  1148. cmDspSysInstallCbN1N1( h, add, "out", mul, "in-0", chCnt ); // add -> mul (feedback)
  1149. cmDspSysInstallCb11N1( h, decay, "val", mul, "in-1", chCnt ); // decay ctl
  1150. cmDspSysInstallCbN1N1( h, ef, "gate", mtr, "in", chCnt ); // EF -> meter RMS
  1151. cmDspSysInstallCb11N1( h, alpha, "val", cf, "alpha",chCnt ); // CF alpha
  1152. cmDspSysInstallCb111N( h, zero, "val", mix, "in", chCnt ); //
  1153. cmDspSysInstallCb11N1( h, dly, "val", env, "dly", chCnt );
  1154. cmDspSysInstallCb11N1( h, atk, "val", env, "atk", chCnt );
  1155. cmDspSysInstallCb11N1( h, dcy, "val", env, "dcy", chCnt );
  1156. cmDspSysInstallCb11N1( h, hold, "val", env, "hold", chCnt );
  1157. cmDspSysInstallCb11N1( h, rls, "val", env, "rls", chCnt );
  1158. cmDspSysInstallCb11N1( h, alvl, "val", env, "alvl", chCnt );
  1159. cmDspSysInstallCb11N1( h, sus, "val", env, "sus", chCnt );
  1160. cmDspSysInstallCb11N1( h, onThr, "val", ef, "ondb", chCnt ); //
  1161. cmDspSysInstallCb11N1( h, offThr, "val", ef, "offdb", chCnt ); //
  1162. cmDspSysInstallCb11N1( h, eqbyp, "out", eq, "bypass", chCnt );
  1163. cmDspSysInstallCb11N1( h, eqmode, "mode", eq, "mode", chCnt );
  1164. cmDspSysInstallCb11N1( h, eqq, "val", eq, "Q", chCnt );
  1165. cmDspSysInstallCb11N1( h, eqfgn, "val", eq, "gain", chCnt );
  1166. cmDspSysInstallCb11N1( h, mtfb, "val", mt, "fb", chCnt );
  1167. cmDspSysInstallCb11N1( h, mtscale, "val", mt, "scale", chCnt );
  1168. }
  1169. errLabel:
  1170. cmFsFreeFn(chCfgPath);
  1171. return rc;
  1172. }
  1173. cmDspRC_t _cmDspSysPgm_CombFilt( cmDspSysH_t h, void** userPtrPtr )
  1174. {
  1175. cmDspRC_t rc = kOkDspRC;
  1176. double cfMinHz = 20.0;
  1177. double cfAlpha = 0.9;
  1178. bool cfFbFl = true;
  1179. bool cfBypassFl= false;
  1180. unsigned sgShapeId = 2;
  1181. cmDspInst_t* ao = cmDspSysAllocAudioOut( h, 0, 1.0 );
  1182. cmDspInst_t* sg = cmDspSysAllocInst( h, "SigGen", NULL, 2, 1000.0, sgShapeId );
  1183. cmDspInst_t* cf = cmDspSysAllocInst( h, "CombFilt", NULL, 5, cfBypassFl, cfMinHz, cfFbFl, cfMinHz, cfAlpha );
  1184. cmDspInst_t* hz = cmDspSysAllocScalar( h, "Hz", 25, 10000, 1, 1000 );
  1185. cmDspInst_t* a = cmDspSysAllocScalar( h, "Alpha", 0.0, 2.0, 0.001, cfAlpha);
  1186. // check for allocation errors
  1187. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1188. goto errLabel;
  1189. cmDspSysConnectAudio(h, sg, "out", cf, "in");
  1190. cmDspSysConnectAudio(h, cf, "out", ao, "in");
  1191. cmDspSysInstallCb( h, hz, "val", cf, "hz", NULL);
  1192. cmDspSysInstallCb( h, a, "val", cf, "alpha", NULL);
  1193. errLabel:
  1194. return rc;
  1195. }
  1196. cmDspRC_t _cmDspSysPgm_ScalarOp( cmDspSysH_t h, void** userPtrPtr )
  1197. {
  1198. cmDspRC_t rc;
  1199. cmDspInst_t* add = cmDspSysAllocInst( h, "ScalarOp", NULL, 6, 2, "+", "in-0", 0.0, "in-1", 0.0 );
  1200. cmDspInst_t* mul0 = cmDspSysAllocInst( h, "ScalarOp", NULL, 6, 2, "*", "in-0", 0.0, "in-1", 0.0 );
  1201. cmDspInst_t* mul1 = cmDspSysAllocInst( h, "ScalarOp", NULL, 6, 2, "*", "in-0", 0.0, "in-1", 0.0 );
  1202. cmDspInst_t* in = cmDspSysAllocScalar( h, "Input", 0.0, 10.0, 0.001, 0.0);
  1203. cmDspInst_t* in_m = cmDspSysAllocScalar( h, "Input_M", 0.0, 10.0, 0.001, 0.0);
  1204. cmDspInst_t* fb = cmDspSysAllocScalar( h, "Feedback", 0.0, 10.0, 0.001, 0.0);
  1205. cmDspInst_t* fb_m = cmDspSysAllocScalar( h, "Feedback_M", 0.0, 10.0, 0.001, 0.0);
  1206. cmDspInst_t* out = cmDspSysAllocScalar( h, "Out", 0.0, 10.0, 0.001, 0.0);
  1207. // check for allocation errors
  1208. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1209. goto errLabel;
  1210. cmDspSysInstallCb( h, in, "val", mul0, "in-0", NULL );
  1211. cmDspSysInstallCb( h, in_m, "val", mul0, "in-1", NULL );
  1212. cmDspSysInstallCb( h, fb, "val", mul1, "in-0", NULL );
  1213. cmDspSysInstallCb( h, fb_m, "val", mul1, "in-1", NULL );
  1214. cmDspSysInstallCb( h, mul0, "out", add, "in-0", NULL );
  1215. cmDspSysInstallCb( h, mul1, "out", add, "in-1", NULL );
  1216. cmDspSysInstallCb( h, add, "out", fb, "val", NULL );
  1217. cmDspSysInstallCb( h, add, "out", out, "val", NULL );
  1218. errLabel:
  1219. return rc;
  1220. }
  1221. cmDspRC_t _cmDspSysPgm_RingMod( cmDspSysH_t h, void** userPtrPtr )
  1222. {
  1223. cmDspRC_t rc = kOkDspRC;
  1224. cmErr_t err;
  1225. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  1226. unsigned chCnt = 0;
  1227. unsigned nsChCnt = 0;
  1228. const cmChar_t* chCfgPath = NULL;
  1229. const cmChar_t* chCfgFn = "pick_chs8.js";
  1230. unsigned groupCnt = 3;
  1231. unsigned chsPerGroup = 2;
  1232. cmReal_t fadeTimeMs = 25;
  1233. unsigned i,j,k;
  1234. cmErrSetup(&err,&cmCtx->rpt,"Pickup Effects");
  1235. // prepend the prefs directory to the ch. cfg filename
  1236. chCfgPath = cmFsMakeFn(cmFsPrefsDir(),chCfgFn,NULL,NULL);
  1237. // get the count of channels from the ch. cfg. array
  1238. if(( chCnt = cmChCfgChannelCount(cmCtx,chCfgFn,&nsChCnt)) == 0 )
  1239. {
  1240. rc = cmErrMsg(&err,kPgmCfgFailDspRC,"Unable to obtain the channel count from '%s'.",cmStringNullGuard(chCfgFn));
  1241. goto errLabel;
  1242. }
  1243. if( rc == kOkDspRC )
  1244. {
  1245. cmDspInst_t* ain[chCnt];
  1246. cmDspInst_t* ef[chCnt];
  1247. cmDspInst_t* mtr[chCnt];
  1248. cmDspInst_t* nom[groupCnt];
  1249. cmDspInst_t* rm[groupCnt];
  1250. cmDspInst_t* nm_mtr[groupCnt*chsPerGroup];
  1251. unsigned labelCharCnt = 31;
  1252. cmChar_t label[labelCharCnt+1];
  1253. // allocate the audio inputs and envelope followers
  1254. for(i=0; i<chCnt; ++i)
  1255. {
  1256. snprintf(label,labelCharCnt,"%i",i);
  1257. ain[i] = cmDspSysAllocAudioIn( h, i, 1.0);
  1258. ef[i] = cmDspSysAllocInst( h, "EnvFollow", NULL, 0 );
  1259. mtr[i] = cmDspSysAllocInst( h, "Meter", label, 3, 0.0, 0.0, 1.0 );
  1260. }
  1261. cmDspInst_t* gs = cmDspSysAllocInst( h, "GroupSel", NULL, 3, chCnt, groupCnt, chsPerGroup );
  1262. for(i=0; i<groupCnt; ++i)
  1263. {
  1264. nom[i] = cmDspSysAllocInst(h, "AudioNofM", NULL, 3, chCnt, chsPerGroup, fadeTimeMs );
  1265. rm[i] = cmDspSysAllocInst(h, "RingMod", NULL, 1, chsPerGroup );
  1266. }
  1267. for(i=0,k=0; i<groupCnt; ++i)
  1268. {
  1269. cmDspSysNewColumn(h,50);
  1270. snprintf(label,labelCharCnt,"%i",i);
  1271. cmDspSysAllocLabel(h,label,kLeftAlignDuiId );
  1272. for(j=0; j<chsPerGroup; ++j,++k)
  1273. {
  1274. snprintf(label,labelCharCnt,"%i",j);
  1275. nm_mtr[k] = cmDspSysAllocInst(h, "Meter", label, 3, 0.0, 0.0, 1.0 );
  1276. }
  1277. }
  1278. assert(k==groupCnt*chsPerGroup);
  1279. // allocate the ch cfg last so that it's default outputs initialize connected objects
  1280. //cmDspInst_t* chCfg = cmDspSysAllocInst( h, "ChCfg", NULL, 1, chCfgFn );
  1281. cmDspInst_t* mix = cmDspSysAllocInst( h, "AMix", NULL, 1, groupCnt );
  1282. cmDspInst_t* ao0 = cmDspSysAllocAudioOut( h, 0, 1.0 );
  1283. cmDspInst_t* ao1 = cmDspSysAllocAudioOut( h, 1, 1.0 );
  1284. // check for allocation errors
  1285. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1286. goto errLabel;
  1287. cmDspSysConnectAudioN1N1( h, ain, "out", ef, "in", chCnt ); // ain -> EF
  1288. for(i=0; i<groupCnt; ++i)
  1289. {
  1290. cmDspSysConnectAudioN11N( h, ain, "out", nom[i], "in", chCnt );
  1291. cmDspSysConnectAudio1N1N( h, nom[i], "out", rm[i], "in", chsPerGroup);
  1292. snprintf(label,labelCharCnt,"gate-%i",i);
  1293. cmDspSysInstallCb1N1N( h, gs, label, nom[i], "gate", chCnt );
  1294. cmDspSysInstallCb1NN1( h, nom[i], "gain", nm_mtr + i * chsPerGroup, "in", chsPerGroup);
  1295. }
  1296. cmDspSysConnectAudioN11N( h, rm, "out", mix, "in", groupCnt );
  1297. cmDspSysConnectAudio( h, mix, "out", ao0, "in"); // mix -> aout L
  1298. cmDspSysConnectAudio( h, mix, "out", ao1, "in"); // mix -> aout R
  1299. cmDspSysInstallCbN11N( h, ef, "gate", gs, "gate", chCnt ); // EF -> grp_sel gate
  1300. cmDspSysInstallCbN11N( h, ef, "rms", gs, "rms", chCnt ); // EF -> grp_sel RMS
  1301. cmDspSysInstallCbN1N1( h, ef, "gate", mtr, "in", chCnt );
  1302. }
  1303. errLabel:
  1304. cmFsFreeFn(chCfgPath);
  1305. return rc;
  1306. }
  1307. cmDspRC_t _cmDspSysPgm_RingMod2( cmDspSysH_t h, void** userPtrPtr )
  1308. {
  1309. cmDspRC_t rc = kOkDspRC;
  1310. cmErr_t err;
  1311. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  1312. unsigned iChCnt = 0;
  1313. unsigned oChCnt = 0;
  1314. unsigned nsChCnt = 0;
  1315. const cmChar_t* chCfgPath = NULL;
  1316. const cmChar_t* chCfgFn = "pick_chs8.js";
  1317. unsigned i;
  1318. cmErrSetup(&err,&cmCtx->rpt,"Pickup Effects");
  1319. // prepend the prefs directory to the ch. cfg filename
  1320. chCfgPath = cmFsMakeFn(cmFsPrefsDir(),chCfgFn,NULL,NULL);
  1321. // get the count of channels from the ch. cfg. array
  1322. if(( iChCnt = cmChCfgChannelCount(cmCtx,chCfgFn,&nsChCnt)) == 0 )
  1323. {
  1324. rc = cmErrMsg(&err,kPgmCfgFailDspRC,"Unable to obtain the channel count from '%s'.",cmStringNullGuard(chCfgFn));
  1325. goto errLabel;
  1326. }
  1327. if( rc == kOkDspRC && iChCnt > 0 )
  1328. {
  1329. if( iChCnt % 2 )
  1330. iChCnt -= 1;
  1331. oChCnt = iChCnt/2;
  1332. cmDspInst_t* ain[iChCnt];
  1333. cmDspInst_t* ef[iChCnt];
  1334. cmDspInst_t* mtr[iChCnt];
  1335. cmDspInst_t* rm[oChCnt];
  1336. unsigned labelCharCnt = 31;
  1337. cmChar_t label[labelCharCnt+1];
  1338. // allocate the audio inputs and envelope followers
  1339. for(i=0; i<iChCnt; ++i)
  1340. {
  1341. snprintf(label,labelCharCnt,"%i",i);
  1342. ain[i] = cmDspSysAllocAudioIn( h, i, 1.0);
  1343. ef[i] = cmDspSysAllocInst( h, "EnvFollow", NULL, 0 );
  1344. mtr[i] = cmDspSysAllocInst( h, "Meter", label, 3, 0.0, 0.0, 1.0 );
  1345. }
  1346. for(i=0; i<oChCnt; ++i)
  1347. {
  1348. rm[i] = cmDspSysAllocInst( h, "RingMod", NULL, 1, 2 );
  1349. }
  1350. cmDspInst_t* gain = cmDspSysAllocScalar( h, "RM Gain", 0.0, 10.0, 0.001, 1.0);
  1351. cmDspInst_t* mix = cmDspSysAllocInst( h, "AMix", NULL, 1, oChCnt );
  1352. cmDspInst_t* ao0 = cmDspSysAllocAudioOut( h, 0, 1.0 );
  1353. cmDspInst_t* ao1 = cmDspSysAllocAudioOut( h, 1, 1.0 );
  1354. // check for allocation errors
  1355. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1356. goto errLabel;
  1357. cmDspSysConnectAudioN1N1( h, ain, "out", ef, "in", iChCnt ); // ain -> EF
  1358. cmDspSysInstallCbN1N1( h, ef, "gate", mtr, "in", iChCnt ); // EF -> mtr (gate)
  1359. for(i=0; i<oChCnt; ++i)
  1360. {
  1361. cmDspSysConnectAudio( h, ain[i*2+0], "out", rm[i], "in-0"); // ain -> rm 0
  1362. cmDspSysConnectAudio( h, ain[i*2+1], "out", rm[i], "in-1"); // ain -> rm 1
  1363. snprintf(label,labelCharCnt,"in-%i",i);
  1364. cmDspSysConnectAudio( h, rm[i], "out", mix, label); // rm -> mix
  1365. cmDspSysInstallCb(h, gain, "val", rm[i], "gain", NULL ); // gain -> rm gain
  1366. }
  1367. cmDspSysConnectAudio( h, mix, "out", ao0, "in"); // mix -> aout L
  1368. cmDspSysConnectAudio( h, mix, "out", ao1, "in"); // mix -> aout R
  1369. }
  1370. errLabel:
  1371. cmFsFreeFn(chCfgPath);
  1372. return rc;
  1373. }
  1374. cmDspRC_t _cmDspSysPgm_MsgDelay( cmDspSysH_t h, void** userPtrPtr )
  1375. {
  1376. cmDspRC_t rc = kOkDspRC;
  1377. double dfltDelayTimeMs = 100.0;
  1378. double maxDelayTimeMs = 10000.0;
  1379. cmDspInst_t* ctl = cmDspSysAllocScalar( h, "Delay", 0.0, maxDelayTimeMs, 1.0, dfltDelayTimeMs );
  1380. cmDspInst_t* dly = cmDspSysAllocInst( h, "MsgDelay", NULL, 2, 1000, dfltDelayTimeMs );
  1381. cmDspInst_t* print = cmDspSysAllocInst( h, "Printer", NULL, 1, ">");
  1382. if( (rc = cmDspSysLastRC(h)) != kOkDspRC )
  1383. return rc;
  1384. cmDspSysInstallCb( h, ctl, "val", dly, "delay", NULL );
  1385. cmDspSysInstallCb( h, ctl, "val", dly, "in", NULL );
  1386. cmDspSysInstallCb( h, dly, "out", print, "in", NULL );
  1387. return rc;
  1388. }
  1389. cmDspRC_t _cmDspSysPgm_Adsr( cmDspSysH_t h, void** userPtrPtr )
  1390. {
  1391. cmDspRC_t rc;
  1392. bool trigModeFl = true;
  1393. double adsrMaxMs = 5000;
  1394. double adsrMinMs = 0;
  1395. double adsrIncMs = 1;
  1396. double adsrMaxLevel = 100.0; //1.0;
  1397. double adsrSusLevel = 80.0; //0.8;
  1398. double adsrMinLevel = 0.0; //0.0;
  1399. double adsrIncLevel = 0.001;
  1400. const cmChar_t* fn = "/home/kevin/temp/adsr1.bin";
  1401. cmDspInst_t* adsr = cmDspSysAllocInst(h, "Adsr", NULL, 2, trigModeFl, adsrMinLevel );
  1402. cmDspInst_t* chck = cmDspSysAllocCheck(h,"Gate",0);
  1403. cmDspInst_t* mtr = cmDspSysAllocInst(h,"Meter","Out", 3, adsrMinLevel, adsrMinLevel, adsrMaxLevel );
  1404. cmDspInst_t* bmf = cmDspSysAllocInst(h,"BinMtxFile", NULL, 2, 1, fn );
  1405. cmDspInst_t* dly = cmDspSysAllocScalar( h, "Dly Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 0.0);
  1406. cmDspInst_t* atk = cmDspSysAllocScalar( h, "Atk Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 1000.0);
  1407. cmDspInst_t* dcy = cmDspSysAllocScalar( h, "Dcy Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 300.0);
  1408. cmDspInst_t* hold = cmDspSysAllocScalar( h, "Hold Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 500.0);
  1409. cmDspInst_t* rls = cmDspSysAllocScalar( h, "Rls Ms", adsrMinMs, adsrMaxMs, adsrIncMs, 1000.0);
  1410. cmDspInst_t* alvl = cmDspSysAllocScalar( h, "AdsrMax", adsrMinLevel,adsrMaxLevel,adsrIncLevel, adsrMaxLevel);
  1411. cmDspInst_t* sus = cmDspSysAllocScalar( h, "Sustain", adsrMinLevel,adsrMaxLevel,adsrIncLevel, adsrSusLevel);
  1412. // check for allocation errors
  1413. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1414. goto errLabel;
  1415. cmDspSysInstallCb( h, dly, "val", adsr, "dly", NULL );
  1416. cmDspSysInstallCb( h, atk, "val", adsr, "atk", NULL );
  1417. cmDspSysInstallCb( h, dcy, "val", adsr, "dcy", NULL );
  1418. cmDspSysInstallCb( h, hold, "val", adsr, "hold", NULL );
  1419. cmDspSysInstallCb( h, rls, "val", adsr, "rls", NULL );
  1420. cmDspSysInstallCb( h, alvl, "val", adsr, "alvl", NULL );
  1421. cmDspSysInstallCb( h, sus, "val", adsr, "sus", NULL );
  1422. cmDspSysInstallCb( h, chck, "out", adsr, "gate", NULL );
  1423. cmDspSysInstallCb( h, adsr, "out", mtr, "in", NULL );
  1424. cmDspSysInstallCb( h, adsr, "out", bmf, "in", NULL );
  1425. errLabel:
  1426. return rc;
  1427. }
  1428. cmDspRC_t _cmDspSysPgm_Compressor( cmDspSysH_t h, void** userPtrPtr )
  1429. {
  1430. cmDspRC_t rc;
  1431. const cmChar_t* ofn = "/home/kevin/temp/adsr0.bin";
  1432. const char* afn0 = "media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  1433. int beg = 6900826;
  1434. int end = 13512262;
  1435. const cmChar_t* afn = cmFsMakeFn(cmFsUserDir(),afn0,NULL,NULL );
  1436. bool bypassFl = false;
  1437. double inGain = 1.0;
  1438. double threshDb = -40.0;
  1439. double ratio_num = 4.0;
  1440. double atkMs = 100.0;
  1441. double rlsMs = 100.0;
  1442. double makeup = 1.0;
  1443. double wndMaxMs = 1000.0;
  1444. double wndMs = 200.0;
  1445. cmDspInst_t* off = cmDspSysAllocInst(h,"Scalar", "Offset", 5, kNumberDuiId, 0.0, cmDspSysSampleRate(h)*600.0, 1.0, 0.0);
  1446. cmDspInst_t* phs = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  1447. cmDspInst_t* wt = cmDspSysAllocInst(h,"WaveTable",NULL, 6, ((int)cmDspSysSampleRate(h)), 1, afn, -1, beg, end );
  1448. cmDspInst_t* cmp = cmDspSysAllocInst(h,"Compressor",NULL, 8, bypassFl, threshDb, ratio_num, atkMs, rlsMs, makeup, wndMs, wndMaxMs );
  1449. cmDspInst_t* ao0 = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 0 );
  1450. cmDspInst_t* ao1 = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 1 );
  1451. cmDspInst_t* bmf = cmDspSysAllocInst(h,"BinMtxFile", NULL, 2, 1, ofn );
  1452. cmDspInst_t* mtr = cmDspSysAllocInst(h,"Meter","Env", 3, 0.0, 0.0, 1.0);
  1453. cmDspInst_t* igain = cmDspSysAllocScalar( h, "In Gain", 0.0, 10.0, 0.1, inGain);
  1454. cmDspInst_t* thr = cmDspSysAllocScalar( h, "ThreshDb", -100.0, 0.0, 0.1, threshDb);
  1455. cmDspInst_t* rat = cmDspSysAllocScalar( h, "Ratio", 0.1, 100, 0.1, ratio_num);
  1456. cmDspInst_t* atk = cmDspSysAllocScalar( h, "Atk Ms", 0.0, 1000.0, 0.1, atkMs);
  1457. cmDspInst_t* rls = cmDspSysAllocScalar( h, "Rls Ms", 0.0, 1000.0, 0.1, rlsMs);
  1458. cmDspInst_t* mkup = cmDspSysAllocScalar( h, "Makeup", 0.0, 10.0, 0.01, makeup);
  1459. cmDspInst_t* wnd = cmDspSysAllocScalar( h, "Wnd Ms", 1.0, wndMaxMs, 1.0, wndMs );
  1460. // check for allocation errors
  1461. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1462. goto errLabel;
  1463. cmDspSysConnectAudio(h, phs, "out", wt, "phs" ); // phasor -> wave table
  1464. cmDspSysConnectAudio(h, wt, "out", cmp, "in" ); // wave table -> cmp in
  1465. cmDspSysConnectAudio(h, cmp, "out", ao0, "in" ); // comp -> aout
  1466. cmDspSysConnectAudio(h, cmp, "out", ao1, "in" ); //
  1467. cmDspSysInstallCb(h, off, "val", wt, "beg", NULL );
  1468. cmDspSysInstallCb(h, igain,"val", cmp, "igain", NULL );
  1469. cmDspSysInstallCb(h, thr, "val", cmp, "thr", NULL );
  1470. cmDspSysInstallCb(h, rat, "val", cmp, "ratio", NULL );
  1471. cmDspSysInstallCb(h, atk, "val", cmp, "atk", NULL );
  1472. cmDspSysInstallCb(h, rls, "val", cmp, "rls", NULL );
  1473. cmDspSysInstallCb(h, mkup, "val", cmp, "ogain", NULL );
  1474. cmDspSysInstallCb(h, wnd, "val", cmp, "wnd", NULL );
  1475. cmDspSysInstallCb(h, cmp, "env", bmf, "in", NULL );
  1476. cmDspSysInstallCb(h, cmp, "env", mtr, "in", NULL );
  1477. errLabel:
  1478. return rc;
  1479. }
  1480. cmDspRC_t _cmDspSysPgm_BiQuadEq( cmDspSysH_t h, void** userPtrPtr )
  1481. {
  1482. cmDspRC_t rc = kOkDspRC;
  1483. const char* afn0 = "media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  1484. int beg = 6900826;
  1485. int end = 13512262;
  1486. const cmChar_t* afn = cmFsMakeFn(cmFsUserDir(),afn0,NULL,NULL );
  1487. bool bypassFl = false;
  1488. unsigned modeSymId = cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"LP");
  1489. double f0hz = 264.0;
  1490. double Q = 1.0;
  1491. double fgain = 1.0;
  1492. cmDspInst_t* off = cmDspSysAllocInst(h,"Scalar", "Offset", 5, kNumberDuiId, 0.0, cmDspSysSampleRate(h)*600.0, 1.0, 0.0);
  1493. cmDspInst_t* phs = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  1494. cmDspInst_t* wt = cmDspSysAllocInst(h,"WaveTable",NULL, 6, ((int)cmDspSysSampleRate(h)), 1, afn, -1, beg, end );
  1495. cmDspInst_t* flt = cmDspSysAllocInst(h,"BiQuadEq",NULL, 5, bypassFl, modeSymId,f0hz, Q, fgain );
  1496. cmDspInst_t* ao0 = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 0 );
  1497. cmDspInst_t* ao1 = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 1 );
  1498. cmDspInst_t* mode = cmDspSysAllocInst( h, "MsgList","Mode", 1, "biQuadEqMode");
  1499. cmDspInst_t* fhz = cmDspSysAllocScalar( h, "Fc Hz", 0.0, 15000.0, 0.1, f0hz);
  1500. cmDspInst_t* q = cmDspSysAllocScalar( h, "Q", -100.0, 100, 0.1, Q);
  1501. cmDspInst_t* fgn = cmDspSysAllocScalar( h, "Filt Gain", 0.0, 1.0, 0.1, fgain);
  1502. // check for allocation errors
  1503. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1504. goto errLabel;
  1505. cmDspSysConnectAudio(h, phs, "out", wt, "phs" ); // phasor -> wave table
  1506. cmDspSysConnectAudio(h, wt, "out", flt, "in" ); // wave table -> cmp in
  1507. cmDspSysConnectAudio(h, flt, "out", ao0, "in" ); // filter -> aout
  1508. cmDspSysConnectAudio(h, flt, "out", ao1, "in" ); //
  1509. cmDspSysInstallCb(h, off, "val", wt, "beg", NULL );
  1510. cmDspSysInstallCb(h, mode,"mode",flt, "mode", NULL );
  1511. cmDspSysInstallCb(h, fhz, "val", flt, "f0", NULL );
  1512. cmDspSysInstallCb(h, q, "val", flt, "Q", NULL );
  1513. cmDspSysInstallCb(h, fgn, "val", flt, "gain", NULL );
  1514. errLabel:
  1515. return rc;
  1516. }
  1517. cmDspRC_t _cmDspSysPgm_DistDs( cmDspSysH_t h, void** userPtrPtr )
  1518. {
  1519. cmDspRC_t rc = kOkDspRC;
  1520. const char* afn0 = "media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  1521. int beg = 6900826;
  1522. int end = 13512262;
  1523. const cmChar_t* afn = cmFsMakeFn(cmFsUserDir(),afn0,NULL,NULL );
  1524. bool bypassFl = false;
  1525. double inGain = 1.0;
  1526. double dsrate = 44100.0;
  1527. double bits = 24.0;
  1528. bool rectifyFl = false;
  1529. bool fullRectFl = false;
  1530. double clipDb = -10.0;
  1531. cmDspInst_t* off = cmDspSysAllocInst(h,"Scalar", "Offset", 5, kNumberDuiId, 0.0, cmDspSysSampleRate(h)*600.0, 1.0, 0.0);
  1532. cmDspInst_t* phs = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  1533. cmDspInst_t* wt = cmDspSysAllocInst(h,"WaveTable",NULL, 6, ((int)cmDspSysSampleRate(h)), 1, afn, -1, beg, end );
  1534. cmDspInst_t* dst = cmDspSysAllocInst(h,"DistDs",NULL, 3, bypassFl, inGain, dsrate, bits );
  1535. cmDspInst_t* ao0 = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 0 );
  1536. cmDspInst_t* ao1 = cmDspSysAllocInst(h,"AudioOut",NULL, 1, 1 );
  1537. cmDspInst_t* ign = cmDspSysAllocScalar( h, "In Gain", 0.0, 10.0, 0.01, 1.0);
  1538. cmDspInst_t* rct = cmDspSysAllocCheck( h, "Rectify", rectifyFl);
  1539. cmDspInst_t* ful = cmDspSysAllocCheck( h, "Full/Half", fullRectFl);
  1540. cmDspInst_t* dsr = cmDspSysAllocScalar( h, "Srate", 0.0, 96000, 1.0, dsrate);
  1541. cmDspInst_t* dbt = cmDspSysAllocScalar( h, "bits", 2.0, 32.0, 1.0, bits);
  1542. cmDspInst_t* clip = cmDspSysAllocScalar( h, "Clip dB", -100.0, 0.0, 0.1, clipDb);
  1543. cmDspInst_t* ogn = cmDspSysAllocScalar( h, "Out Gain", 0.0, 10.0, 0.01, 1.0);
  1544. // check for allocation errors
  1545. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1546. goto errLabel;
  1547. cmDspSysConnectAudio(h, phs, "out", wt, "phs" ); // phasor -> wave table
  1548. cmDspSysConnectAudio(h, wt, "out", dst, "in" ); // wave table -> cmp in
  1549. cmDspSysConnectAudio(h, dst, "out", ao0, "in" ); // filter -> aout
  1550. cmDspSysConnectAudio(h, dst, "out", ao1, "in" ); //
  1551. cmDspSysInstallCb(h, off, "val", wt, "beg", NULL );
  1552. cmDspSysInstallCb(h, ign, "val", dst, "igain", NULL );
  1553. cmDspSysInstallCb(h, dsr, "val", dst, "srate", NULL );
  1554. cmDspSysInstallCb(h, dbt, "val", dst, "bits", NULL );
  1555. cmDspSysInstallCb(h, rct, "out", dst, "rect", NULL );
  1556. cmDspSysInstallCb(h, ful, "out", dst, "full", NULL );
  1557. cmDspSysInstallCb(h, clip, "val", dst, "clip", NULL );
  1558. cmDspSysInstallCb(h, ogn, "val", dst, "ogain", NULL );
  1559. errLabel:
  1560. return rc;
  1561. }
  1562. cmDspRC_t _cmDspSysPgm_Seq( cmDspSysH_t h, void** userPtrPtr )
  1563. {
  1564. cmDspRC_t rc;
  1565. double min = 1.0;
  1566. double max = 10.0;
  1567. double incr = 1.0;
  1568. cmDspInst_t* btn = cmDspSysAllocButton( h, "smack", 0);
  1569. cmDspInst_t* cnt = cmDspSysAllocInst( h, "Counter", NULL, 3, min, max, incr );
  1570. cmDspInst_t* lst = cmDspSysAllocInst( h, "MsgList","Seq", 1, "seqTest");
  1571. cmDspInst_t* prt = cmDspSysAllocInst( h, "Printer", NULL, 1, ">");
  1572. cmDspSysInstallCb(h, lst, "cnt", cnt, "max", NULL );
  1573. cmDspSysInstallCb(h, btn, "out", cnt, "next", NULL );
  1574. cmDspSysInstallCb(h, cnt, "out", lst, "sel", NULL );
  1575. cmDspSysInstallCb(h, lst, "midi", prt, "in", NULL );
  1576. // check for allocation errors
  1577. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1578. goto errLabel;
  1579. errLabel:
  1580. return rc;
  1581. }
  1582. cmDspRC_t _cmDspSysPgm_ThunkNet( cmDspSysH_t h, void** userPtrPtr )
  1583. {
  1584. cmDspRC_t rc;
  1585. cmDspInst_t* add = cmDspSysAllocInst( h, "ScalarOp", "adder-0", 6, 2, "+", "in-0", 0.0, "in-1", 0.0 );
  1586. cmDspInst_t* in = cmDspSysAllocScalar( h, "Input", 0.0, 10.0, 0.001, 0.0);
  1587. cmDspInst_t* out = cmDspSysAllocScalar( h, "Out", 0.0, 10.0, 0.001, 0.0);
  1588. // check for allocation errors
  1589. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1590. goto errLabel;
  1591. cmDspSysInstallCb( h, in, "val", add, "in-1", NULL );
  1592. cmDspSysInstallCb( h, add, "out", out, "val", NULL );
  1593. errLabel:
  1594. return rc;
  1595. }
  1596. cmDspRC_t _cmDspSysPgm_WhirlNet( cmDspSysH_t h, void** userPtrPtr )
  1597. {
  1598. cmDspRC_t rc;
  1599. cmDspInst_t* in = cmDspSysAllocScalar( h, "Input", 0.0, 10.0, 0.001, 0.0);
  1600. // check for allocation errors
  1601. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1602. goto errLabel;
  1603. cmDspSysInstallNetCb( h, in, "val", "thunk", "adder-0", "in-0" );
  1604. errLabel:
  1605. return rc;
  1606. }
  1607. cmDspRC_t _cmDspSysPgm_NofM( cmDspSysH_t h, void** userPtrPtr )
  1608. {
  1609. cmDspRC_t rc;
  1610. unsigned iChCnt = 3;
  1611. unsigned oChCnt = 2;
  1612. unsigned sgShapeId = 0;
  1613. double sgGain = 0.4;
  1614. double xfadeMs = 1000;
  1615. cmDspInst_t* onBtn = cmDspSysAllocButton( h, "on", 0 );
  1616. cmDspInst_t* offBtn = cmDspSysAllocButton(h, "off", 0 );
  1617. cmDspInst_t* sg0 = cmDspSysAllocInst( h, "SigGen", NULL, 3, 500.0, sgShapeId, sgGain );
  1618. cmDspInst_t* sg1 = cmDspSysAllocInst( h, "SigGen", NULL, 3, 1000.0, sgShapeId, sgGain );
  1619. cmDspInst_t* sg2 = cmDspSysAllocInst( h, "SigGen", NULL, 3, 2000.0, sgShapeId, sgGain );
  1620. cmDspInst_t* nom = cmDspSysAllocInst( h,"NofM", NULL, 3, iChCnt, oChCnt, xfadeMs );
  1621. cmDspInst_t* mix = cmDspSysAllocInst( h, "AMix", NULL, 1, oChCnt );
  1622. cmDspInst_t* ao = cmDspSysAllocAudioOut(h, 0, 1.0 );
  1623. cmDspInst_t* btn = cmDspSysAllocButton( h, "cfg", 0);
  1624. cmDspInst_t* sel0 = cmDspSysAllocCheck(h,"Sel-0",0);
  1625. cmDspInst_t* sel1 = cmDspSysAllocCheck(h,"Sel-1",0);
  1626. cmDspInst_t* sel2 = cmDspSysAllocCheck(h,"Sel-2",0);
  1627. cmDspInst_t* in0 = cmDspSysAllocScalar( h, "In-0", 0.0, 10.0, 0.001, 0.0);
  1628. cmDspInst_t* in1 = cmDspSysAllocScalar( h, "In-1", 0.0, 10.0, 0.001, 0.0);
  1629. cmDspInst_t* in2 = cmDspSysAllocScalar( h, "In-2", 0.0, 10.0, 0.001, 0.0);
  1630. cmDspInst_t* out0 = cmDspSysAllocScalar( h, "Out-0", 0.0, 10.0, 0.001, 0.0);
  1631. cmDspInst_t* out1 = cmDspSysAllocScalar( h, "Out-1", 0.0, 10.0, 0.001, 0.0);
  1632. // check for allocation errors
  1633. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1634. goto errLabel;
  1635. cmDspSysConnectAudio( h, sg0, "out", nom, "a-in-0" );
  1636. cmDspSysConnectAudio( h, sg1, "out", nom, "a-in-1" );
  1637. cmDspSysConnectAudio( h, sg2, "out", nom, "a-in-2" );
  1638. cmDspSysConnectAudio( h, nom, "a-out-0", mix, "in-0" );
  1639. cmDspSysConnectAudio( h, nom, "a-out-1", mix, "in-1" );
  1640. cmDspSysConnectAudio( h, mix, "out", ao, "in" );
  1641. cmDspSysInstallCb( h, btn, "sym", nom, "cmd", NULL );
  1642. cmDspSysInstallCb( h, sel0, "out", nom, "sel-0", NULL );
  1643. cmDspSysInstallCb( h, sel1, "out", nom, "sel-1", NULL );
  1644. cmDspSysInstallCb( h, sel2, "out", nom, "sel-2", NULL );
  1645. cmDspSysInstallCb( h, in0, "val", nom, "f-in-0", NULL );
  1646. cmDspSysInstallCb( h, in1, "val", nom, "f-in-1", NULL );
  1647. cmDspSysInstallCb( h, in2, "val", nom, "f-in-2", NULL );
  1648. cmDspSysInstallCb( h, nom, "f-out-0", out0, "val", NULL );
  1649. cmDspSysInstallCb( h, nom, "f-out-1", out1, "val", NULL );
  1650. cmDspSysInstallCb( h, onBtn, "sym", nom, "cmd", NULL );
  1651. cmDspSysInstallCb( h, offBtn, "sym", nom, "cmd", NULL );
  1652. errLabel:
  1653. return rc;
  1654. }
  1655. cmDspRC_t _cmDspSysPgm_1ofN( cmDspSysH_t h, void** userPtrPtr )
  1656. {
  1657. cmDspRC_t rc;
  1658. unsigned inCnt = 3;
  1659. unsigned initSel = 0;
  1660. cmDspInst_t* oom = cmDspSysAllocInst(h,"1ofN", NULL, 2, inCnt, initSel );
  1661. cmDspInst_t* sel = cmDspSysAllocScalar( h, "Sel", 0, inCnt-1, 0.001, 0.0);
  1662. cmDspInst_t* in0 = cmDspSysAllocScalar( h, "In-0", 0.0, 10.0, 0.001, 0.0);
  1663. cmDspInst_t* in1 = cmDspSysAllocScalar( h, "In-1", 0.0, 10.0, 0.001, 0.0);
  1664. cmDspInst_t* in2 = cmDspSysAllocScalar( h, "In-2", 0.0, 10.0, 0.001, 0.0);
  1665. cmDspInst_t* out = cmDspSysAllocScalar( h, "Out", 0.0, 10.0, 0.001, 0.0);
  1666. // check for allocation errors
  1667. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1668. goto errLabel;
  1669. cmDspSysInstallCb( h, sel, "val", oom, "chidx", NULL );
  1670. cmDspSysInstallCb( h, in0, "val", oom, "f-in-0", NULL );
  1671. cmDspSysInstallCb( h, in1, "val", oom, "f-in-1", NULL );
  1672. cmDspSysInstallCb( h, in2, "val", oom, "f-in-2", NULL );
  1673. cmDspSysInstallCb( h, oom, "f-out", out, "val", NULL );
  1674. errLabel:
  1675. return rc;
  1676. }
  1677. cmDspRC_t _cmDspSysPgm_Router( cmDspSysH_t h, void** userPtrPtr )
  1678. {
  1679. cmDspRC_t rc;
  1680. unsigned inCnt = 3;
  1681. unsigned initSel = 0;
  1682. cmDspInst_t* rtr = cmDspSysAllocInst(h,"Router", NULL, 2, inCnt, initSel );
  1683. cmDspInst_t* sel = cmDspSysAllocScalar( h, "Sel", 0, inCnt-1, 1.0, 0.0);
  1684. cmDspInst_t* in = cmDspSysAllocScalar( h, "In", 0.0, 10.0, 0.001, 0.0);
  1685. cmDspInst_t* out0 = cmDspSysAllocScalar( h, "Out-0", 0.0, 10.0, 0.001, 0.0);
  1686. cmDspInst_t* out1 = cmDspSysAllocScalar( h, "Out-1", 0.0, 10.0, 0.001, 0.0);
  1687. cmDspInst_t* out2 = cmDspSysAllocScalar( h, "Out-2", 0.0, 10.0, 0.001, 0.0);
  1688. // check for allocation errors
  1689. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1690. goto errLabel;
  1691. cmDspSysInstallCb( h, sel, "val", rtr, "sel", NULL );
  1692. cmDspSysInstallCb( h, in, "val", rtr, "f-in", NULL );
  1693. cmDspSysInstallCb( h, rtr, "f-out-0", out0, "val", NULL );
  1694. cmDspSysInstallCb( h, rtr, "f-out-1", out1, "val", NULL );
  1695. cmDspSysInstallCb( h, rtr, "f-out-2", out2, "val", NULL );
  1696. errLabel:
  1697. return rc;
  1698. }
  1699. cmDspRC_t _cmDspSysPgm_Preset( cmDspSysH_t h, void** userPtrPtr )
  1700. {
  1701. cmDspRC_t rc;
  1702. unsigned sgShapeId = 0;
  1703. double sgHz = 500;
  1704. double sgGain = 0.02;
  1705. unsigned grpSymId = cmDspSysPresetRegisterGroup(h,"test");
  1706. const cmChar_t* prefixLabel = NULL;
  1707. cmDspInst_t* sg = cmDspSysAllocInst( h, "SigGen", NULL, 3, sgHz, sgShapeId, sgGain );
  1708. cmDspInst_t* ao = cmDspSysAllocAudioOut( h, 0, 1.0 );
  1709. cmDspInst_t* shapes = cmDspSysAllocMsgListP(h, grpSymId, prefixLabel, "Shape", NULL, "shapeList", 0 );
  1710. cmDspInst_t* gains = cmDspSysAllocMsgListP(h, grpSymId, prefixLabel, "Gains", NULL, "gainMenu", 0 );
  1711. cmDspInst_t* hz = cmDspSysAllocScalarP( h, grpSymId, prefixLabel, "Hz", 0.0, 10000.0, 0.01, sgHz);
  1712. cmDspInst_t* gain = cmDspSysAllocScalarP( h, grpSymId, prefixLabel, "Gain", 0.0, 1.0, 0.01, sgGain);
  1713. cmDspInst_t* preset = cmDspSysAllocInst( h, "Preset", NULL, 1, grpSymId );
  1714. cmDspInst_t* presetLbl = cmDspSysAllocInst( h, "Text", "Preset", 1, "" );
  1715. cmDspInst_t* storeBtn = cmDspSysAllocButton( h, "store", 0);
  1716. cmDspInst_t* recallBtn = cmDspSysAllocButton( h, "recall", 0);
  1717. // check for allocation errors
  1718. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1719. goto errLabel;
  1720. cmDspSysConnectAudio(h, sg, "out", ao, "in" );
  1721. cmDspSysInstallCb( h, shapes,"out", sg, "shape", NULL );
  1722. cmDspSysInstallCb( h, hz, "val", sg, "hz", NULL );
  1723. cmDspSysInstallCb( h, gain, "val", sg, "gain", NULL );
  1724. cmDspSysInstallCb( h, gains, "out", gain, "val", NULL );
  1725. cmDspSysInstallCb( h, presetLbl, "val", preset, "label",NULL);
  1726. cmDspSysInstallCb( h, storeBtn, "sym", preset, "cmd", NULL );
  1727. cmDspSysInstallCb( h, recallBtn, "sym", preset, "cmd", NULL );
  1728. errLabel:
  1729. return rc;
  1730. }
  1731. cmDspRC_t _cmDspSysPgm_RsrcWr( cmDspSysH_t h, void** userPtrPtr )
  1732. {
  1733. cmDspRC_t rc = kOkDspRC;
  1734. const cmChar_t* lbl1 = "rsrc1";
  1735. const cmChar_t* lbl2 = "rsrc2";
  1736. const cmChar_t* str1 = NULL;
  1737. const cmChar_t* str2 = NULL;
  1738. if( cmDspRsrcString(h,&str1, lbl1, NULL ) != kOkDspRC )
  1739. str1 = "1";
  1740. if( cmDspRsrcString(h,&str2, lbl2, NULL ) != kOkDspRC )
  1741. str2 = "2";
  1742. cmDspInst_t* rsrcWr = cmDspSysAllocInst( h, "RsrcWr", NULL, 2, lbl1, lbl2 );
  1743. cmDspInst_t* textUi0 = cmDspSysAllocInst( h, "Text", "Value1", 1, str1 );
  1744. cmDspInst_t* textUi1 = cmDspSysAllocInst( h, "Text", "Value2", 1, str2 );
  1745. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1746. goto errLabel;
  1747. cmDspSysInstallCb( h, textUi0, "val", rsrcWr, "rsrc1", NULL );
  1748. cmDspSysInstallCb( h, textUi1, "val", rsrcWr, "rsrc2", NULL );
  1749. errLabel:
  1750. return rc;
  1751. }
  1752. cmDspRC_t _cmDspSysPgm_1Up( cmDspSysH_t h, void** userPtrPtr )
  1753. {
  1754. cmDspRC_t rc;
  1755. unsigned chCnt = 3;
  1756. double maxIdx = chCnt - 1;
  1757. unsigned initIdx = 2;
  1758. cmDspInst_t* sel = cmDspSysAllocScalar( h, "Chan", 0.0, maxIdx, 1.0, 0.0 );
  1759. cmDspInst_t* up = cmDspSysAllocInst( h, "1Up", NULL, 2, chCnt, initIdx );
  1760. cmDspInst_t* pr0 = cmDspSysAllocInst( h, "Printer", NULL, 1, "0:" );
  1761. cmDspInst_t* pr1 = cmDspSysAllocInst( h, "Printer", NULL, 1, "1:" );
  1762. cmDspInst_t* pr2 = cmDspSysAllocInst( h, "Printer", NULL, 1, "2:" );
  1763. // check for allocation errors
  1764. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1765. goto errLabel;
  1766. cmDspSysInstallCb( h, sel, "val", up, "sel",NULL);
  1767. cmDspSysInstallCb( h, up, "out-0", pr0, "in", NULL );
  1768. cmDspSysInstallCb( h, up, "out-1", pr1, "in", NULL );
  1769. cmDspSysInstallCb( h, up, "out-2", pr2, "in", NULL );
  1770. errLabel:
  1771. return rc;
  1772. }
  1773. cmDspRC_t _cmDspSysPgm_PortToSym( cmDspSysH_t h, void** userPtrPtr )
  1774. {
  1775. cmDspRC_t rc = kOkDspRC;
  1776. cmDspInst_t* btn0 = cmDspSysAllocButton( h, "Btn0", 0.0 );
  1777. cmDspInst_t* btn1 = cmDspSysAllocButton( h, "Btn1", 0.0 );
  1778. cmDspInst_t* btn2 = cmDspSysAllocButton( h, "Btn2", 0.0 );
  1779. cmDspInst_t* pts = cmDspSysAllocInst( h, "PortToSym", NULL, 3, "one", "two", "three");
  1780. cmDspInst_t* pr0 = cmDspSysAllocInst( h, "Printer", NULL, 1, "0:" );
  1781. cmDspInst_t* pr1 = cmDspSysAllocInst( h, "Printer", NULL, 1, "1:" );
  1782. // check for allocation errors
  1783. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1784. goto errLabel;
  1785. cmDspSysInstallCb( h, btn0, "out", pts, "one",NULL);
  1786. cmDspSysInstallCb( h, btn1, "out", pts, "two",NULL);
  1787. cmDspSysInstallCb( h, btn2, "out", pts, "three",NULL);
  1788. cmDspSysInstallCb( h, btn0, "out", pr1, "in",NULL);
  1789. cmDspSysInstallCb( h, btn1, "out", pr1, "in",NULL);
  1790. cmDspSysInstallCb( h, btn2, "out", pr1, "in",NULL);
  1791. cmDspSysInstallCb( h, pts, "one", pr0, "in", NULL );
  1792. cmDspSysInstallCb( h, pts, "two", pr0, "in", NULL );
  1793. cmDspSysInstallCb( h, pts, "three", pr0, "in", NULL );
  1794. errLabel:
  1795. return rc;
  1796. }
  1797. cmDspRC_t _cmDspSysPgm_Line( cmDspSysH_t h, void** userPtrPtr )
  1798. {
  1799. cmDspRC_t rc = kOkDspRC;
  1800. cmDspInst_t* beg = cmDspSysAllocScalar( h, "beg", -10.0, 10.0, 1.0, 0.0 );
  1801. cmDspInst_t* end = cmDspSysAllocScalar( h, "end", -10.0, 10.0, 1.0, 1.0 );
  1802. cmDspInst_t* dur = cmDspSysAllocScalar( h, "dur", 0.0, 10000.0, 1.0, 0.0 );
  1803. cmDspInst_t* reset = cmDspSysAllocButton(h, "reset", 0.0 );
  1804. cmDspInst_t* line = cmDspSysAllocInst( h, "Line", NULL, 3, 0.0, 10.0, 1000.0 );
  1805. cmDspInst_t* mtr = cmDspSysAllocInst( h, "Meter", NULL, 3, -10.0, 10.0, 0.0 );
  1806. cmDspInst_t* pr1 = cmDspSysAllocInst( h, "Printer", NULL, 1, ">" );
  1807. // check for allocation errors
  1808. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1809. goto errLabel;
  1810. cmDspSysInstallCb( h, beg, "val", line, "beg",NULL);
  1811. cmDspSysInstallCb( h, end, "val", line, "end",NULL);
  1812. cmDspSysInstallCb( h, dur, "val", line, "dur",NULL);
  1813. cmDspSysInstallCb( h, line, "out", mtr, "in", NULL );
  1814. cmDspSysInstallCb( h, reset, "sym", line, "cmd", NULL );
  1815. cmDspSysInstallCb( h, line, "out", pr1, "in", NULL );
  1816. errLabel:
  1817. return rc;
  1818. }
  1819. cmDspRC_t _cmDspSysPgm_Array( cmDspSysH_t h, void** userPtrPtr )
  1820. {
  1821. cmDspRC_t rc = kOkDspRC;
  1822. unsigned cnt = 0;
  1823. const cmChar_t* rsrcLabelStr = "test";
  1824. if( cmDspRsrcArrayCount( h, &cnt, rsrcLabelStr, NULL ) != kOkDspRC )
  1825. return cmErrMsg(&cmDspSysPgmCtx(h)->err,kPgmCfgFailDspRC,"The resource '%s' could not be read.",rsrcLabelStr);
  1826. cmDspInst_t* printBtn = cmDspSysAllocButton( h, "print", 0.0 );
  1827. cmDspInst_t* sendBtn = cmDspSysAllocButton( h, "send", 0.0 );
  1828. cmDspInst_t* cntBtn = cmDspSysAllocButton( h, "count", 0.0 );
  1829. cmDspInst_t* offsCtl = cmDspSysAllocScalar( h, "offset",0.0, 128.0, 1.0, 60.0 );
  1830. cmDspInst_t* array = cmDspSysAllocInst( h, "Array", NULL, 1, rsrcLabelStr );
  1831. cmDspInst_t** pcvt = cmDspSysAllocInstArray( h, cnt, "PitchCvt", NULL, NULL, 0 );
  1832. cmDspInst_t* printer = cmDspSysAllocInst( h, "Printer", NULL, 1, ">" );
  1833. cmDspSysInstallCb( h, printBtn, "sym", array, "cmd", NULL );
  1834. cmDspSysInstallCb( h, sendBtn, "sym", array, "cmd", NULL );
  1835. cmDspSysInstallCb( h, cntBtn, "sym", array, "cmd", NULL );
  1836. cmDspSysInstallCb11N1( h, offsCtl, "val", pcvt, "offs", cnt );
  1837. cmDspSysInstallCb1NN1( h, array, "out", pcvt, "midi", cnt );
  1838. cmDspSysInstallCbN111( h, pcvt, "midi", printer, "in", cnt );
  1839. cmDspSysInstallCb( h, array, "cnt", printer, "in", NULL );
  1840. return rc;
  1841. }
  1842. cmDspRC_t _cmDspSysPgm_SegLine( cmDspSysH_t h, void** userPtrPtr )
  1843. {
  1844. cmDspRC_t rc = kOkDspRC;
  1845. cmDspInst_t* btn = cmDspSysAllocButton( h, "Trig", 0.0 );
  1846. cmDspInst_t* sline = cmDspSysAllocInst( h, "SegLine", NULL, 1, "array" );
  1847. cmDspInst_t* printer = cmDspSysAllocInst( h, "Printer", NULL, 1, ">" );
  1848. // check for allocation errors
  1849. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  1850. goto errLabel;
  1851. cmDspSysInstallCb( h, btn, "sym", sline, "trig", NULL );
  1852. cmDspSysInstallCb( h, sline, "out", printer, "in", NULL );
  1853. errLabel:
  1854. return rc;
  1855. }
  1856. cmDspRC_t _cmDspSysPgm_AvailCh( cmDspSysH_t h, void** userPtrPtr )
  1857. {
  1858. double frqHz = 440.0;
  1859. unsigned xfadeChCnt = 2;
  1860. double xfadeMs = 250.0;
  1861. bool xfadeInitFl = false;
  1862. const char* fn = "/home/kevin/media/audio/20110723-Kriesberg/Audio Files/Piano 3_01.wav";
  1863. cmDspInst_t* chk0 = cmDspSysAllocInst(h,"Button", "0", 2, kButtonDuiId, 0.0 );
  1864. //cmDspInst_t* chk1 = cmDspSysAllocInst(h,"Button", "1", 2, kCheckDuiId, 0.0 );
  1865. cmDspInst_t* achp = cmDspSysAllocInst( h, "AvailCh", NULL, 1, xfadeChCnt );
  1866. cmDspInst_t* sphp = cmDspSysAllocInst( h, "Phasor", NULL, 2, cmDspSysSampleRate(h), frqHz );
  1867. cmDspInst_t* swtp = cmDspSysAllocInst( h, "WaveTable", NULL, 2, ((int)cmDspSysSampleRate(h)), 4);
  1868. cmDspInst_t* fphp = cmDspSysAllocInst( h, "Phasor", NULL, 1, cmDspSysSampleRate(h) );
  1869. cmDspInst_t* fwtp = cmDspSysAllocInst( h, "WaveTable", NULL, 5, ((int)cmDspSysSampleRate(h)), 1, fn, -1, 7000000 );
  1870. cmDspInst_t* fad0 = cmDspSysAllocInst( h, "Xfader", NULL, 3, xfadeChCnt, xfadeMs, xfadeInitFl );
  1871. //cmDspInst_t* prp = cmDspSysAllocInst( h, "Printer", NULL, 1, ">" );
  1872. cmDspInst_t* ao0p = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 0 );
  1873. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 1 );
  1874. // phasor->sine->fad-0->aout
  1875. cmDspSysConnectAudio(h, sphp, "out", swtp, "phs" );
  1876. cmDspSysConnectAudio(h, swtp, "out", fad0, "in-0" );
  1877. cmDspSysConnectAudio(h, fad0, "out-0", ao0p, "in" );
  1878. // phasor->file->fad-1->aout
  1879. cmDspSysConnectAudio(h, fphp, "out", fwtp, "phs" );
  1880. cmDspSysConnectAudio(h, fwtp, "out", fad0, "in-1" );
  1881. cmDspSysConnectAudio(h, fad0, "out-1", ao1p, "in" );
  1882. //cmDspSysInstallCb(h, chk0, "out", fad0, "gate-0", NULL);
  1883. //cmDspSysInstallCb(h, chk1, "out", fad0, "gate-1", NULL);
  1884. cmDspSysInstallCb(h, chk0, "sym", achp, "trig", NULL);
  1885. cmDspSysInstallCb(h, achp, "gate-0", fad0, "gate-0", NULL );
  1886. cmDspSysInstallCb(h, fad0, "state-0", achp, "dis-0", NULL );
  1887. cmDspSysInstallCb(h, achp, "gate-1", fad0, "gate-1", NULL );
  1888. cmDspSysInstallCb(h, fad0, "state-1", achp, "dis-1", NULL );
  1889. return kOkDspRC;
  1890. }
  1891. _cmDspSysPgm_t _cmDspSysPgmArray[] =
  1892. {
  1893. { "time_line", _cmDspSysPgm_TimeLine, NULL, NULL },
  1894. { "main", _cmDspSysPgm_Main, NULL, NULL },
  1895. { "array", _cmDspSysPgm_Array, NULL, NULL },
  1896. { "line", _cmDspSysPgm_Line, NULL, NULL },
  1897. { "1Up", _cmDspSysPgm_1Up, NULL, NULL },
  1898. { "PortToSym", _cmDspSysPgm_PortToSym, NULL, NULL },
  1899. { "preset", _cmDspSysPgm_Preset, NULL, NULL },
  1900. { "rsrcWr", _cmDspSysPgm_RsrcWr, NULL, NULL },
  1901. { "router", _cmDspSysPgm_Router, NULL, NULL },
  1902. { "1ofN", _cmDspSysPgm_1ofN, NULL, NULL },
  1903. { "NofM", _cmDspSysPgm_NofM, NULL, NULL },
  1904. { "whirl_net", _cmDspSysPgm_WhirlNet, NULL, NULL },
  1905. { "thunk_net", _cmDspSysPgm_ThunkNet, NULL, NULL },
  1906. { "seq", _cmDspSysPgm_Seq, NULL, NULL },
  1907. { "dist_ds", _cmDspSysPgm_DistDs, NULL, NULL },
  1908. { "bi_quad_eq", _cmDspSysPgm_BiQuadEq, NULL, NULL },
  1909. { "compressor", _cmDspSysPgm_Compressor, NULL, NULL },
  1910. { "adsr", _cmDspSysPgm_Adsr, NULL, NULL },
  1911. { "msg delay", _cmDspSysPgm_MsgDelay, NULL, NULL },
  1912. { "pickup rmod2", _cmDspSysPgm_RingMod2, NULL, NULL },
  1913. { "pickup rmod", _cmDspSysPgm_RingMod, NULL, NULL },
  1914. { "pickup tails", _cmDspSysPgm_NoiseTails, NULL, NULL },
  1915. { "tails_2", _cmDspSysPgm_NoiseTails2, NULL, NULL },
  1916. { "pickups", _cmDspSysPgm_Pickups0, NULL, NULL },
  1917. { "midi_test", _cmDspSysPgm_Test_Midi, NULL, NULL },
  1918. { "2_thru", _cmDspSysPgm_Stereo_Through, NULL, NULL },
  1919. { "guitar", _cmDspSysPgmGuitar, NULL, NULL },
  1920. { "2_fx", _cmDspSysPgm_Stereo_Fx, NULL, NULL },
  1921. { "sine", _cmDspSysPgm_PlaySine, NULL, NULL },
  1922. { "file", _cmDspSysPgm_PlayFile, NULL, NULL },
  1923. { "gate_detect", _cmDspSysPgm_GateDetect, NULL, NULL },
  1924. { "record", _cmDspSysPgm_Record, NULL, NULL },
  1925. { "pitch_shift", _cmDspSysPgm_PitchShiftFile, NULL, NULL },
  1926. { "loop_recd", _cmDspSysPgm_LoopRecd, NULL, NULL },
  1927. { "ui_test", _cmDspSysPgm_UiTest, NULL, NULL },
  1928. { "xfade_test", _cmDspSysPgm_Xfade, NULL, NULL },
  1929. { "auto_gain", _cmDspSysPgm_AutoGain, NULL, NULL },
  1930. { "comb filt", _cmDspSysPgm_CombFilt, NULL, NULL },
  1931. { "scalar op", _cmDspSysPgm_ScalarOp, NULL, NULL },
  1932. { "seg_line", _cmDspSysPgm_SegLine, NULL, NULL },
  1933. { "avail_ch", _cmDspSysPgm_AvailCh, NULL, NULL },
  1934. { NULL , NULL, NULL, NULL }
  1935. };
  1936. _cmDspSysPgm_t* _cmDspSysPgmArrayBase()
  1937. {
  1938. return _cmDspSysPgmArray;
  1939. }