ソースを参照

cmDspBuiltIn.c : cmDspMidiIn now outputs MIDI timestamps.

Fixed bug in cmDspCheckbox which prevented correct symbols from being stored.
Added cmSyncRecdClassCons to the built in processor list.
master
kevin 10年前
コミット
94da1333af
1個のファイルの変更26行の追加8行の削除
  1. 26
    8
      dsp/cmDspBuiltIn.c

+ 26
- 8
dsp/cmDspBuiltIn.c ファイルの表示

25
 #include "cmThread.h"
25
 #include "cmThread.h"
26
 #include "cmUdpPort.h"
26
 #include "cmUdpPort.h"
27
 #include "cmUdpNet.h"
27
 #include "cmUdpNet.h"
28
+#include "cmTime.h"
28
 #include "cmAudioSys.h"
29
 #include "cmAudioSys.h"
29
 #include "cmDspSys.h"
30
 #include "cmDspSys.h"
30
 
31
 
995
   kSmpIdxMiId,
996
   kSmpIdxMiId,
996
   kStatusMiId,
997
   kStatusMiId,
997
   kD0MiId,
998
   kD0MiId,
998
-  kD1MiId
999
+  kD1MiId,
1000
+  kSecMiId,
1001
+  kNSecMiId
999
 };
1002
 };
1000
 
1003
 
1001
 
1004
 
1006
   cmDspInst_t inst;
1009
   cmDspInst_t inst;
1007
   unsigned midiSymId;
1010
   unsigned midiSymId;
1008
   unsigned prevSmpIdx;
1011
   unsigned prevSmpIdx;
1012
+  cmTimeSpec_t prevTimeStamp;
1009
 } cmDspMidiIn_t;
1013
 } cmDspMidiIn_t;
1010
 
1014
 
1011
 cmDspInst_t*  _cmDspMidiInAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsigned storeSymId, unsigned instSymId, unsigned id, unsigned va_cnt, va_list vl )
1015
 cmDspInst_t*  _cmDspMidiInAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsigned storeSymId, unsigned instSymId, unsigned id, unsigned va_cnt, va_list vl )
1018
     { "status", kStatusMiId, 0,  0,  kOutDsvFl | kUIntDsvFl, "MIDI status" },
1022
     { "status", kStatusMiId, 0,  0,  kOutDsvFl | kUIntDsvFl, "MIDI status" },
1019
     { "d0",     kD0MiId,     0,  0,  kOutDsvFl | kUIntDsvFl, "MIDI channel message d0" },
1023
     { "d0",     kD0MiId,     0,  0,  kOutDsvFl | kUIntDsvFl, "MIDI channel message d0" },
1020
     { "d1",     kD1MiId,     0,  0,  kOutDsvFl | kUIntDsvFl, "MIDI channel message d1" },
1024
     { "d1",     kD1MiId,     0,  0,  kOutDsvFl | kUIntDsvFl, "MIDI channel message d1" },
1025
+    { "sec",    kSecMiId,    0,  0,  kOutDsvFl | kUIntDsvFl, "Time stamp integer seconds."},
1026
+    { "nsec",   kNSecMiId,   0,  0,  kOutDsvFl | kUIntDsvFl, "Time stamp fractional second (nanoseconds)."},
1021
     { NULL, 0, 0, 0, 0 }
1027
     { NULL, 0, 0, 0, 0 }
1022
   };
1028
   };
1023
 
1029
 
1052
     for(i=0; i<pkt->msgCnt; ++i)
1058
     for(i=0; i<pkt->msgCnt; ++i)
1053
     {
1059
     {
1054
       cmMidiMsg* m = pkt->msgArray + i;
1060
       cmMidiMsg* m = pkt->msgArray + i;
1055
-      unsigned   deltaSmpCnt = floor((m->deltaUs * cmDspSampleRate(ctx)) / 1000000.0);
1061
+      unsigned   deltaSmpCnt = 0;
1062
+      if( p->prevTimeStamp.tv_sec!=0 && p->prevTimeStamp.tv_nsec!=0 )
1063
+        deltaSmpCnt = floor(cmTimeElapsedMicros(&p->prevTimeStamp,&m->timeStamp) * cmDspSampleRate(ctx) / 1000000.0);
1056
 
1064
 
1057
       if( p->prevSmpIdx == 0 )
1065
       if( p->prevSmpIdx == 0 )
1058
         p->prevSmpIdx = ctx->cycleCnt * cmDspSamplesPerCycle(ctx);
1066
         p->prevSmpIdx = ctx->cycleCnt * cmDspSamplesPerCycle(ctx);
1060
         p->prevSmpIdx += deltaSmpCnt;
1068
         p->prevSmpIdx += deltaSmpCnt;
1061
 
1069
 
1062
       cmDspSetUInt(ctx, inst, kSmpIdxMiId, p->prevSmpIdx );
1070
       cmDspSetUInt(ctx, inst, kSmpIdxMiId, p->prevSmpIdx );
1071
+      cmDspSetUInt(ctx, inst, kSecMiId,    m->timeStamp.tv_sec);
1072
+      cmDspSetUInt(ctx, inst, kNSecMiId,   m->timeStamp.tv_nsec);
1063
       cmDspSetUInt(ctx, inst, kD1MiId,     m->d1 );
1073
       cmDspSetUInt(ctx, inst, kD1MiId,     m->d1 );
1064
       cmDspSetUInt(ctx, inst, kD0MiId,     m->d0 );
1074
       cmDspSetUInt(ctx, inst, kD0MiId,     m->d0 );
1065
       cmDspSetUInt(ctx, inst, kStatusMiId, m->status );
1075
       cmDspSetUInt(ctx, inst, kStatusMiId, m->status );
1076
+
1077
+      p->prevTimeStamp = m->timeStamp;
1066
     }
1078
     }
