Programmable real-time audio signal processing application
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

kcMain.cpp 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. #include <FL/Fl.H>
  2. #include <FL/Fl_Double_Window.H>
  3. #include <FL/Fl_Menu_Item.H>
  4. #include <Fl/Fl_Menu_Bar.H>
  5. #include <Fl/Fl_Button.H>
  6. #include <Fl/Fl_Text_Buffer.H>
  7. #include <Fl/Fl_Text_Display.H>
  8. #include <Fl/Fl_Tabs.H>
  9. #include <Fl/Fl_File_Chooser.H>
  10. #include "Fl_Splitter.h"
  11. #include "cmGlobal.h"
  12. #include "cmFloatTypes.h"
  13. #include "cmRpt.h"
  14. #include "cmErr.h"
  15. #include "cmCtx.h"
  16. #include "cmMem.h"
  17. #include "cmMallocDebug.h"
  18. #include "cmLinkedHeap.h"
  19. #include "cmJson.h"
  20. #include "cmThread.h"
  21. #include "cmText.h"
  22. #include "cmFileSys.h"
  23. #include "cmDspValue.h"
  24. #include "cmMsgProtocol.h"
  25. #include "cmAudDspIF.h"
  26. #include "cmAudDspLocal.h"
  27. #include "cmAudioFile.h"
  28. #include "cmAudioFileMgr.h"
  29. #include "cmMidi.h"
  30. #include "cmMidiFile.h"
  31. #include "cmTimeLine.h"
  32. #include "cmScore.h"
  33. #include "cmdIf.h"
  34. #include "tlCtl.h"
  35. #include "kcApp.h"
  36. kcApp* kcAppPtr = NULL;
  37. void print( void*, const cmChar_t* text)
  38. { puts(text); }
  39. cmRC_t print_queue_cb(void* userCbPtr, unsigned msgByteCnt, const void* msgDataPtr )
  40. {
  41. print(NULL,(const char*)msgDataPtr);
  42. return cmOkRC;
  43. }
  44. cmRC_t handleSsInitMsg( void* cbDataPtr, const cmAudioSysSsInitMsg_t* r, const char* iDevLabel, const char* oDevLabel )
  45. { kcAppPtr->_handleSsInitMsg(r,iDevLabel,oDevLabel); return cmOkRC; }
  46. cmRC_t handleStatusMsg( void* cbDataPtr, const cmAudioSysStatus_t* r, const double* iMeterArray, const double* oMeterArray )
  47. { kcAppPtr->_handleStatusMsg(r,iMeterArray,oMeterArray); return cmOkRC;}
  48. cmRC_t handleUiMsg( void* cbDataPtr, const cmDspUiHdr_t* r )
  49. { kcAppPtr->_handleUiMsg(r); return cmOkRC;}
  50. int main( int argc, char* argv[] )
  51. {
  52. cmCtx_t ctx;
  53. cmTsMp1cH_t printqH = cmTsMp1cNullHandle;
  54. int appWndW = 1600;
  55. int appWndH = 750;
  56. const char* appPrefDir = "kc";
  57. const char* appTitle = "KC Console";
  58. bool memDebugFl = cmDEBUG_FL;
  59. unsigned memPadByteCnt = memDebugFl ? 8 : 0;
  60. unsigned memAlignByteCnt = 16;
  61. unsigned memFlags = memDebugFl ? (kTrackMmFl | kDeferFreeMmFl | kFillUninitMmFl) : 0;
  62. cmAdlH_t adlH = cmAdlNullHandle;
  63. cmAiH_t aiH = cmAiNullHandle;
  64. cmAdIfDispatch_t r;
  65. cmCtxSetup(&ctx,appTitle,print,print,NULL,memPadByteCnt,memAlignByteCnt,memFlags);
  66. // initialize the memory mgr
  67. if(cmMdInitialize( memPadByteCnt, memAlignByteCnt, memFlags, &ctx.rpt ) != kOkMmRC )
  68. {
  69. cmErrMsg(&ctx.err,kMemFailKmRC,"Heap initialization failed.");
  70. goto errLabel;
  71. }
  72. // initialize the file system
  73. if( cmFsInitialize( &ctx, appPrefDir ) != kOkFsRC )
  74. cmErrMsg(&ctx.err,kFileSysFailKmRC,"File system initialization failed.");
  75. // initialize the text system
  76. if( cmTsInitialize(&ctx) != kOkTxRC )
  77. cmErrMsg(&ctx.err,kTextSysFailKmRC,"Text system initialization failed.");
  78. // create the print queue
  79. if( cmTsMp1cCreate( &printqH, 8192, print_queue_cb, NULL, NULL ) != kOkThRC )
  80. cmErrMsg(&ctx.err,kQueueFailKmRC,"Print queue creation failed.");
  81. r.cbDataPtr = NULL;
  82. r.ssInitFunc = handleSsInitMsg;
  83. r.statusFunc = handleStatusMsg;
  84. r.uiFunc = handleUiMsg;
  85. // initialize the audio engine
  86. if( cmAudDspLocalAllocate(&ctx,&adlH,&r) != kOkAdlRC )
  87. cmErrMsg(&ctx.err,kEngFailKmRC,"The audio DSP local server allocation failed.");
  88. else
  89. if(cmAdIfIsValid(aiH = cmAudDspLocalIF_Handle(adlH)) == false )
  90. cmErrMsg(&ctx.err,kEngFailKmRC,"The audio DSP interface handle is not valid.");
  91. if( cmErrLastRC(&ctx.err) == kOkKmRC )
  92. {
  93. kcAppPtr = new kcApp(&ctx, printqH, appWndW, appWndH, appTitle, aiH, argc, argv);
  94. cmAudDspLocalSendSetup(adlH);
  95. Fl::run();
  96. delete kcAppPtr;
  97. kcAppPtr=NULL;
  98. // reset the pgm context and print queue console output to stdout
  99. cmRptSetup(&ctx.rpt,print,print,NULL);
  100. cmTsMp1cSetCbFunc(printqH, print_queue_cb, NULL );
  101. }
  102. // empty any pending text to stdout
  103. while( cmTsMp1cMsgWaiting(printqH) )
  104. if( cmTsMp1cDequeueMsg(printqH, NULL, 0) != kOkThRC )
  105. cmErrMsg(&ctx.err,kQueueFailKmRC,"Print dequeue failed.");
  106. // release the engine
  107. if( cmAudDspLocalFree(&adlH) != kOkAdlRC )
  108. cmErrMsg(&ctx.err,kEngFailKmRC,"Audio DSP release failed.");
  109. // destroy the print queue
  110. if( cmTsMp1cDestroy(&printqH) != kOkThRC )
  111. cmErrMsg(&ctx.err,kQueueFailKmRC,"Print queue destroy failed.");
  112. // finalize the text system
  113. if( cmTsFinalize() != kOkTxRC )
  114. cmErrMsg(&ctx.err,kTextSysFailKmRC,"Text system finalization failed.");
  115. // finalize the file system
  116. if( cmFsFinalize() != kOkFsRC )
  117. cmErrMsg(&ctx.err,kFileSysFailKmRC,"File system finalize failed.");
  118. // report memory mgr errors
  119. if( cmMdIsValid() )
  120. cmMdReport( kIgnoreNormalMmFl );
  121. // finalize the memory manager
  122. if( cmMdFinalize() != kOkMmRC )
  123. cmErrMsg(&ctx.err,kMemFailKmRC,"Heap finalization failed.");
  124. errLabel:
  125. return 0;
  126. }