libcm is a C development framework with an emphasis on audio signal processing applications.
Du kannst nicht mehr als 25 Themen auswählen Themen müssen mit entweder einem Buchstaben oder einer Ziffer beginnen. Sie können Bindestriche („-“) enthalten und bis zu 35 Zeichen lang sein.

cmDspPgm.c 111KB

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