1067
   }
1079
   }
1068
 
1080
 
2199
 
2211
 
2200
   cmDspCheckbox_t* p = cmDspInstAlloc(cmDspCheckbox_t,ctx,classPtr,args,instSymId,id,storeSymId,va_cnt,vl);
2212
   cmDspCheckbox_t* p = cmDspInstAlloc(cmDspCheckbox_t,ctx,classPtr,args,instSymId,id,storeSymId,va_cnt,vl);
2201
 
2213
 
2214
+  p->resetSymId = cmSymTblRegisterStaticSymbol(ctx->stH,"_reset");
2215
+
2216
+  cmDspSetDefaultStrcz( ctx, &p->inst, kSym1CbId, NULL, "on");
2217
+  cmDspSetDefaultStrcz( ctx, &p->inst, kSym0CbId, NULL, "off");
2218
+
2219
+  p->onSymId    = cmSymTblRegisterSymbol(ctx->stH, cmDspDefaultStrcz(&p->inst,kSym1CbId));
2220
+  p->offSymId   = cmSymTblRegisterSymbol(ctx->stH, cmDspDefaultStrcz(&p->inst,kSym0CbId));
2221
+
2222
+
2223
+  bool fl = cmDspDefaultDouble(&p->inst,kOutCbId)!=0;
2202
   
2224
   
2203
   cmDspSetDefaultDouble(ctx, &p->inst, kVal1CbId, 0.0, 1.0);
2225
   cmDspSetDefaultDouble(ctx, &p->inst, kVal1CbId, 0.0, 1.0);
2204
   cmDspSetDefaultDouble(ctx, &p->inst, kVal0CbId, 0.0, 0.0);
2226
   cmDspSetDefaultDouble(ctx, &p->inst, kVal0CbId, 0.0, 0.0);
2205
-  cmDspSetDefaultStrcz( ctx, &p->inst, kSym1CbId, NULL, "on");
2206
-  cmDspSetDefaultStrcz( ctx, &p->inst, kSym0CbId, NULL, "off");
2207
   cmDspSetDefaultDouble(ctx, &p->inst, kOutCbId,  0.0, 0.0);
2227
   cmDspSetDefaultDouble(ctx, &p->inst, kOutCbId,  0.0, 0.0);
2208
-  cmDspSetDefaultSymbol(ctx, &p->inst, kSymCbId,        instSymId );
2228
+  cmDspSetDefaultSymbol(ctx, &p->inst, kSymCbId,  fl ? p->onSymId : p->offSymId );
2209
   cmDspSetDefaultStrcz( ctx, &p->inst, kLblCbId, NULL, cmSymTblLabel(ctx->stH,instSymId));
2229
   cmDspSetDefaultStrcz( ctx, &p->inst, kLblCbId, NULL, cmSymTblLabel(ctx->stH,instSymId));
2210
 
2230
 
2211
-  p->resetSymId = cmSymTblRegisterStaticSymbol(ctx->stH,"_reset");
2212
-  p->onSymId    = cmSymTblRegisterSymbol(ctx->stH, cmDspDefaultStrcz(&p->inst,kSym1CbId));
2213
-  p->offSymId   = cmSymTblRegisterSymbol(ctx->stH, cmDspDefaultStrcz(&p->inst,kSym0CbId));
2214
 
2231
 
2215
   // create the UI control
2232
   // create the UI control
2216
   cmDspUiButtonCreate(ctx,&p->inst,kCheckDuiId,kOutCbId,kLblCbId);
2233
   cmDspUiButtonCreate(ctx,&p->inst,kCheckDuiId,kOutCbId,kLblCbId);
5587
   cmNanoMapClassCons,
5604
   cmNanoMapClassCons,
5588
   cmRecdPlayClassCons,
5605
   cmRecdPlayClassCons,
5589
   cmGoertzelClassCons,
5606
   cmGoertzelClassCons,
5607
+  cmSyncRecdClassCons,
5590
   NULL,
5608
   NULL,
5591
 };
5609
 };
5592
 
5610
 

読み込み中…
キャンセル
保存