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

cmDspPgmKrTimeLineLiteAf.c 17KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369
  1. //| Copyright: (C) 2009-2020 Kevin Larke <contact AT larke DOT org>
  2. //| License: GNU GPL version 3.0 or above. See the accompanying LICENSE file.
  3. //( { file_desc:"'snap' Performance analysis Simplified Time Line program." kw:[snap]}
  4. #include "cmPrefix.h"
  5. #include "cmGlobal.h"
  6. #include "cmFloatTypes.h"
  7. #include "cmRpt.h"
  8. #include "cmErr.h"
  9. #include "cmCtx.h"
  10. #include "cmMem.h"
  11. #include "cmMallocDebug.h"
  12. #include "cmLinkedHeap.h"
  13. #include "cmText.h"
  14. #include "cmFileSys.h"
  15. #include "cmSymTbl.h"
  16. #include "cmJson.h"
  17. #include "cmPrefs.h"
  18. #include "cmDspValue.h"
  19. #include "cmMsgProtocol.h"
  20. #include "cmThread.h"
  21. #include "cmUdpPort.h"
  22. #include "cmUdpNet.h"
  23. #include "cmSerialPort.h"
  24. #include "cmTime.h"
  25. #include "cmAudioSys.h"
  26. #include "cmProcObj.h"
  27. #include "cmDspCtx.h"
  28. #include "cmDspClass.h"
  29. #include "cmDspSys.h"
  30. #include "cmDspPgm.h"
  31. #include "cmAudioFile.h"
  32. #include "cmProcObj.h"
  33. #include "cmProc.h"
  34. #include "cmProc3.h"
  35. #include "cmVectOpsTemplateMain.h"
  36. #include "cmVectOps.h"
  37. #include "cmDspPgmKrChain.h"
  38. //)
  39. //( { label:cmDspPgm_TimeLineLite file_desc:"Simplified score vs. the performance and generating related audio transforms." kw:[spgm] }
  40. cmDspRC_t _cmDspSysPgm_TimeLineLiteAf(cmDspSysH_t h, void** userPtrPtr )
  41. {
  42. cmDspRC_t rc = kOkDspRC;
  43. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  44. cmErr_t err;
  45. krRsrc_t r;
  46. unsigned sfBufCnt = 7; // length of the MIDI event buffer
  47. unsigned sfMaxWndCnt = 10; // length of the score event buffer
  48. unsigned sfMinVel = 5; // ignore MIDI events below this velocity
  49. bool sfEnaMeasFl = true;
  50. memset(&r,0,sizeof(r));
  51. cmErrSetup(&err,&cmCtx->rpt,"Kr TimelineLite");
  52. if( krLoadRsrc(h,&err,&r) != kOkDspRC )
  53. return rc;
  54. //int baseAudioInCh = 0; // 2;
  55. int baseAudioOutCh = 0;// 2;
  56. cmDspInst_t* tlp = cmDspSysAllocInst(h,"TimeLine", "tl", 2, r.tlFn, r.tlPrefixPath );
  57. cmDspInst_t* scp = cmDspSysAllocInst(h,"Score", "sc", 1, r.scFn );
  58. cmDspInst_t* pts = cmDspSysAllocInst(h,"PortToSym", NULL, 2, "on", "off" );
  59. cmDspInst_t* php = cmDspSysAllocInst(h,"Phasor", NULL, 0 );
  60. cmDspInst_t* wt0 = cmDspSysAllocInst(h,"WaveTable", NULL, 7, ((int)cmDspSysSampleRate(h)), 1, NULL, -1, 0, -1, 0 );
  61. cmDspInst_t* wt1 = cmDspSysAllocInst(h,"WaveTable", NULL, 7, ((int)cmDspSysSampleRate(h)), 1, NULL, -1, 0, -1, 1 );
  62. cmDspInst_t* mfp = cmDspSysAllocInst(h,"MidiFilePlay",NULL, 0 );
  63. cmDspInst_t* nmp = cmDspSysAllocInst(h,"NanoMap", NULL, 0 );
  64. cmDspInst_t* sfp = cmDspSysAllocInst(h,"ScFol", NULL, 5, r.scFn, sfBufCnt, sfMaxWndCnt, sfMinVel, sfEnaMeasFl );
  65. cmDspInst_t* amp = cmDspSysAllocInst(h,"ActiveMeas", NULL, 1, 100 );
  66. cmDspInst_t* modp = cmDspSysAllocInst(h,"ScMod", NULL, 2, r.modFn, "m1" );
  67. cmDspInst_t* its = cmDspSysAllocInst(h,"IntToSym", NULL, 2, 0, "off");
  68. unsigned preGrpSymId = cmDspSysPresetRegisterGroup(h,"tl");
  69. unsigned cmpPreGrpSymId = cmDspSysPresetRegisterGroup(h,"tl_cmp");
  70. cmDspTlXform_t c0,c1;
  71. memset(&c0,0,sizeof(c0));
  72. memset(&c1,0,sizeof(c1));
  73. cmDspSysNewPage(h,"Controls-0");
  74. _cmDspSys_TlXformChain(h, &c0, preGrpSymId, cmpPreGrpSymId, amp, modp, 0, 0 );
  75. cmDspSysNewPage(h,"Controls-1");
  76. _cmDspSys_TlXformChain(h, &c1, preGrpSymId, cmpPreGrpSymId, amp, modp, 1, 1 );
  77. cmDspInst_t* lmix = cmDspSysAllocInst(h, "AMix", NULL, 1, 2 );
  78. cmDspInst_t* rmix = cmDspSysAllocInst(h, "AMix", NULL, 1, 2 );
  79. cmDspInst_t* ao0 = cmDspSysAllocInst(h,"AudioOut", NULL, 1, baseAudioOutCh+0 );
  80. cmDspInst_t* ao1 = cmDspSysAllocInst(h,"AudioOut", NULL, 1, baseAudioOutCh+1 );
  81. cmDspSysNewPage(h,"Main");
  82. //cmDspInst_t* notesOffb= cmDspSysAllocInst(h,"Button", "notesOff", 2, kButtonDuiId, 1.0 );
  83. cmDspInst_t* onb = cmDspSysAllocInst(h,"Button", "start", 2, kButtonDuiId, 1.0 );
  84. cmDspInst_t* offb = cmDspSysAllocInst(h,"Button", "stop", 2, kButtonDuiId, 1.0 );
  85. cmDspInst_t* mod_sel = cmDspSysAllocMsgList(h, NULL, "mod_sel", 1 );
  86. cmDspInst_t* prp = cmDspSysAllocInst(h,"Printer", NULL, 1, ">" );
  87. cmDspInst_t* prd = cmDspSysAllocInst(h,"Printer", NULL, 1, "DYNM:" );
  88. cmDspInst_t* pre = cmDspSysAllocInst(h,"Printer", NULL, 1, "EVEN:" );
  89. cmDspInst_t* prt = cmDspSysAllocInst(h,"Printer", NULL, 1, "TMPO:");
  90. cmDspInst_t* prc = cmDspSysAllocInst(h,"Printer", NULL, 1, "COST:");
  91. // Record <-> Live switches
  92. cmDspInst_t* tlRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0); // time line swich
  93. cmDspInst_t* mfpRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0);
  94. //cmDspSysNewColumn(h,0);
  95. cmDspInst_t* ogain0 = cmDspSysAllocInst(h,"Scalar", "Dry Out Gain-0", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  96. cmDspInst_t* ogain1 = cmDspSysAllocInst(h,"Scalar", "Dry Out Gain-1", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  97. cmDspInst_t* ogain2 = cmDspSysAllocInst(h,"Scalar", "Wet Out Gain-2", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  98. cmDspInst_t* ogain3 = cmDspSysAllocInst(h,"Scalar", "Wet Out Gain-3", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  99. cmDspInst_t* ogainW = cmDspSysAllocInst(h,"Scalar", "Wet Master", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  100. cmDspInst_t* ogainD = cmDspSysAllocInst(h,"Scalar", "Dry Master", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  101. cmDspInst_t* gmult0 = cmDspSysAllocInst(h,"ScalarOp", NULL, 6, 2, "*$", "in-0", 1.0, "in-1", 1.0 );
  102. cmDspInst_t* gmult1 = cmDspSysAllocInst(h,"ScalarOp", NULL, 6, 2, "*$", "in-0", 1.0, "in-1", 1.0 );
  103. cmDspInst_t* gmult2 = cmDspSysAllocInst(h,"ScalarOp", NULL, 6, 2, "*$", "in-0", 1.0, "in-1", 1.0 );
  104. cmDspInst_t* gmult3 = cmDspSysAllocInst(h,"ScalarOp", NULL, 6, 2, "*$", "in-0", 1.0, "in-1", 1.0 );
  105. // Audio file recording
  106. cmDspInst_t* recdGain= cmDspSysAllocInst(h,"Scalar", "Recd Gain", 5, kNumberDuiId, 0.0, 100.0,0.01, 1.5 );
  107. cmDspInst_t* recdChk = cmDspSysAllocInst(h,"Button", "Record", 2, kCheckDuiId, 0.0 );
  108. cmDspInst_t* recdPtS = cmDspSysAllocInst(h,"GateToSym", NULL, 2, cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"open"),cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"close"));
  109. cmDspInst_t* afop = cmDspSysAllocInst(h,"AudioFileOut",NULL, 2, r.recordDir,2);
  110. cmDspInst_t* mi0p = cmDspSysAllocInst(h,"AMeter","In 0", 0);
  111. cmDspInst_t* mi1p = cmDspSysAllocInst(h,"AMeter","In 1", 0);
  112. cmDspInst_t* meas = cmDspSysAllocInst(h,"Scalar", "Begin Meas", 5, kNumberDuiId, 1.0, 1000.0, 1.0, 1.0 );
  113. cmDspInst_t* eloc = cmDspSysAllocInst(h,"Scalar", "End Loc", 5, kNumberDuiId, 1.0, 1000.0, 1.0, 1.0 );
  114. cmDspInst_t* sfp_loc = cmDspSysAllocInst(h,"Label", NULL, 1, "sf loc:");
  115. cmDspSysInstallCb( h, meas, "val", scp, "meas", NULL);
  116. cmDspSysInstallCb( h, meas, "val", tlp, "meas", NULL);
  117. //--------------- Preset controls
  118. cmDspSysNewColumn(h,0);
  119. cmDspInst_t* preset = cmDspSysAllocInst( h, "Preset", NULL, 1, preGrpSymId );
  120. cmDspInst_t* presetLbl = cmDspSysAllocInst( h, "Text", "Preset", 1, "" );
  121. cmDspInst_t* storeBtn = cmDspSysAllocButton( h, "store", 0);
  122. cmDspInst_t* recallBtn = cmDspSysAllocButton( h, "recall", 0);
  123. cmDspSysInstallCb( h, presetLbl, "val", preset, "label",NULL);
  124. cmDspSysInstallCb( h, storeBtn, "sym", preset, "cmd", NULL );
  125. cmDspSysInstallCb( h, recallBtn, "sym", preset, "cmd", NULL );
  126. cmDspInst_t* prePath = cmDspSysAllocInst( h, "Fname", "prePath", 3, true,NULL,r.tlPrefixPath);
  127. //cmDspSysNewColumn(h,0);
  128. //--------------- Recorded performance evaluation and Active Measurement related controls
  129. cmDspInst_t* clrBtn = cmDspSysAllocButton( h, "clear", 0);
  130. cmDspInst_t* prtBtn = cmDspSysAllocButton( h, "dump", 0);
  131. cmDspInst_t* amCmd = cmDspSysAllocInst( h, "PortToSym", NULL, 2, "add", "rewind" );
  132. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  133. return rc;
  134. // Output Audio file recording.
  135. cmDspSysInstallCb(h, recdGain,"val", afop, "gain0", NULL );
  136. cmDspSysInstallCb(h, recdGain,"val", afop, "gain1", NULL );
  137. cmDspSysInstallCb(h, recdChk, "out", recdPtS, "on", NULL );
  138. cmDspSysInstallCb(h, recdChk, "out", recdPtS, "off", NULL );
  139. cmDspSysInstallCb(h, recdPtS, "out", afop, "sel", NULL );
  140. // Audio connections
  141. cmDspSysConnectAudio(h, php, "out", wt0, "phs" ); // phasor -> wave table
  142. cmDspSysConnectAudio(h, php, "out", wt1, "phs" ); //
  143. cmDspSysConnectAudio(h, wt0, "out", lmix, "in-0" ); // wave table -> audio out (dry output)
  144. cmDspSysConnectAudio(h, wt1, "out", rmix, "in-0" ); //
  145. //cmDspSysConnectAudio(h, wt0, "out", lmix, "in-1" ); // wave table -> audio out (dry output)
  146. //cmDspSysConnectAudio(h, wt1, "out", rmix, "in-1" ); //
  147. cmDspSysConnectAudio( h, wt0, "out", mi0p, "in" ); //
  148. cmDspSysConnectAudio( h, wt0, "out", c0.kr0, "in" ); // ain -> ch0.kr0
  149. cmDspSysConnectAudio( h, wt0, "out", c0.kr1, "in" ); // ain -> ch0.kr1
  150. cmDspSysConnectAudio( h, c0.cmp,"out", lmix, "in-1" ); // ch0.cmp -> aout
  151. cmDspSysConnectAudio( h, c0.cmp,"out", afop, "in0"); // ch0.cmp -> audio_file_out
  152. cmDspSysConnectAudio( h, wt1, "out", mi1p, "in" ); //
  153. cmDspSysConnectAudio( h, wt1, "out", c1.kr0, "in" ); // ain -> ch1.kr0
  154. cmDspSysConnectAudio( h, wt1, "out", c1.kr1, "in" ); // ain -> ch1.kr1
  155. cmDspSysConnectAudio( h, c1.cmp,"out", rmix, "in-1" ); // ch1.cmp -> aout
  156. cmDspSysConnectAudio( h, c1.cmp,"out", afop, "in1"); // ch1.cmp ->audio_file_out
  157. cmDspSysConnectAudio( h, lmix, "out", ao0, "in" );
  158. cmDspSysConnectAudio( h, rmix, "out", ao1, "in" );
  159. cmDspSysInstallCb( h, clrBtn, "sym", amp, "cmd", NULL ); // clear active meas.
  160. cmDspSysInstallCb( h, prtBtn, "sym", modp, "cmd", NULL ); // print active meas
  161. //cmDspSysInstallCb( h, prtBtn, "sym", scp, "cmd", NULL ); // print the score
  162. cmDspSysInstallCb( h, amCmd, "add", amp, "cmd", NULL ); // add active meas
  163. cmDspSysInstallCb( h, amCmd, "rewind", amp, "cmd", NULL ); // rewind active meas
  164. //cmDspSysInstallCb( h, sfp, "out", amRt, "f-in", NULL ); // sfp-active meas router (rtr is switched by live btn)
  165. //cmDspSysInstallCb( h, amRt, "f-out-0",amp, "sfloc", NULL );
  166. cmDspSysInstallCb( h, sfp, "out", amp, "sfloc", NULL );
  167. cmDspSysInstallCb( h, sfp, "vloc", amp, "loc", NULL ); // live meas's to active meas unit
  168. cmDspSysInstallCb( h, sfp, "vval", amp, "val", NULL ); //
  169. cmDspSysInstallCb( h, sfp, "vcost",amp, "cst", NULL ); //
  170. cmDspSysInstallCb( h, sfp, "vtyp", amp, "type", NULL ); //
  171. cmDspSysInstallCb( h, sfp, "vtyp", amCmd, "add", NULL); //
  172. // ***** delete this to prevent the score follower from driving the active-measure unit in 'live' mode
  173. //cmDspSysInstallCb( h, amRt, "f-out-1",amp, "sfloc", NULL );
  174. // *****
  175. // active measure loc to xfad channel trigger
  176. /*
  177. cmDspSysInstallCb( h, amp, "scloc",c0.achan, "trig", NULL ); // See Also: modp.sw ->achan.trig
  178. cmDspSysInstallCb( h, amp, "scloc",c1.achan, "trig", NULL );
  179. cmDspSysInstallCb( h, recallBtn, "sym", c0.achan, "trig", NULL );
  180. cmDspSysInstallCb( h, recallBtn, "sym", c1.achan, "trig", NULL );
  181. */
  182. cmDspSysInstallCb( h, amp, "even", pre, "in", NULL ); // active meas output to printers
  183. cmDspSysInstallCb( h, amp, "even", modp, "even", NULL );
  184. cmDspSysInstallCb( h, amp, "dyn", prd, "in", NULL );
  185. cmDspSysInstallCb( h, amp, "dyn", modp, "dyn", NULL );
  186. cmDspSysInstallCb( h, amp, "tempo", prt, "in", NULL );
  187. cmDspSysInstallCb( h, amp, "tempo", modp, "tempo",NULL );
  188. cmDspSysInstallCb( h, amp, "cost", prc, "in", NULL );
  189. cmDspSysInstallCb( h, amp, "cost", modp, "cost", NULL );
  190. /*
  191. cmDspSysInstallCb( h, sfp, "vloc", pre, "in", NULL ); // live meas's to active meas unit
  192. cmDspSysInstallCb( h, sfp, "vval", prd, "in", NULL ); //
  193. cmDspSysInstallCb( h, sfp, "vcost",prt, "in", NULL ); //
  194. cmDspSysInstallCb( h, sfp, "vtyp", prc, "in", NULL ); //
  195. */
  196. // wave-table to time-line cursor
  197. cmDspSysInstallCb( h, wt0, "fidx",tlp, "curs", NULL);
  198. cmDspSysInstallCb(h, prePath, "out", tlp, "path", NULL );
  199. //cmDspSysInstallCb(h, notesOffb, "sym", pic, "alloff", NULL );
  200. // start connections
  201. cmDspSysInstallCb(h, onb, "sym", tlRt, "s-in", NULL );
  202. cmDspSysInstallCb(h, tlRt, "s-out-0",tlp, "reset", NULL );
  203. cmDspSysInstallCb(h, onb, "sym", scp, "send", NULL );
  204. cmDspSysInstallCb(h, onb, "sym", mfpRt,"s-in", NULL );
  205. cmDspSysInstallCb(h, mfpRt,"s-out-0",mfp, "sel", NULL );
  206. cmDspSysInstallCb(h, onb, "sym", pts, "on", NULL );
  207. cmDspSysInstallCb(h, pts, "on", wt0, "cmd", NULL );
  208. cmDspSysInstallCb(h, pts, "on", wt1, "cmd", NULL );
  209. cmDspSysInstallCb(h, pts, "on", modp, "cmd", NULL );
  210. cmDspSysInstallCb(h, onb, "sym", amCmd, "rewind", NULL );
  211. cmDspSysInstallCb(h, onb, "out", c0.achan,"reset", NULL );
  212. cmDspSysInstallCb(h, onb, "out", c1.achan,"reset", NULL );
  213. cmDspSysInstallCb(h, mod_sel,"out", modp, "sel", NULL );
  214. // stop connections
  215. cmDspSysInstallCb(h, tlp, "mfn", pts, "off", NULL ); // Prevents WT start on new audio file from TL.
  216. cmDspSysInstallCb(h, offb, "sym", mfp, "sel", NULL );
  217. cmDspSysInstallCb(h, offb, "sym", pts, "off", NULL );
  218. cmDspSysInstallCb(h, pts, "off", wt0, "cmd", NULL );
  219. cmDspSysInstallCb(h, pts, "off", wt1, "cmd", NULL );
  220. cmDspSysInstallCb(h, pts, "off", modp,"cmd", NULL );
  221. // time-line to MIDI file player selection
  222. cmDspSysInstallCb(h, tlp, "mbsi", mfp, "bsi", NULL );
  223. cmDspSysInstallCb(h, tlp, "mesi", mfp, "esi", NULL );
  224. cmDspSysInstallCb(h, tlp, "mfn", mfp, "fn", NULL );
  225. // time-line to Audio file player selection
  226. cmDspSysInstallCb(h, tlp, "absi", wt0, "beg", NULL );
  227. cmDspSysInstallCb(h, tlp, "aesi", wt0, "end", NULL );
  228. cmDspSysInstallCb(h, tlp, "afn", wt0, "fn", NULL );
  229. cmDspSysInstallCb(h, tlp, "absi", wt1, "beg", NULL );
  230. cmDspSysInstallCb(h, tlp, "aesi", wt1, "end", NULL );
  231. cmDspSysInstallCb(h, tlp, "afn", wt1, "fn", NULL );
  232. // score to score follower - to set initial search location
  233. cmDspSysInstallCb(h, scp, "sel", sfp, "index", NULL );
  234. cmDspSysInstallCb(h, scp, "sel", modp,"reset", NULL );
  235. cmDspSysInstallCb(h, scp, "sel", prp, "in", NULL );
  236. cmDspInst_t* msrc = mfp; // switch MIDI source (mfp or mip)
  237. // MIDI file player to score follower and sampler
  238. cmDspSysInstallCb(h, msrc, "smpidx", sfp, "smpidx",NULL );
  239. //cmDspSysInstallCb(h, mfp, "id", sfp, "muid", NULL );
  240. cmDspSysInstallCb(h, msrc, "d1", sfp, "d1", NULL );
  241. cmDspSysInstallCb(h, msrc, "d1", nmp, "d1", NULL );
  242. cmDspSysInstallCb(h, msrc, "d0", sfp, "d0", NULL );
  243. cmDspSysInstallCb(h, msrc, "d0", nmp, "d0", NULL );
  244. cmDspSysInstallCb(h, msrc, "status", sfp, "status",NULL );
  245. cmDspSysInstallCb(h, msrc, "status", nmp, "status",NULL );
  246. // score follower to recd_play,modulator and printers
  247. cmDspSysInstallCb(h, sfp, "out", modp, "index", NULL );
  248. cmDspSysInstallCb(h, sfp, "recent", sfp_loc, "in", NULL ); // report 'recent' but only act on 'max' loc index
  249. cmDspSysInstallCb( h, eloc , "val", its, "off-int", NULL);
  250. cmDspSysInstallCb( h, sfp, "out", its, "in", NULL);
  251. cmDspSysInstallCb( h, its, "out", offb, "in", NULL);
  252. cmDspSysInstallCb( h, its, "out", prp, "in", NULL);
  253. cmDspSysInstallCb(h, modp, "dgain0", ogain0, "val", NULL ); // mod -> ogain
  254. cmDspSysInstallCb(h, modp, "dgain1", ogain1, "val", NULL );
  255. cmDspSysInstallCb(h, modp, "wgain0", ogain2, "val", NULL );
  256. cmDspSysInstallCb(h, modp, "wgain1", ogain3, "val", NULL );
  257. cmDspSysInstallCb(h, ogain0, "val", gmult0, "in-0", NULL ); // ogain scalars -> gmult 0
  258. cmDspSysInstallCb(h, ogain1, "val", gmult1, "in-0", NULL );
  259. cmDspSysInstallCb(h, ogain2, "val", gmult2, "in-0", NULL );
  260. cmDspSysInstallCb(h, ogain3, "val", gmult3, "in-0", NULL );
  261. cmDspSysInstallCb(h, ogainD, "val", gmult0, "in-1", NULL ); // master scalars -> gmult 1
  262. cmDspSysInstallCb(h, ogainD, "val", gmult1, "in-1", NULL );
  263. cmDspSysInstallCb(h, ogainW, "val", gmult2, "in-1", NULL );
  264. cmDspSysInstallCb(h, ogainW, "val", gmult3, "in-1", NULL );
  265. cmDspSysInstallCb(h, gmult0, "out", lmix, "gain-0", NULL ); // gmult -> wdmix - l dry
  266. cmDspSysInstallCb(h, gmult1, "out", rmix, "gain-0", NULL ); // r dry
  267. cmDspSysInstallCb(h, gmult2, "out", lmix, "gain-1", NULL ); // l wet
  268. cmDspSysInstallCb(h, gmult3, "out", rmix, "gain-1", NULL ); // r wet
  269. //cmDspSysInstallCb(h, gmult2, "out", prp, "in", NULL );
  270. return rc;
  271. }
  272. //------------------------------------------------------------------------------
  273. //)