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.

cmDspPgmKrTimeLineLite.c 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288
  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 "cmTime.h"
  22. #include "cmAudioSys.h"
  23. #include "cmProcObj.h"
  24. #include "cmDspCtx.h"
  25. #include "cmDspClass.h"
  26. #include "cmDspSys.h"
  27. #include "cmDspPgm.h"
  28. #include "cmAudioFile.h"
  29. #include "cmProcObj.h"
  30. #include "cmProc.h"
  31. #include "cmProc3.h"
  32. #include "cmVectOpsTemplateMain.h"
  33. #include "cmVectOps.h"
  34. #include "cmDspPgmKrChain.h"
  35. //)
  36. //( { label:cmDspPgm_TimeLineLite file_desc:"Simplified score vs. the performance and generating related audio transforms." kw:[spgm] }
  37. cmDspRC_t _cmDspSysPgm_TimeLineLite(cmDspSysH_t h, void** userPtrPtr )
  38. {
  39. cmDspRC_t rc = kOkDspRC;
  40. cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
  41. cmErr_t err;
  42. krRsrc_t r;
  43. unsigned sfBufCnt = 7; // length of the MIDI event buffer
  44. unsigned sfMaxWndCnt = 10; // length of the score event buffer
  45. unsigned sfMinVel = 5; // ignore MIDI events below this velocity
  46. bool sfEnaMeasFl = true;
  47. memset(&r,0,sizeof(r));
  48. cmErrSetup(&err,&cmCtx->rpt,"Kr TimelineLite");
  49. if( krLoadRsrc(h,&err,&r) != kOkDspRC )
  50. return rc;
  51. cmDspInst_t* ai0 = cmDspSysAllocInst(h,"AudioIn", NULL, 1, 0);
  52. cmDspInst_t* ai1 = cmDspSysAllocInst(h,"AudioIn", NULL, 1, 1);
  53. cmDspInst_t* tlp = cmDspSysAllocInst(h,"TimeLine", "tl", 2, r.tlFn, r.tlPrefixPath );
  54. cmDspInst_t* scp = cmDspSysAllocInst(h,"Score", "sc", 1, r.scFn );
  55. cmDspInst_t* pts = cmDspSysAllocInst(h,"PortToSym", NULL, 2, "on", "off" );
  56. cmDspInst_t* mfp = cmDspSysAllocInst(h,"MidiFilePlay",NULL, 0 );
  57. cmDspInst_t* nmp = cmDspSysAllocInst(h,"NanoMap", NULL, 0 );
  58. cmDspInst_t* mop = cmDspSysAllocInst(h,"MidiOut", NULL, 2, r.midiDevice,r.midiOutPort);
  59. cmDspInst_t* mo2p = cmDspSysAllocInst(h,"MidiOut", NULL, 2, r.midiDevice,r.midiOutPort2);
  60. cmDspInst_t* sfp = cmDspSysAllocInst(h,"ScFol", NULL, 1, r.scFn, sfBufCnt, sfMaxWndCnt, sfMinVel, sfEnaMeasFl );
  61. cmDspInst_t* amp = cmDspSysAllocInst(h,"ActiveMeas", NULL, 1, 100 );
  62. cmDspInst_t* modp = cmDspSysAllocInst(h,"ScMod", NULL, 2, r.modFn, "m1" );
  63. unsigned preGrpSymId = cmDspSysPresetRegisterGroup(h,"tl");
  64. unsigned cmpPreGrpSymId = cmDspSysPresetRegisterGroup(h,"tl_cmp");
  65. cmDspTlXform_t c0,c1;
  66. cmDspSysNewPage(h,"Controls-0");
  67. _cmDspSys_TlXformChain(h, &c0, preGrpSymId, cmpPreGrpSymId, modp, 0, 0 );
  68. cmDspSysNewPage(h,"Controls-1");
  69. _cmDspSys_TlXformChain(h, &c1, preGrpSymId, cmpPreGrpSymId, modp, 1, 1 );
  70. cmDspInst_t* ao0 = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 4 ); // Piano 1 Output
  71. cmDspInst_t* ao1 = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 5 ); // 2
  72. cmDspInst_t* ao2 = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 2 ); // Transform 1 OUtput
  73. cmDspInst_t* ao3 = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 3 ); // 2
  74. cmDspSysNewPage(h,"Main");
  75. cmDspInst_t* onb = cmDspSysAllocInst(h,"Button", "start", 2, kButtonDuiId, 1.0 );
  76. cmDspInst_t* offb = cmDspSysAllocInst(h,"Button", "stop", 2, kButtonDuiId, 1.0 );
  77. cmDspInst_t* prp = cmDspSysAllocInst(h,"Printer", NULL, 1, ">" );
  78. cmDspInst_t* prd = cmDspSysAllocInst(h,"Printer", NULL, 1, "DYN:" );
  79. cmDspInst_t* pre = cmDspSysAllocInst(h,"Printer", NULL, 1, "EVEN:" );
  80. cmDspInst_t* prt = cmDspSysAllocInst(h,"Printer", NULL, 1, "TEMPO:");
  81. cmDspInst_t* prc = cmDspSysAllocInst(h,"Printer", NULL, 1, "COST:");
  82. // Record <-> Live switches
  83. cmDspInst_t* tlRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0); // time line swich
  84. cmDspInst_t* mfpRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0);
  85. cmDspInst_t* amRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0);
  86. //cmDspSysNewColumn(h,0);
  87. cmDspInst_t* igain0 = cmDspSysAllocInst(h,"Scalar", "In Gain-0", 5, kNumberDuiId, 0.0, 100.0,0.01, 1.0 );
  88. cmDspInst_t* igain1 = cmDspSysAllocInst(h,"Scalar", "In Gain-1", 5, kNumberDuiId, 0.0, 100.0,0.01, 1.0 );
  89. //cmDspSysNewColumn(h,0);
  90. cmDspInst_t* ogain0 = cmDspSysAllocInst(h,"Scalar", "Dry Out Gain-0", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  91. cmDspInst_t* ogain1 = cmDspSysAllocInst(h,"Scalar", "Dry Out Gain-1", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  92. cmDspInst_t* ogain2 = cmDspSysAllocInst(h,"Scalar", "Wet Out Gain-2", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  93. cmDspInst_t* ogain3 = cmDspSysAllocInst(h,"Scalar", "Wet Out Gain-3", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  94. // Audio file recording
  95. cmDspInst_t* recdGain= cmDspSysAllocInst(h,"Scalar", "Recd Gain", 5, kNumberDuiId, 0.0, 100.0,0.01, 1.5 );
  96. cmDspInst_t* recdChk = cmDspSysAllocInst(h,"Button", "Record", 2, kCheckDuiId, 0.0 );
  97. cmDspInst_t* recdPtS = cmDspSysAllocInst(h,"GateToSym", NULL, 2, cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"open"),cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"close"));
  98. cmDspInst_t* afop = cmDspSysAllocInst(h,"AudioFileOut",NULL, 2, r.recordDir,2);
  99. cmDspInst_t* mi0p = cmDspSysAllocInst(h,"AMeter","In 0", 0);
  100. cmDspInst_t* mi1p = cmDspSysAllocInst(h,"AMeter","In 1", 0);
  101. cmDspInst_t* meas = cmDspSysAllocInst(h,"Scalar", "Meas", 5, kNumberDuiId, 1.0, 59.0,1.0, 1.0 );
  102. cmDspSysInstallCb( h, meas, "val", scp, "meas", NULL);
  103. cmDspSysInstallCb( h, meas, "val", tlp, "meas", NULL);
  104. //--------------- Preset controls
  105. cmDspSysNewColumn(h,0);
  106. cmDspInst_t* preset = cmDspSysAllocInst( h, "Preset", NULL, 1, preGrpSymId );
  107. cmDspInst_t* presetLbl = cmDspSysAllocInst( h, "Text", "Preset", 1, "" );
  108. cmDspInst_t* storeBtn = cmDspSysAllocButton( h, "store", 0);
  109. cmDspInst_t* recallBtn = cmDspSysAllocButton( h, "recall", 0);
  110. cmDspSysInstallCb( h, presetLbl, "val", preset, "label",NULL);
  111. cmDspSysInstallCb( h, storeBtn, "sym", preset, "cmd", NULL );
  112. cmDspSysInstallCb( h, recallBtn, "sym", preset, "cmd", NULL );
  113. cmDspInst_t* prePath = cmDspSysAllocInst( h, "Fname", "prePath", 3, true,NULL,r.tlPrefixPath);
  114. //cmDspSysNewColumn(h,0);
  115. //--------------- Recorded performance evaluation and Active Measurement related controls
  116. cmDspInst_t* clrBtn = cmDspSysAllocButton( h, "clear", 0);
  117. cmDspInst_t* prtBtn = cmDspSysAllocButton( h, "dump", 0);
  118. cmDspInst_t* amCmd = cmDspSysAllocInst( h, "PortToSym", NULL, 2, "add", "rewind" );
  119. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  120. return rc;
  121. // Output Audio file recording.
  122. cmDspSysInstallCb(h, recdGain,"val", afop, "gain0", NULL );
  123. cmDspSysInstallCb(h, recdGain,"val", afop, "gain1", NULL );
  124. cmDspSysInstallCb(h, recdChk, "out", recdPtS, "on", NULL );
  125. cmDspSysInstallCb(h, recdChk, "out", recdPtS, "off", NULL );
  126. cmDspSysInstallCb(h, recdPtS, "out", afop, "sel", NULL );
  127. // Audio connections
  128. cmDspSysConnectAudio( h, ai0, "out", ao0, "in" ); // dry signal through
  129. cmDspSysConnectAudio( h, ai1, "out", ao1, "in" ); //
  130. cmDspSysConnectAudio( h, ai0, "out", mi0p, "in" ); //
  131. cmDspSysConnectAudio( h, ai0, "out", c0.kr0, "in" ); // ain -> ch0.kr0
  132. cmDspSysConnectAudio( h, ai0, "out", c0.kr1, "in" ); // ain -> ch0.kr1
  133. cmDspSysConnectAudio( h, c0.cmp,"out", ao2, "in" ); // ch0.cmp -> aout
  134. cmDspSysConnectAudio( h, c0.cmp,"out", afop, "in0"); // ch0.cmp -> audio_file_out
  135. cmDspSysConnectAudio( h, ai1, "out", mi1p, "in" ); //
  136. cmDspSysConnectAudio( h, ai1, "out", c1.kr0, "in" ); // ain -> ch1.kr0
  137. cmDspSysConnectAudio( h, ai1, "out", c1.kr1, "in" ); // ain -> ch1.kr1
  138. cmDspSysConnectAudio( h, c1.cmp,"out", ao3, "in" ); // ch1.cmp -> aout
  139. cmDspSysConnectAudio( h, c1.cmp,"out", afop, "in1"); // ch1.cmp ->audio_file_out
  140. cmDspSysInstallCb( h, clrBtn, "sym", amp, "cmd", NULL ); // clear active meas.
  141. cmDspSysInstallCb( h, prtBtn, "sym", amp, "cmd", NULL ); // print active meas
  142. //cmDspSysInstallCb( h, prtBtn, "sym", scp, "cmd", NULL ); // print the score
  143. cmDspSysInstallCb( h, amCmd, "add", amp, "cmd", NULL ); // add active meas
  144. cmDspSysInstallCb( h, amCmd, "rewind", amp, "cmd", NULL ); // rewind active meas
  145. cmDspSysInstallCb( h, sfp, "out", amRt, "f-in", NULL ); // sfp-active meas router (rtr is switched by live btn)
  146. cmDspSysInstallCb( h, amRt, "f-out-0",amp, "sfloc", NULL );
  147. cmDspSysInstallCb( h, sfp, "vloc", amp, "loc", NULL ); // live meas's to active meas unit
  148. cmDspSysInstallCb( h, sfp, "vval", amp, "val", NULL ); //
  149. cmDspSysInstallCb( h, sfp, "vcost",amp, "cst", NULL ); //
  150. cmDspSysInstallCb( h, sfp, "vtyp", amp, "type", NULL ); //
  151. cmDspSysInstallCb( h, sfp, "vtyp", amCmd, "add", NULL); //
  152. // ***** delete this to prevent the score follower from driving the active-measure unit in 'live' mode
  153. cmDspSysInstallCb( h, amRt, "f-out-1",amp, "sfloc", NULL );
  154. // *****
  155. // active measure loc to xfad channel trigger
  156. cmDspSysInstallCb( h, amp, "scloc",c0.achan, "trig", NULL ); // See Also: modp.sw ->achan.trig
  157. cmDspSysInstallCb( h, amp, "scloc",c1.achan, "trig", NULL );
  158. cmDspSysInstallCb( h, recallBtn, "sym", c0.achan, "trig", NULL );
  159. cmDspSysInstallCb( h, recallBtn, "sym", c1.achan, "trig", NULL );
  160. cmDspSysInstallCb( h, amp, "even", pre, "in", NULL ); // active meas output to printers
  161. cmDspSysInstallCb( h, amp, "dyn", prd, "in", NULL );
  162. cmDspSysInstallCb( h, amp, "tempo", prt, "in", NULL );
  163. cmDspSysInstallCb( h, amp, "cost", prc, "in", NULL );
  164. // wave-table to time-line cursor
  165. //cmDspSysInstallCb( h, wtp, "fidx",tlp, "curs", NULL);
  166. cmDspSysInstallCb(h, prePath, "out", tlp, "path", NULL );
  167. // start connections
  168. cmDspSysInstallCb(h, onb, "sym", tlRt, "s-in", NULL );
  169. cmDspSysInstallCb(h, tlRt, "s-out-0",tlp, "reset", NULL );
  170. cmDspSysInstallCb(h, onb, "sym", scp, "send", NULL );
  171. cmDspSysInstallCb(h, onb, "sym", mfpRt,"s-in", NULL );
  172. cmDspSysInstallCb(h, mfpRt,"s-out-0",mfp, "sel", NULL );
  173. cmDspSysInstallCb(h, onb, "sym", pts, "on", NULL );
  174. cmDspSysInstallCb(h, pts, "on", modp, "cmd", NULL );
  175. cmDspSysInstallCb(h, onb, "sym", amCmd, "rewind", NULL );
  176. cmDspSysInstallCb(h, onb, "out", c0.achan,"reset", NULL );
  177. cmDspSysInstallCb(h, onb, "out", c1.achan,"reset", NULL );
  178. // stop connections
  179. cmDspSysInstallCb(h, tlp, "mfn", pts, "off", NULL ); // Prevents WT start on new audio file from TL.
  180. cmDspSysInstallCb(h, offb, "sym", mfp, "sel", NULL );
  181. cmDspSysInstallCb(h, offb, "sym", pts, "off", NULL );
  182. cmDspSysInstallCb(h, pts, "off", modp,"cmd", NULL );
  183. cmDspSysInstallCb(h, offb, "sym", mop, "reset", NULL );
  184. cmDspSysInstallCb(h, offb, "sym", mo2p,"reset", NULL );
  185. // time-line to MIDI file player selection
  186. cmDspSysInstallCb(h, tlp, "mbsi", mfp, "bsi", NULL );
  187. cmDspSysInstallCb(h, tlp, "mesi", mfp, "esi", NULL );
  188. cmDspSysInstallCb(h, tlp, "mfn", mfp, "fn", NULL );
  189. // score to score follower - to set initial search location
  190. cmDspSysInstallCb(h, scp, "sel", sfp, "index", NULL );
  191. cmDspSysInstallCb(h, scp, "sel", modp,"reset", NULL );
  192. cmDspSysInstallCb(h, scp, "sel", prp, "in", NULL );
  193. // MIDI file player to score follower and sampler
  194. cmDspSysInstallCb(h, mfp, "smpidx", sfp, "smpidx",NULL );
  195. cmDspSysInstallCb(h, mfp, "id", sfp, "muid", NULL );
  196. cmDspSysInstallCb(h, mfp, "d1", sfp, "d1", NULL );
  197. cmDspSysInstallCb(h, mfp, "d1", nmp, "d1", NULL );
  198. cmDspSysInstallCb(h, nmp, "d1", mop, "d1", NULL );
  199. cmDspSysInstallCb(h, nmp, "d1", mo2p, "d1", NULL );
  200. cmDspSysInstallCb(h, mfp, "d0", sfp, "d0", NULL );
  201. cmDspSysInstallCb(h, mfp, "d0", nmp, "d0", NULL );
  202. cmDspSysInstallCb(h, nmp, "d0", mop, "d0", NULL );
  203. cmDspSysInstallCb(h, nmp, "d0", mo2p, "d0", NULL );
  204. cmDspSysInstallCb(h, mfp, "status", sfp, "status",NULL );
  205. cmDspSysInstallCb(h, mfp, "status", nmp, "status",NULL );
  206. cmDspSysInstallCb(h, nmp, "status", mop, "status",NULL );
  207. cmDspSysInstallCb(h, nmp, "status", mo2p, "status",NULL );
  208. // score follower to recd_play,modulator and printers
  209. cmDspSysInstallCb(h, sfp, "out", modp, "index", NULL );
  210. cmDspSysInstallCb(h, sfp, "recent", prp, "in", NULL ); // report 'recent' but only act on 'max' loc index
  211. cmDspSysInstallCb(h, igain0, "val", ai0, "gain", NULL ); // input gain control
  212. cmDspSysInstallCb(h, igain1, "val", ai1, "gain", NULL );
  213. cmDspSysInstallCb(h, modp, "dgain0", ogain0, "val", NULL );
  214. cmDspSysInstallCb(h, modp, "dgain1", ogain1, "val", NULL );
  215. cmDspSysInstallCb(h, modp, "wgain0", ogain2, "val", NULL );
  216. cmDspSysInstallCb(h, modp, "wgain1", ogain3, "val", NULL );
  217. cmDspSysInstallCb(h, ogain0, "val", ao0, "gain", NULL ); // output gain control - dry 0
  218. cmDspSysInstallCb(h, ogain1, "val", ao1, "gain", NULL ); // dry 1
  219. cmDspSysInstallCb(h, ogain2, "val", ao2, "gain", NULL ); // wet 0
  220. cmDspSysInstallCb(h, ogain3, "val", ao3, "gain", NULL ); // wet 1
  221. return rc;
  222. }
  223. //------------------------------------------------------------------------------
  224. //)