|
@@ -25,6 +25,7 @@
|
25
|
25
|
#include "cmThread.h"
|
26
|
26
|
#include "cmUdpPort.h"
|
27
|
27
|
#include "cmUdpNet.h"
|
|
28
|
+#include "cmTime.h"
|
28
|
29
|
#include "cmAudioSys.h"
|
29
|
30
|
#include "cmDspSys.h"
|
30
|
31
|
|
|
@@ -995,7 +996,9 @@ enum
|
995
|
996
|
kSmpIdxMiId,
|
996
|
997
|
kStatusMiId,
|
997
|
998
|
kD0MiId,
|
998
|
|
- kD1MiId
|
|
999
|
+ kD1MiId,
|
|
1000
|
+ kSecMiId,
|
|
1001
|
+ kNSecMiId
|
999
|
1002
|
};
|
1000
|
1003
|
|
1001
|
1004
|
|
|
@@ -1006,6 +1009,7 @@ typedef struct
|
1006
|
1009
|
cmDspInst_t inst;
|
1007
|
1010
|
unsigned midiSymId;
|
1008
|
1011
|
unsigned prevSmpIdx;
|
|
1012
|
+ cmTimeSpec_t prevTimeStamp;
|
1009
|
1013
|
} cmDspMidiIn_t;
|
1010
|
1014
|
|
1011
|
1015
|
cmDspInst_t* _cmDspMidiInAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsigned storeSymId, unsigned instSymId, unsigned id, unsigned va_cnt, va_list vl )
|
|
@@ -1018,6 +1022,8 @@ cmDspInst_t* _cmDspMidiInAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsigne
|
1018
|
1022
|
{ "status", kStatusMiId, 0, 0, kOutDsvFl | kUIntDsvFl, "MIDI status" },
|
1019
|
1023
|
{ "d0", kD0MiId, 0, 0, kOutDsvFl | kUIntDsvFl, "MIDI channel message d0" },
|
1020
|
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
|
1027
|
{ NULL, 0, 0, 0, 0 }
|
1022
|
1028
|
};
|
1023
|
1029
|
|
|
@@ -1052,7 +1058,9 @@ cmDspRC_t _cmDspMidiInRecvFunc( cmDspCtx_t* ctx, struct cmDspInst_str* inst,
|
1052
|
1058
|
for(i=0; i<pkt->msgCnt; ++i)
|
1053
|
1059
|
{
|
1054
|
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
|
1065
|
if( p->prevSmpIdx == 0 )
|
1058
|
1066
|
p->prevSmpIdx = ctx->cycleCnt * cmDspSamplesPerCycle(ctx);
|
|
@@ -1060,9 +1068,13 @@ cmDspRC_t _cmDspMidiInRecvFunc( cmDspCtx_t* ctx, struct cmDspInst_str* inst,
|
1060
|
1068
|
p->prevSmpIdx += deltaSmpCnt;
|
1061
|
1069
|
|
1062
|
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
|
1073
|
cmDspSetUInt(ctx, inst, kD1MiId, m->d1 );
|
1064
|
1074
|
cmDspSetUInt(ctx, inst, kD0MiId, m->d0 );
|
1065
|
1075
|
cmDspSetUInt(ctx, inst, kStatusMiId, m->status );
|
|
1076
|
+
|
|
1077
|
+ p->prevTimeStamp = m->timeStamp;
|
1066
|
1078
|
}
|
1067
|
1079
|
}
|
1068
|
1080
|
|
|
@@ -2199,18 +2211,23 @@ cmDspInst_t* _cmDspCheckboxAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsig
|
2199
|
2211
|
|
2200
|
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
|
2225
|
cmDspSetDefaultDouble(ctx, &p->inst, kVal1CbId, 0.0, 1.0);
|
2204
|
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
|
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
|
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
|
2232
|
// create the UI control
|
2216
|
2233
|
cmDspUiButtonCreate(ctx,&p->inst,kCheckDuiId,kOutCbId,kLblCbId);
|
|
@@ -5587,6 +5604,7 @@ cmDspClassConsFunc_t _cmDspClassBuiltInArray[] =
|
5587
|
5604
|
cmNanoMapClassCons,
|
5588
|
5605
|
cmRecdPlayClassCons,
|
5589
|
5606
|
cmGoertzelClassCons,
|
|
5607
|
+ cmSyncRecdClassCons,
|
5590
|
5608
|
NULL,
|
5591
|
5609
|
};
|
5592
|
5610
|
|