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.

cmDspPgmKrTimeLineLite.c 13KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279
  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* ai0p = cmDspSysAllocInst(h,"AudioIn", NULL, 1, 0);
  52. cmDspInst_t* ai1p = 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* ao0p = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 2 );
  71. cmDspInst_t* ao1p = cmDspSysAllocInst(h,"AudioOut", NULL, 1, 3 );
  72. cmDspSysNewPage(h,"Main");
  73. cmDspInst_t* onb = cmDspSysAllocInst(h,"Button", "start", 2, kButtonDuiId, 1.0 );
  74. cmDspInst_t* offb = cmDspSysAllocInst(h,"Button", "stop", 2, kButtonDuiId, 1.0 );
  75. cmDspInst_t* prp = cmDspSysAllocInst(h,"Printer", NULL, 1, ">" );
  76. cmDspInst_t* prd = cmDspSysAllocInst(h,"Printer", NULL, 1, "DYN:" );
  77. cmDspInst_t* pre = cmDspSysAllocInst(h,"Printer", NULL, 1, "EVEN:" );
  78. cmDspInst_t* prt = cmDspSysAllocInst(h,"Printer", NULL, 1, "TEMPO:");
  79. cmDspInst_t* prc = cmDspSysAllocInst(h,"Printer", NULL, 1, "COST:");
  80. // Record <-> Live switches
  81. cmDspInst_t* tlRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0); // time line swich
  82. cmDspInst_t* mfpRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0);
  83. cmDspInst_t* amRt = cmDspSysAllocInst(h,"Router", NULL, 2, 2, 0);
  84. //cmDspSysNewColumn(h,0);
  85. cmDspInst_t* igain0 = cmDspSysAllocInst(h,"Scalar", "In Gain-0", 5, kNumberDuiId, 0.0, 100.0,0.01, 1.0 );
  86. cmDspInst_t* igain1 = cmDspSysAllocInst(h,"Scalar", "In Gain-1", 5, kNumberDuiId, 0.0, 100.0,0.01, 1.0 );
  87. //cmDspSysNewColumn(h,0);
  88. cmDspInst_t* ogain0 = cmDspSysAllocInst(h,"Scalar", "Out Gain-0", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  89. cmDspInst_t* ogain1 = cmDspSysAllocInst(h,"Scalar", "Out Gain-1", 5, kNumberDuiId, 0.0, 10.0,0.01, 1.0 );
  90. // Audio file recording
  91. cmDspInst_t* recdGain= cmDspSysAllocInst(h,"Scalar", "Recd Gain", 5, kNumberDuiId, 0.0, 100.0,0.01, 1.5 );
  92. cmDspInst_t* recdChk = cmDspSysAllocInst(h,"Button", "Record", 2, kCheckDuiId, 0.0 );
  93. cmDspInst_t* recdPtS = cmDspSysAllocInst(h,"GateToSym", NULL, 2, cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"open"),cmSymTblRegisterStaticSymbol(cmDspSysSymbolTable(h),"close"));
  94. cmDspInst_t* afop = cmDspSysAllocInst(h,"AudioFileOut",NULL, 2, r.recordDir,2);
  95. cmDspInst_t* mi0p = cmDspSysAllocInst(h,"AMeter","In 0", 0);
  96. cmDspInst_t* mi1p = cmDspSysAllocInst(h,"AMeter","In 1", 0);
  97. cmDspInst_t* meas = cmDspSysAllocInst(h,"Scalar", "Meas", 5, kNumberDuiId, 1.0, 59.0,1.0, 1.0 );
  98. cmDspSysInstallCb( h, meas, "val", scp, "meas", NULL);
  99. cmDspSysInstallCb( h, meas, "val", tlp, "meas", NULL);
  100. //--------------- Preset controls
  101. cmDspSysNewColumn(h,0);
  102. cmDspInst_t* preset = cmDspSysAllocInst( h, "Preset", NULL, 1, preGrpSymId );
  103. cmDspInst_t* presetLbl = cmDspSysAllocInst( h, "Text", "Preset", 1, "" );
  104. cmDspInst_t* storeBtn = cmDspSysAllocButton( h, "store", 0);
  105. cmDspInst_t* recallBtn = cmDspSysAllocButton( h, "recall", 0);
  106. cmDspSysInstallCb( h, presetLbl, "val", preset, "label",NULL);
  107. cmDspSysInstallCb( h, storeBtn, "sym", preset, "cmd", NULL );
  108. cmDspSysInstallCb( h, recallBtn, "sym", preset, "cmd", NULL );
  109. cmDspInst_t* prePath = cmDspSysAllocInst( h, "Fname", "prePath", 3, true,NULL,r.tlPrefixPath);
  110. //cmDspSysNewColumn(h,0);
  111. //--------------- Recorded performance evaluation and Active Measurement related controls
  112. cmDspInst_t* clrBtn = cmDspSysAllocButton( h, "clear", 0);
  113. cmDspInst_t* prtBtn = cmDspSysAllocButton( h, "dump", 0);
  114. cmDspInst_t* amCmd = cmDspSysAllocInst( h, "PortToSym", NULL, 2, "add", "rewind" );
  115. if((rc = cmDspSysLastRC(h)) != kOkDspRC )
  116. return rc;
  117. // Output Audio file recording.
  118. cmDspSysInstallCb(h, recdGain,"val", afop, "gain0", NULL );
  119. cmDspSysInstallCb(h, recdGain,"val", afop, "gain1", NULL );
  120. cmDspSysInstallCb(h, recdChk, "out", recdPtS, "on", NULL );
  121. cmDspSysInstallCb(h, recdChk, "out", recdPtS, "off", NULL );
  122. cmDspSysInstallCb(h, recdPtS, "out", afop, "sel", NULL );
  123. // Audio connections
  124. cmDspSysConnectAudio( h, ai0p, "out", mi0p, "in" ); //
  125. cmDspSysConnectAudio( h, ai0p, "out", c0.kr0, "in" ); // ain -> ch0.kr0
  126. cmDspSysConnectAudio( h, ai0p, "out", c0.kr1, "in" ); // ain -> ch0.kr1
  127. cmDspSysConnectAudio( h, c0.cmp, "out", ao0p, "in" ); // ch0.cmp -> aout
  128. cmDspSysConnectAudio( h, c0.cmp, "out", afop, "in0"); // ch0.cmp -> audio_file_out
  129. cmDspSysConnectAudio( h, ai1p, "out", mi1p, "in" ); //
  130. cmDspSysConnectAudio( h, ai1p, "out", c1.kr0, "in" ); // ain -> ch1.kr0
  131. cmDspSysConnectAudio( h, ai1p, "out", c1.kr1, "in" ); // ain -> ch1.kr1
  132. cmDspSysConnectAudio( h, c1.cmp, "out", ao1p, "in" ); // ch1.cmp -> aout
  133. cmDspSysConnectAudio( h, c1.cmp, "out", afop, "in1"); // ch1.cmp ->audio_file_out
  134. //cmDspSysConnectAudio(h, ai0p, "out", afop, "in0" ); // comp -> audio_file_out
  135. //cmDspSysConnectAudio(h, ai1p, "out", afop, "in1" );
  136. //cmDspSysConnectAudio(h, ai0p, "out", ao0p, "in" ); // direct through from ain to aout
  137. //cmDspSysConnectAudio(h, ai1p, "out", ao1p, "in" ); //
  138. cmDspSysInstallCb( h, clrBtn, "sym", amp, "cmd", NULL ); // clear active meas.
  139. cmDspSysInstallCb( h, prtBtn, "sym", amp, "cmd", NULL ); // print active meas
  140. //cmDspSysInstallCb( h, prtBtn, "sym", scp, "cmd", NULL ); // print the score
  141. cmDspSysInstallCb( h, amCmd, "add", amp, "cmd", NULL ); // add active meas
  142. cmDspSysInstallCb( h, amCmd, "rewind", amp, "cmd", NULL ); // rewind active meas
  143. cmDspSysInstallCb( h, sfp, "out", amRt, "f-in", NULL ); // sfp-active meas router (rtr is switched by live btn)
  144. cmDspSysInstallCb( h, amRt, "f-out-0",amp, "sfloc", NULL );
  145. cmDspSysInstallCb( h, sfp, "vloc", amp, "loc", NULL ); // live meas's to active meas unit
  146. cmDspSysInstallCb( h, sfp, "vval", amp, "val", NULL ); //
  147. cmDspSysInstallCb( h, sfp, "vcost",amp, "cst", NULL ); //
  148. cmDspSysInstallCb( h, sfp, "vtyp", amp, "type", NULL ); //
  149. cmDspSysInstallCb( h, sfp, "vtyp", amCmd, "add", NULL); //
  150. // ***** delete this to prevent the score follower from driving the active-measure unit in 'live' mode
  151. cmDspSysInstallCb( h, amRt, "f-out-1",amp, "sfloc", NULL );
  152. // *****
  153. // active measure loc to xfad channel trigger
  154. cmDspSysInstallCb( h, amp, "scloc",c0.achan, "trig", NULL ); // See Also: modp.sw ->achan.trig
  155. cmDspSysInstallCb( h, amp, "scloc",c1.achan, "trig", NULL );
  156. cmDspSysInstallCb( h, recallBtn, "sym", c0.achan, "trig", NULL );
  157. cmDspSysInstallCb( h, recallBtn, "sym", c1.achan, "trig", NULL );
  158. cmDspSysInstallCb( h, amp, "even", pre, "in", NULL ); // active meas output to printers
  159. cmDspSysInstallCb( h, amp, "dyn", prd, "in", NULL );
  160. cmDspSysInstallCb( h, amp, "tempo", prt, "in", NULL );
  161. cmDspSysInstallCb( h, amp, "cost", prc, "in", NULL );
  162. // wave-table to time-line cursor
  163. //cmDspSysInstallCb( h, wtp, "fidx",tlp, "curs", NULL);
  164. cmDspSysInstallCb(h, prePath, "out", tlp, "path", NULL );
  165. // start connections
  166. cmDspSysInstallCb(h, onb, "sym", tlRt, "s-in", NULL );
  167. cmDspSysInstallCb(h, tlRt, "s-out-0",tlp, "reset", NULL );
  168. cmDspSysInstallCb(h, onb, "sym", scp, "send", NULL );
  169. cmDspSysInstallCb(h, onb, "sym", mfpRt,"s-in", NULL );
  170. cmDspSysInstallCb(h, mfpRt,"s-out-0",mfp, "sel", NULL );
  171. cmDspSysInstallCb(h, onb, "sym", pts, "on", NULL );
  172. cmDspSysInstallCb(h, pts, "on", modp, "cmd", NULL );
  173. cmDspSysInstallCb(h, onb, "sym", amCmd, "rewind",NULL );
  174. cmDspSysInstallCb(h, onb, "out", c0.achan,"reset", NULL );
  175. cmDspSysInstallCb(h, onb, "out", c1.achan,"reset", NULL );
  176. // stop connections
  177. cmDspSysInstallCb(h, tlp, "mfn", pts, "off", NULL ); // Prevents WT start on new audio file from TL.
  178. cmDspSysInstallCb(h, offb, "sym", mfp, "sel", NULL );
  179. cmDspSysInstallCb(h, offb, "sym", pts, "off", NULL );
  180. cmDspSysInstallCb(h, pts, "off", modp,"cmd", NULL );
  181. cmDspSysInstallCb(h, offb, "sym", mop, "reset", NULL );
  182. cmDspSysInstallCb(h, offb, "sym", mo2p, "reset", NULL );
  183. // time-line to MIDI file player selection
  184. cmDspSysInstallCb(h, tlp, "mbsi", mfp, "bsi", NULL );
  185. cmDspSysInstallCb(h, tlp, "mesi", mfp, "esi", NULL );
  186. cmDspSysInstallCb(h, tlp, "mfn", mfp, "fn", NULL );
  187. // score to score follower - to set initial search location
  188. cmDspSysInstallCb(h, scp, "sel", sfp, "index", NULL );
  189. cmDspSysInstallCb(h, scp, "sel", modp,"reset", NULL );
  190. cmDspSysInstallCb(h, scp, "sel", prp, "in", NULL );
  191. // MIDI file player to score follower and sampler
  192. cmDspSysInstallCb(h, mfp, "smpidx", sfp, "smpidx",NULL );
  193. cmDspSysInstallCb(h, mfp, "id", sfp, "muid", NULL );
  194. cmDspSysInstallCb(h, mfp, "d1", sfp, "d1", NULL );
  195. cmDspSysInstallCb(h, mfp, "d1", nmp, "d1", NULL );
  196. cmDspSysInstallCb(h, nmp, "d1", mop, "d1", NULL );
  197. cmDspSysInstallCb(h, nmp, "d1", mo2p, "d1", NULL );
  198. cmDspSysInstallCb(h, mfp, "d0", sfp, "d0", NULL );
  199. cmDspSysInstallCb(h, mfp, "d0", nmp, "d0", NULL );
  200. cmDspSysInstallCb(h, nmp, "d0", mop, "d0", NULL );
  201. cmDspSysInstallCb(h, nmp, "d0", mo2p, "d0", NULL );
  202. cmDspSysInstallCb(h, mfp, "status", sfp, "status",NULL );
  203. cmDspSysInstallCb(h, mfp, "status", nmp, "status",NULL );
  204. cmDspSysInstallCb(h, nmp, "status", mop, "status",NULL );
  205. cmDspSysInstallCb(h, nmp, "status", mo2p, "status",NULL );
  206. // score follower to recd_play,modulator and printers
  207. cmDspSysInstallCb(h, sfp, "out", modp, "index", NULL );
  208. cmDspSysInstallCb(h, sfp, "recent", prp, "in", NULL ); // report 'recent' but only act on 'max' loc index
  209. cmDspSysInstallCb(h, igain0, "val", ai0p, "gain", NULL ); // input gain control
  210. cmDspSysInstallCb(h, igain1, "val", ai1p, "gain", NULL );
  211. cmDspSysInstallCb(h, ogain0, "val", ao0p, "gain", NULL ); // output gain control
  212. cmDspSysInstallCb(h, ogain1, "val", ao1p, "gain", NULL );
  213. return rc;
  214. }
  215. //------------------------------------------------------------------------------
  216. //)