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

cmDspPgm.c 126KB

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