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.

cmDspPgmKrTimeLineLiteAf.c 16KB

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