Merge branch 'master' of klarke.webfactional.com:webapps/git/repos/libcm
This commit is contained in:
commit
9dc8a4eb8c
@ -613,29 +613,31 @@ cmScRC_t _cmScParseMarkers( cmSc_t* p, unsigned scoreIdx, const cmChar_t* text,
|
|||||||
if( cmSymTblIsValid(p->stH) == false )
|
if( cmSymTblIsValid(p->stH) == false )
|
||||||
return kOkScRC;
|
return kOkScRC;
|
||||||
|
|
||||||
// go to command/id space
|
for(;(cp = cmTextNextNonWhiteC(cp)) != NULL; cp=ep )
|
||||||
if((ip = cmTextNextWhiteOrEosC(text)) == NULL )
|
|
||||||
goto errLabel;
|
|
||||||
|
|
||||||
// goto label
|
|
||||||
if((ip = cmTextNextNonWhiteC(ip)) == NULL )
|
|
||||||
goto errLabel;
|
|
||||||
|
|
||||||
// goto end of label
|
|
||||||
if((ep = cmTextNextWhiteOrEosC(ip)) == NULL )
|
|
||||||
goto errLabel;
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
unsigned n = (ep-ip)+1;
|
// go to command/id space
|
||||||
cmChar_t markTextStr[n+1];
|
if((ip = cmTextNextWhiteOrEosC(cp)) == NULL )
|
||||||
strncpy(markTextStr,ip,n);
|
goto errLabel;
|
||||||
|
|
||||||
// for each command code
|
// goto label
|
||||||
// (there may be more than one character)
|
if((ip = cmTextNextNonWhiteC(ip)) == NULL )
|
||||||
for(; *cp && !isspace(*cp); ++cp)
|
goto errLabel;
|
||||||
|
|
||||||
|
// goto end of label
|
||||||
|
if((ep = cmTextNextWhiteOrEosC(ip)) == NULL )
|
||||||
|
goto errLabel;
|
||||||
|
else
|
||||||
{
|
{
|
||||||
cmMarkScMId_t cmdId = kInvalidScMId;
|
unsigned n = (ep-ip)+1;
|
||||||
|
cmChar_t markTextStr[n+1];
|
||||||
|
strncpy(markTextStr,ip,n);
|
||||||
|
markTextStr[n] = 0;
|
||||||
|
|
||||||
|
// remove any trailing white space
|
||||||
|
cmTextTrimEnd(markTextStr);
|
||||||
|
|
||||||
|
cmMarkScMId_t cmdId = kInvalidScMId;
|
||||||
|
|
||||||
switch( *cp )
|
switch( *cp )
|
||||||
{
|
{
|
||||||
case 'c': cmdId = kRecdBegScMId; break;
|
case 'c': cmdId = kRecdBegScMId; break;
|
||||||
@ -653,6 +655,8 @@ cmScRC_t _cmScParseMarkers( cmSc_t* p, unsigned scoreIdx, const cmChar_t* text,
|
|||||||
mp->scoreIdx = scoreIdx;
|
mp->scoreIdx = scoreIdx;
|
||||||
mp->csvRowIdx = rowIdx;
|
mp->csvRowIdx = rowIdx;
|
||||||
|
|
||||||
|
//printf("%i %c '%s'\n",rowIdx,*cp,markTextStr);
|
||||||
|
|
||||||
// insert the new mark at the end of the list
|
// insert the new mark at the end of the list
|
||||||
if( p->markList == NULL )
|
if( p->markList == NULL )
|
||||||
p->markList = mp;
|
p->markList = mp;
|
||||||
@ -665,7 +669,9 @@ cmScRC_t _cmScParseMarkers( cmSc_t* p, unsigned scoreIdx, const cmChar_t* text,
|
|||||||
ep->link = mp;
|
ep->link = mp;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return kOkScRC;
|
return kOkScRC;
|
||||||
|
|
||||||
errLabel:
|
errLabel:
|
||||||
|
43
cmProc4.c
43
cmProc4.c
@ -4352,6 +4352,49 @@ cmRC_t cmRecdPlayEndRecord( cmRecdPlay* p, unsigned labelSymId )
|
|||||||
return cmCtxRtCondition( &p->obj, cmInvalidArgRC, "The fragment label symbol id '%i' not found for 'end record'.",labelSymId);
|
return cmCtxRtCondition( &p->obj, cmInvalidArgRC, "The fragment label symbol id '%i' not found for 'end record'.",labelSymId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmRC_t cmRecdPlayInsertRecord(cmRecdPlay* p, unsigned labelSymId, const cmChar_t* wavFn )
|
||||||
|
{
|
||||||
|
cmRC_t rc = cmOkRC;
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
for(i=0; i<p->fragCnt; ++i)
|
||||||
|
if( p->frags[i].labelSymId == labelSymId )
|
||||||
|
{
|
||||||
|
cmAudioFileH_t afH = cmNullAudioFileH;
|
||||||
|
cmAudioFileInfo_t afInfo;
|
||||||
|
cmRC_t afRC = kOkAfRC;
|
||||||
|
|
||||||
|
// open the audio file
|
||||||
|
if( cmAudioFileIsValid( afH = cmAudioFileNewOpen(wavFn, &afInfo, &afRC, p->obj.err.rpt )) == false )
|
||||||
|
return cmCtxRtCondition( &p->obj, cmInvalidArgRC, "The audio file '%s' could not be opened'.",cmStringNullGuard(wavFn));
|
||||||
|
|
||||||
|
// ignore blank
|
||||||
|
if( afInfo.frameCnt == 0 )
|
||||||
|
return cmOkRC;
|
||||||
|
|
||||||
|
// allocate buffer space
|
||||||
|
unsigned j;
|
||||||
|
for(j=0; j<p->chCnt; ++j)
|
||||||
|
p->frags[i].chArray[j] = cmMemResize(cmSample_t,p->frags[i].chArray[j],afInfo.frameCnt);
|
||||||
|
|
||||||
|
p->frags[i].allocCnt = afInfo.frameCnt;
|
||||||
|
|
||||||
|
// read samples into the buffer space
|
||||||
|
unsigned chIdx = 0;
|
||||||
|
unsigned chCnt = cmMin(p->chCnt,afInfo.chCnt);
|
||||||
|
unsigned actFrmCnt = 0;
|
||||||
|
if( cmAudioFileReadSample(afH,afInfo.frameCnt,chIdx,chCnt,p->frags[i].chArray, &actFrmCnt) != kOkAfRC )
|
||||||
|
return cmCtxRtCondition(&p->obj, cmSubSysFailRC, "Read failed on the audio file '%s'.",cmStringNullGuard(wavFn));
|
||||||
|
|
||||||
|
p->frags[i].recdIdx = actFrmCnt;
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
return cmCtxRtCondition( &p->obj, cmInvalidArgRC, "The fragment label symbol id '%i' not found for 'begin record'.",labelSymId);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
cmRC_t cmRecdPlayBeginPlay( cmRecdPlay* p, unsigned labelSymId )
|
cmRC_t cmRecdPlayBeginPlay( cmRecdPlay* p, unsigned labelSymId )
|
||||||
{
|
{
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
@ -688,6 +688,8 @@ extern "C" {
|
|||||||
|
|
||||||
cmRC_t cmRecdPlayBeginRecord( cmRecdPlay* p, unsigned labelSymId );
|
cmRC_t cmRecdPlayBeginRecord( cmRecdPlay* p, unsigned labelSymId );
|
||||||
cmRC_t cmRecdPlayEndRecord( cmRecdPlay* p, unsigned labelSymId );
|
cmRC_t cmRecdPlayEndRecord( cmRecdPlay* p, unsigned labelSymId );
|
||||||
|
cmRC_t cmRecdPlayInsertRecord(cmRecdPlay* p, unsigned labelSymId, const cmChar_t* wavFn );
|
||||||
|
|
||||||
cmRC_t cmRecdPlayBeginPlay( cmRecdPlay* p, unsigned labelSymId );
|
cmRC_t cmRecdPlayBeginPlay( cmRecdPlay* p, unsigned labelSymId );
|
||||||
cmRC_t cmRecdPlayEndPlay( cmRecdPlay* p, unsigned labelSymId );
|
cmRC_t cmRecdPlayEndPlay( cmRecdPlay* p, unsigned labelSymId );
|
||||||
|
|
||||||
|
43
cmText.c
43
cmText.c
@ -539,6 +539,49 @@ void cmTextClip( cmChar_t* s, unsigned n )
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cmChar_t* cmTextTrimBegin( cmChar_t* s )
|
||||||
|
{
|
||||||
|
if( s==NULL || strlen(s) == 0 )
|
||||||
|
return s;
|
||||||
|
|
||||||
|
cmChar_t* s0 = cmTextNextNonWhite(s);
|
||||||
|
|
||||||
|
// no non-white char's exist
|
||||||
|
if( s0 == NULL )
|
||||||
|
{
|
||||||
|
s[0] = 0;
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( s0 != s )
|
||||||
|
cmTextShrinkS(s,s,s0-s);
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmChar_t* cmTextTrimEnd( cmChar_t* s )
|
||||||
|
{
|
||||||
|
unsigned sn;
|
||||||
|
|
||||||
|
if( s==NULL || (sn = strlen(s))==0)
|
||||||
|
return s;
|
||||||
|
|
||||||
|
cmChar_t* s0 = cmTextLastNonWhiteChar(s);
|
||||||
|
|
||||||
|
if(s0-s+1 < sn )
|
||||||
|
s[s0-s+1] = 0;
|
||||||
|
|
||||||
|
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmChar_t* cmTextTrim( cmChar_t* s)
|
||||||
|
{
|
||||||
|
cmTextTrimBegin(s);
|
||||||
|
cmTextTrimEnd(s);
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
cmChar_t* cmTextExpandS( cmChar_t* s, const cmChar_t* t, unsigned tn )
|
cmChar_t* cmTextExpandS( cmChar_t* s, const cmChar_t* t, unsigned tn )
|
||||||
{ return cmVOC_Expand(s,strlen(s)+1,t,tn); }
|
{ return cmVOC_Expand(s,strlen(s)+1,t,tn); }
|
||||||
|
5
cmText.h
5
cmText.h
@ -166,6 +166,11 @@ extern "C" {
|
|||||||
// Remove the last n characters from s by inserting a '\0' at s[ strlen(s)-n ].
|
// Remove the last n characters from s by inserting a '\0' at s[ strlen(s)-n ].
|
||||||
void cmTextClip( cmChar_t* s, unsigned n );
|
void cmTextClip( cmChar_t* s, unsigned n );
|
||||||
|
|
||||||
|
// Trim white space from the begining/end/both of a string
|
||||||
|
cmChar_t* cmTextTrimBegin( cmChar_t* s );
|
||||||
|
cmChar_t* cmTextTrimEnd( cmChar_t* s );
|
||||||
|
cmChar_t* cmTextTrim( cmChar_t* );
|
||||||
|
|
||||||
// Expand s by copying all bytes past t to t+tn.
|
// Expand s by copying all bytes past t to t+tn.
|
||||||
cmChar_t* cmTextExpandS( cmChar_t* s, const cmChar_t* t, unsigned tn );
|
cmChar_t* cmTextExpandS( cmChar_t* s, const cmChar_t* t, unsigned tn );
|
||||||
|
|
||||||
|
179
dsp/cmDspKr.c
179
dsp/cmDspKr.c
@ -27,7 +27,6 @@
|
|||||||
#include "cmDspSys.h"
|
#include "cmDspSys.h"
|
||||||
#include "cmMath.h"
|
#include "cmMath.h"
|
||||||
|
|
||||||
|
|
||||||
#include "cmAudioFile.h"
|
#include "cmAudioFile.h"
|
||||||
#include "cmFileSys.h"
|
#include "cmFileSys.h"
|
||||||
#include "cmProcObj.h"
|
#include "cmProcObj.h"
|
||||||
@ -2371,6 +2370,7 @@ cmDspClass_t _cmNanoMapDC;
|
|||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
cmDspInst_t inst;
|
cmDspInst_t inst;
|
||||||
|
|
||||||
} cmDspNanoMap_t;
|
} cmDspNanoMap_t;
|
||||||
|
|
||||||
cmDspRC_t _cmDspNanoMapSend( cmDspCtx_t* ctx, cmDspInst_t* inst, unsigned st, unsigned d0, unsigned d1 )
|
cmDspRC_t _cmDspNanoMapSend( cmDspCtx_t* ctx, cmDspInst_t* inst, unsigned st, unsigned d0, unsigned d1 )
|
||||||
@ -2383,6 +2383,8 @@ cmDspRC_t _cmDspNanoMapSend( cmDspCtx_t* ctx, cmDspInst_t* inst, unsigned st, un
|
|||||||
|
|
||||||
void _cmDspNanoMapPgm( cmDspCtx_t* ctx, cmDspInst_t* inst, unsigned pgm )
|
void _cmDspNanoMapPgm( cmDspCtx_t* ctx, cmDspInst_t* inst, unsigned pgm )
|
||||||
{
|
{
|
||||||
|
cmDspNanoMap_t* p = (cmDspNanoMap_t*)inst;
|
||||||
|
|
||||||
unsigned i;
|
unsigned i;
|
||||||
|
|
||||||
for(i=0; i<kMidiChCnt; ++i)
|
for(i=0; i<kMidiChCnt; ++i)
|
||||||
@ -2428,7 +2430,7 @@ cmDspRC_t _cmDspNanoMapReset(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_
|
|||||||
|
|
||||||
cmDspRC_t _cmDspNanoMapRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
cmDspRC_t _cmDspNanoMapRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
||||||
{
|
{
|
||||||
//cmDspNanoMap_t* p = (cmDspNanoMap_t*)inst;
|
cmDspNanoMap_t* p = (cmDspNanoMap_t*)inst;
|
||||||
|
|
||||||
switch( evt->dstVarId )
|
switch( evt->dstVarId )
|
||||||
{
|
{
|
||||||
@ -2439,7 +2441,7 @@ cmDspRC_t _cmDspNanoMapRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t
|
|||||||
|
|
||||||
case kStatusNmId:
|
case kStatusNmId:
|
||||||
{
|
{
|
||||||
unsigned status = cmDsvGetUInt(evt->valuePtr);
|
unsigned status = cmDsvGetUInt(evt->valuePtr);
|
||||||
if( (status & 0xf0) == kNoteOnMdId )
|
if( (status & 0xf0) == kNoteOnMdId )
|
||||||
{
|
{
|
||||||
unsigned d0 = cmDspUInt(inst,kD0NmId);
|
unsigned d0 = cmDspUInt(inst,kD0NmId);
|
||||||
@ -2447,6 +2449,7 @@ cmDspRC_t _cmDspNanoMapRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t
|
|||||||
status = (status & 0xf0) + ch;
|
status = (status & 0xf0) + ch;
|
||||||
cmDspSetUInt(ctx,inst,kStatusNmId,status);
|
cmDspSetUInt(ctx,inst,kStatusNmId,status);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2485,6 +2488,7 @@ enum
|
|||||||
kMaxLaSecsPrId,
|
kMaxLaSecsPrId,
|
||||||
kCurLaSecsPrId,
|
kCurLaSecsPrId,
|
||||||
kFadeRatePrId,
|
kFadeRatePrId,
|
||||||
|
kScInitLocIdxPrId,
|
||||||
kScLocIdxPrId,
|
kScLocIdxPrId,
|
||||||
kCmdPrId,
|
kCmdPrId,
|
||||||
kInAudioBasePrId
|
kInAudioBasePrId
|
||||||
@ -2501,9 +2505,83 @@ typedef struct
|
|||||||
unsigned offSymId;
|
unsigned offSymId;
|
||||||
unsigned audioOutBaseId;
|
unsigned audioOutBaseId;
|
||||||
unsigned chCnt;
|
unsigned chCnt;
|
||||||
unsigned scLocIdx;
|
//unsigned scLocIdx;
|
||||||
} cmDspRecdPlay_t;
|
} cmDspRecdPlay_t;
|
||||||
|
|
||||||
|
cmDspRC_t _cmDspRecdPlayParseRsrc( cmDspCtx_t* ctx, cmDspInst_t* inst, cmRecdPlay* rcdply )
|
||||||
|
{
|
||||||
|
cmDspRC_t rc = kOkDspRC;
|
||||||
|
const cmChar_t* path = NULL;
|
||||||
|
|
||||||
|
// read the 'recdplay' audio file path
|
||||||
|
if( cmDspRsrcString( ctx->dspH, &path, "recdPlayPath", NULL ) != kOkDspRC )
|
||||||
|
{
|
||||||
|
cmDspInstErr(ctx,inst,kRsrcNotFoundDspRC,"The 'recdPlayPath' resource string was not found.");
|
||||||
|
}
|
||||||
|
|
||||||
|
if( path == NULL )
|
||||||
|
path = "";
|
||||||
|
|
||||||
|
cmJsonH_t jsH = cmDspSysPgmRsrcHandle(ctx->dspH);
|
||||||
|
cmJsonNode_t* jnp = cmJsonFindValue(jsH,"recdPlay",NULL, kArrayTId);
|
||||||
|
|
||||||
|
if( jnp == NULL || cmJsonIsArray(jnp)==false )
|
||||||
|
{
|
||||||
|
// this is really a warning - the object does not require preloaded segments.
|
||||||
|
cmDspInstErr(ctx,inst,kRsrcNotFoundDspRC,"The 'recdPlay' resource used to define pre-loaded segments was not found.");
|
||||||
|
return kOkDspRC;
|
||||||
|
}
|
||||||
|
|
||||||
|
unsigned n = cmJsonChildCount(jnp);
|
||||||
|
unsigned i;
|
||||||
|
|
||||||
|
// for each 'recdplay' segment record
|
||||||
|
for(i=0; i<n && rc==kOkDspRC; ++i)
|
||||||
|
{
|
||||||
|
cmJsonNode_t* cnp = cmJsonArrayElement(jnp,i);
|
||||||
|
const cmChar_t* label = NULL;
|
||||||
|
unsigned segSymId = cmInvalidId;
|
||||||
|
const cmChar_t* errLabel = NULL;
|
||||||
|
const cmChar_t* fn = NULL;
|
||||||
|
|
||||||
|
// read the ith segment record
|
||||||
|
if( cmJsonMemberValues(cnp,&errLabel,
|
||||||
|
"label", kStringTId, &label,
|
||||||
|
"file", kStringTId, &fn,
|
||||||
|
NULL) != kOkJsRC )
|
||||||
|
{
|
||||||
|
rc = cmDspInstErr(ctx,inst,kRsrcNotFoundDspRC,"The record at index %i in the 'recdPlay' pre-loaded segment list could not be parsed.",i);
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// find or generate the symbol id for the segment label symbol
|
||||||
|
if((segSymId = cmSymTblRegisterSymbol(ctx->stH,label)) == cmInvalidId )
|
||||||
|
{
|
||||||
|
rc = cmDspInstErr(ctx,inst,kSymNotFoundDspRC,"The 'recdPlay' pre-load segment symbol '%s' could not be found or registered.",cmStringNullGuard(label));
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
// create the full path name for the segment audio file
|
||||||
|
if((fn = cmFsMakeFn( path, fn, NULL, NULL )) == NULL )
|
||||||
|
{
|
||||||
|
rc = cmDspInstErr(ctx,inst,kFileSysFailDspRC,"The 'recdPlay' file name '%s/%s' could not be generated.",cmStringNullGuard(path),cmStringNullGuard(fn));
|
||||||
|
goto errLabel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// pre-load the segment
|
||||||
|
if( cmRecdPlayInsertRecord(rcdply,segSymId,fn) != cmOkRC )
|
||||||
|
rc = cmDspInstErr(ctx,inst,kSubSysFailDspRC,"The 'recdPlay' segment label:'%s' file:'%s' could not be loaded.",cmStringNullGuard(label),cmStringNullGuard(fn));
|
||||||
|
|
||||||
|
|
||||||
|
cmFsFreeFn(fn);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
errLabel:
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
cmDspRC_t _cmDspRecdPlayOpenScore( cmDspCtx_t* ctx, cmDspInst_t* inst )
|
cmDspRC_t _cmDspRecdPlayOpenScore( cmDspCtx_t* ctx, cmDspInst_t* inst )
|
||||||
{
|
{
|
||||||
cmDspRC_t rc =kOkDspRC;
|
cmDspRC_t rc =kOkDspRC;
|
||||||
@ -2511,14 +2589,14 @@ cmDspRC_t _cmDspRecdPlayOpenScore( cmDspCtx_t* ctx, cmDspInst_t* inst )
|
|||||||
|
|
||||||
cmDspRecdPlay_t* p = (cmDspRecdPlay_t*)inst;
|
cmDspRecdPlay_t* p = (cmDspRecdPlay_t*)inst;
|
||||||
|
|
||||||
p->scLocIdx = 0;
|
//p->scLocIdx = 0;
|
||||||
|
|
||||||
|
|
||||||
if((fn = cmDspStrcz(inst,kFnPrId)) == NULL || strlen(fn)==0 )
|
if((fn = cmDspStrcz(inst,kFnPrId)) == NULL || strlen(fn)==0 )
|
||||||
return cmErrMsg(&inst->classPtr->err, kInvalidArgDspRC, "No score file name supplied.");
|
return cmDspInstErr(ctx,inst, kInvalidArgDspRC, "No score file name supplied.");
|
||||||
|
|
||||||
if( cmScoreInitialize(ctx->cmCtx, &p->scH, fn, cmDspSampleRate(ctx), NULL, 0, NULL, NULL, ctx->stH ) != kOkScRC )
|
if( cmScoreInitialize(ctx->cmCtx, &p->scH, fn, cmDspSampleRate(ctx), NULL, 0, NULL, NULL, ctx->stH ) != kOkScRC )
|
||||||
return cmErrMsg(&inst->classPtr->err, kSubSysFailDspRC, "Unable to open the score '%s'.",fn);
|
return cmDspInstErr(ctx,inst, kSubSysFailDspRC, "Unable to open the score '%s'.",fn);
|
||||||
|
|
||||||
if( cmScoreIsValid(p->scH) )
|
if( cmScoreIsValid(p->scH) )
|
||||||
{
|
{
|
||||||
@ -2537,6 +2615,11 @@ cmDspRC_t _cmDspRecdPlayOpenScore( cmDspCtx_t* ctx, cmDspInst_t* inst )
|
|||||||
for(i=0; i<markerCnt; ++i)
|
for(i=0; i<markerCnt; ++i)
|
||||||
cmRecdPlayRegisterFrag(p->rcdply,i, cmScoreMarkerLabelSymbolId(p->scH,i ));
|
cmRecdPlayRegisterFrag(p->rcdply,i, cmScoreMarkerLabelSymbolId(p->scH,i ));
|
||||||
|
|
||||||
|
if((rc = _cmDspRecdPlayParseRsrc(ctx,inst,p->rcdply)) != kOkDspRC )
|
||||||
|
rc = cmDspInstErr(ctx,inst,kInstResetFailDspRC,"The 'recdplay' segment pre-load failed.");
|
||||||
|
|
||||||
|
//p->scLocIdx = cmDspUInt(inst,kScInitLocIdxPrId);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
@ -2565,6 +2648,7 @@ cmDspInst_t* _cmDspRecdPlayAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsig
|
|||||||
1, "maxla", kMaxLaSecsPrId, 0,0, kInDsvFl | kDoubleDsvFl | kReqArgDsvFl, "Maximum look-ahead buffer in seconds.",
|
1, "maxla", kMaxLaSecsPrId, 0,0, kInDsvFl | kDoubleDsvFl | kReqArgDsvFl, "Maximum look-ahead buffer in seconds.",
|
||||||
1, "curla", kCurLaSecsPrId, 0,0, kInDsvFl | kDoubleDsvFl | kOptArgDsvFl, "Current look-head buffer in seconds.",
|
1, "curla", kCurLaSecsPrId, 0,0, kInDsvFl | kDoubleDsvFl | kOptArgDsvFl, "Current look-head buffer in seconds.",
|
||||||
1, "frate", kFadeRatePrId, 0,0, kInDsvFl | kDoubleDsvFl | kOptArgDsvFl, "Fade rate in dB per second.",
|
1, "frate", kFadeRatePrId, 0,0, kInDsvFl | kDoubleDsvFl | kOptArgDsvFl, "Fade rate in dB per second.",
|
||||||
|
1, "initIdx",kScInitLocIdxPrId,0,0,kInDsvFl | kUIntDsvFl, "Score search start location.",
|
||||||
1, "index", kScLocIdxPrId, 0,0, kInDsvFl | kUIntDsvFl, "Score follower location index.",
|
1, "index", kScLocIdxPrId, 0,0, kInDsvFl | kUIntDsvFl, "Score follower location index.",
|
||||||
1, "cmd", kCmdPrId, 0,0, kInDsvFl | kSymDsvFl, "on=reset off=stop.",
|
1, "cmd", kCmdPrId, 0,0, kInDsvFl | kSymDsvFl, "on=reset off=stop.",
|
||||||
chCnt, "in", kInAudioBasePrId,0,1, kInDsvFl | kAudioBufDsvFl, "Audio input",
|
chCnt, "in", kInAudioBasePrId,0,1, kInDsvFl | kAudioBufDsvFl, "Audio input",
|
||||||
@ -2577,7 +2661,7 @@ cmDspInst_t* _cmDspRecdPlayAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsig
|
|||||||
p->offSymId = cmSymTblId(ctx->stH,"off");
|
p->offSymId = cmSymTblId(ctx->stH,"off");
|
||||||
p->audioOutBaseId = audioOutBase;
|
p->audioOutBaseId = audioOutBase;
|
||||||
p->chCnt = chCnt;
|
p->chCnt = chCnt;
|
||||||
p->scLocIdx = 0;
|
//p->scLocIdx = 0;
|
||||||
|
|
||||||
printf("0 max la secs:%f\n",cmDspDouble(&p->inst,kMaxLaSecsPrId));
|
printf("0 max la secs:%f\n",cmDspDouble(&p->inst,kMaxLaSecsPrId));
|
||||||
|
|
||||||
@ -2585,9 +2669,12 @@ cmDspInst_t* _cmDspRecdPlayAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsig
|
|||||||
cmDspSetDefaultDouble(ctx,&p->inst, kMaxLaSecsPrId,0.0, 2.0);
|
cmDspSetDefaultDouble(ctx,&p->inst, kMaxLaSecsPrId,0.0, 2.0);
|
||||||
cmDspSetDefaultDouble(ctx,&p->inst, kCurLaSecsPrId,0.0, 0.1);
|
cmDspSetDefaultDouble(ctx,&p->inst, kCurLaSecsPrId,0.0, 0.1);
|
||||||
cmDspSetDefaultDouble(ctx,&p->inst, kFadeRatePrId, 0.0, 1.0);
|
cmDspSetDefaultDouble(ctx,&p->inst, kFadeRatePrId, 0.0, 1.0);
|
||||||
|
cmDspSetDefaultUInt( ctx,&p->inst, kScInitLocIdxPrId,0,0);
|
||||||
|
|
||||||
printf("1 max la secs:%f\n",cmDspDouble(&p->inst,kMaxLaSecsPrId));
|
printf("1 max la secs:%f\n",cmDspDouble(&p->inst,kMaxLaSecsPrId));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return &p->inst;
|
return &p->inst;
|
||||||
}
|
}
|
||||||
@ -2670,7 +2757,7 @@ cmDspRC_t _cmDspRecdPlayRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_
|
|||||||
{
|
{
|
||||||
printf("rewind\n");
|
printf("rewind\n");
|
||||||
cmRecdPlayRewind(p->rcdply);
|
cmRecdPlayRewind(p->rcdply);
|
||||||
p->scLocIdx = 0;
|
//p->scLocIdx = cmDspUInt(inst,kScInitLocIdxPrId);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
if( cmDspSymbol(inst,kCmdPrId) == p->offSymId )
|
if( cmDspSymbol(inst,kCmdPrId) == p->offSymId )
|
||||||
@ -2683,49 +2770,57 @@ cmDspRC_t _cmDspRecdPlayRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_
|
|||||||
cmRecdPlaySetLaSecs(p->rcdply, cmDspDouble(inst,kCurLaSecsPrId));
|
cmRecdPlaySetLaSecs(p->rcdply, cmDspDouble(inst,kCurLaSecsPrId));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case kScInitLocIdxPrId:
|
||||||
|
printf("init-idx:%i\n",cmDspUInt(inst,kScInitLocIdxPrId));
|
||||||
|
break;
|
||||||
|
|
||||||
case kScLocIdxPrId:
|
case kScLocIdxPrId:
|
||||||
{
|
{
|
||||||
unsigned endScLocIdx = cmDspUInt(inst,kScLocIdxPrId) ;
|
unsigned endScLocIdx = cmDspUInt(inst,kScLocIdxPrId);
|
||||||
|
|
||||||
for(; p->scLocIdx<=endScLocIdx; p->scLocIdx+=1)
|
if( endScLocIdx < cmDspUInt(inst,kScInitLocIdxPrId) )
|
||||||
{
|
break;
|
||||||
cmScoreLoc_t* loc = cmScoreLoc(p->scH, p->scLocIdx );
|
|
||||||
cmScoreMarker_t* mp = loc->markList;
|
|
||||||
|
|
||||||
for(; mp!=NULL; mp=mp->link)
|
cmScoreLoc_t* loc = cmScoreLoc(p->scH, endScLocIdx );
|
||||||
switch( mp->markTypeId )
|
if( loc == NULL )
|
||||||
{
|
break;
|
||||||
case kRecdBegScMId:
|
|
||||||
printf("recd-beg\n");
|
cmScoreMarker_t* mp = loc->markList;
|
||||||
cmRecdPlayBeginRecord(p->rcdply, mp->labelSymId );
|
|
||||||
break;
|
for(; mp!=NULL; mp=mp->link)
|
||||||
|
switch( mp->markTypeId )
|
||||||
|
{
|
||||||
|
case kRecdBegScMId:
|
||||||
|
printf("recd-beg %s\n",cmSymTblLabel(ctx->stH,mp->labelSymId));
|
||||||
|
cmRecdPlayBeginRecord(p->rcdply, mp->labelSymId );
|
||||||
|
break;
|
||||||
|
|
||||||
case kRecdEndScMId:
|
case kRecdEndScMId:
|
||||||
printf("recd-end\n");
|
printf("recd-end %s\n",cmSymTblLabel(ctx->stH,mp->labelSymId));
|
||||||
cmRecdPlayEndRecord(p->rcdply, mp->labelSymId );
|
cmRecdPlayEndRecord(p->rcdply, mp->labelSymId );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kPlayBegScMId:
|
case kPlayBegScMId:
|
||||||
printf("play-beg\n");
|
printf("play-beg\n");
|
||||||
cmRecdPlayBeginPlay(p->rcdply, mp->labelSymId );
|
cmRecdPlayBeginPlay(p->rcdply, mp->labelSymId );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kPlayEndScMId:
|
case kPlayEndScMId:
|
||||||
printf("play-end\n");
|
printf("play-end\n");
|
||||||
cmRecdPlayEndPlay(p->rcdply, mp->labelSymId );
|
cmRecdPlayEndPlay(p->rcdply, mp->labelSymId );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case kFadeScMId:
|
case kFadeScMId:
|
||||||
printf("fade-beg\n");
|
printf("fade-beg\n");
|
||||||
cmRecdPlayBeginFade(p->rcdply, mp->labelSymId, cmDspDouble(inst,kFadeRatePrId) );
|
cmRecdPlayBeginFade(p->rcdply, mp->labelSymId, cmDspDouble(inst,kFadeRatePrId) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
p->scLocIdx = endScLocIdx+1;
|
//p->scLocIdx = endScLocIdx+1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -61,8 +61,6 @@ cmDspRC_t krLoadRsrc(cmDspSysH_t h, cmErr_t* err, krRsrc_t* r)
|
|||||||
cmDspRsrcString(h,&r->midiDevice, "midiDevice", NULL);
|
cmDspRsrcString(h,&r->midiDevice, "midiDevice", NULL);
|
||||||
cmDspRsrcString(h,&r->midiOutPort, "midiOutPort", NULL);
|
cmDspRsrcString(h,&r->midiOutPort, "midiOutPort", NULL);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if((rc = cmDspSysLastRC(h)) != kOkDspRC )
|
if((rc = cmDspSysLastRC(h)) != kOkDspRC )
|
||||||
cmErrMsg(err,rc,"A KR DSP resource load failed.");
|
cmErrMsg(err,rc,"A KR DSP resource load failed.");
|
||||||
|
|
||||||
@ -363,7 +361,8 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
|
|||||||
cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
|
cmCtx_t* cmCtx = cmDspSysPgmCtx(h);
|
||||||
cmErr_t err;
|
cmErr_t err;
|
||||||
krRsrc_t r;
|
krRsrc_t r;
|
||||||
bool fragFl = false;
|
bool fragFl = true;
|
||||||
|
bool useWtFl = false;
|
||||||
unsigned wtLoopCnt = 1; // 1=play once (-1=loop forever)
|
unsigned wtLoopCnt = 1; // 1=play once (-1=loop forever)
|
||||||
unsigned wtInitMode = 0; // initial wt mode is 'silence'
|
unsigned wtInitMode = 0; // initial wt mode is 'silence'
|
||||||
unsigned wtSmpCnt = floor(cmDspSysSampleRate(h)); // wt length == srate
|
unsigned wtSmpCnt = floor(cmDspSysSampleRate(h)); // wt length == srate
|
||||||
@ -398,7 +397,7 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
|
|||||||
cmDspInst_t* mop = cmDspSysAllocInst(h,"MidiOut", NULL, 2, r.midiDevice,r.midiOutPort);
|
cmDspInst_t* mop = cmDspSysAllocInst(h,"MidiOut", NULL, 2, r.midiDevice,r.midiOutPort);
|
||||||
cmDspInst_t* sfp = cmDspSysAllocInst(h,"ScFol", NULL, 1, r.scFn, sfBufCnt, sfMaxWndCnt, sfMinVel, sfEnaMeasFl );
|
cmDspInst_t* sfp = cmDspSysAllocInst(h,"ScFol", NULL, 1, r.scFn, sfBufCnt, sfMaxWndCnt, sfMinVel, sfEnaMeasFl );
|
||||||
cmDspInst_t* amp = cmDspSysAllocInst(h,"ActiveMeas", NULL, 1, 100 );
|
cmDspInst_t* amp = cmDspSysAllocInst(h,"ActiveMeas", NULL, 1, 100 );
|
||||||
cmDspInst_t* rpp = cmDspSysAllocInst(h,"RecdPlay", NULL, 6, 2, r.scFn, recdPlayInitAllocSecs, recdPlayMaxLaSecs, recdPlayCurLaSecs, recdPlayFadeRateDbPerSec );
|
cmDspInst_t* rpp = cmDspSysAllocInst(h,"RecdPlay", NULL, 6, 2, r.scFn, recdPlayInitAllocSecs, recdPlayMaxLaSecs, recdPlayCurLaSecs, recdPlayFadeRateDbPerSec);
|
||||||
cmDspInst_t* modp = cmDspSysAllocInst(h,"ScMod", NULL, 2, r.modFn, "m1" );
|
cmDspInst_t* modp = cmDspSysAllocInst(h,"ScMod", NULL, 2, r.modFn, "m1" );
|
||||||
cmDspInst_t* modr = cmDspSysAllocInst(h,"ScMod", NULL, 2, r.modFn, "m1" );
|
cmDspInst_t* modr = cmDspSysAllocInst(h,"ScMod", NULL, 2, r.modFn, "m1" );
|
||||||
|
|
||||||
@ -498,21 +497,22 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
|
|||||||
// Audio connections
|
// Audio connections
|
||||||
cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phs -> wt
|
cmDspSysConnectAudio(h, php, "out", wtp, "phs" ); // phs -> wt
|
||||||
|
|
||||||
cmDspSysConnectAudio(h, wtp, "out", au0Sw, "a-in-0" ); // wt -> sw
|
if( useWtFl )
|
||||||
|
{
|
||||||
/*
|
cmDspSysConnectAudio(h, wtp, "out", au0Sw, "a-in-0" ); // wt -> sw
|
||||||
cmDspSysConnectAudio(h, ai0p, "out", au0Sw, "a-in-1" ); // ain -> sw
|
cmDspSysConnectAudio(h, ai0p, "out", au0Sw, "a-in-1" ); // ain -> sw
|
||||||
cmDspSysConnectAudio(h, ai0p, "out", mi0p, "in" );
|
cmDspSysConnectAudio(h, ai0p, "out", mi0p, "in" );
|
||||||
cmDspSysConnectAudio(h, au0Sw, "a-out", rpp, "in-0"); // sw -> rcdply
|
cmDspSysConnectAudio(h, au0Sw, "a-out", rpp, "in-0"); // sw -> rcdply
|
||||||
cmDspSysConnectAudio(h, au0Sw, "a-out", c0.kr0,"in" ); // sw -> kr
|
cmDspSysConnectAudio(h, au0Sw, "a-out", c0.kr0,"in" ); // sw -> kr
|
||||||
cmDspSysConnectAudio(h, au0Sw, "a-out", c0.kr1,"in" ); // sw -> kr
|
cmDspSysConnectAudio(h, au0Sw, "a-out", c0.kr1,"in" ); // sw -> kr
|
||||||
*/
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
cmDspSysConnectAudio(h, ai0p, "out", rpp, "in-0"); // sw -> rcdply
|
cmDspSysConnectAudio(h, ai0p, "out", rpp, "in-0"); // sw -> rcdply
|
||||||
cmDspSysConnectAudio(h, ai0p, "out", c0.kr0, "in" ); // ain -> sw
|
cmDspSysConnectAudio(h, ai0p, "out", c0.kr0, "in" ); // ain -> sw
|
||||||
cmDspSysConnectAudio(h, ai0p, "out", c0.kr1, "in" ); // ain -> sw
|
cmDspSysConnectAudio(h, ai0p, "out", c0.kr1, "in" ); // ain -> sw
|
||||||
cmDspSysConnectAudio(h, ai0p, "out", mi0p, "in" );
|
cmDspSysConnectAudio(h, ai0p, "out", mi0p, "in" );
|
||||||
|
}
|
||||||
|
|
||||||
if( fragFl )
|
if( fragFl )
|
||||||
{
|
{
|
||||||
@ -525,22 +525,26 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmDspSysConnectAudio(h, c0.cmp, "out", ao0p, "in" );
|
cmDspSysConnectAudio(h, c0.cmp, "out", ao0p, "in" );
|
||||||
|
//cmDspSysConnectAudio(h, wtp, "out", ao0p, "in" );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
cmDspSysConnectAudio(h, wtp, "out", au1Sw, "a-in-0" ); // wt -> sw
|
if( useWtFl )
|
||||||
/*
|
{
|
||||||
cmDspSysConnectAudio(h, ai1p, "out", au1Sw, "a-in-1" ); // ain -> sw
|
cmDspSysConnectAudio(h, wtp, "out", au1Sw, "a-in-0" ); // wt -> sw
|
||||||
cmDspSysConnectAudio(h, ai1p, "out", mi1p, "in" );
|
cmDspSysConnectAudio(h, ai1p, "out", au1Sw, "a-in-1" ); // ain -> sw
|
||||||
cmDspSysConnectAudio(h, au1Sw, "a-out", rpp, "in-1"); // sw -> rcdply
|
cmDspSysConnectAudio(h, ai1p, "out", mi1p, "in" );
|
||||||
cmDspSysConnectAudio(h, au1Sw, "a-out", c1.kr0,"in" ); // sw -> kr
|
cmDspSysConnectAudio(h, au1Sw, "a-out", rpp, "in-1"); // sw -> rcdply
|
||||||
cmDspSysConnectAudio(h, au1Sw, "a-out", c1.kr1,"in" ); // sw -> kr
|
cmDspSysConnectAudio(h, au1Sw, "a-out", c1.kr0,"in" ); // sw -> kr
|
||||||
*/
|
cmDspSysConnectAudio(h, au1Sw, "a-out", c1.kr1,"in" ); // sw -> kr
|
||||||
|
}
|
||||||
cmDspSysConnectAudio(h, ai1p, "out", rpp, "in-1"); // sw -> rcdply
|
else
|
||||||
cmDspSysConnectAudio(h, ai1p, "out", c1.kr0, "in" ); // ain -> sw
|
{
|
||||||
cmDspSysConnectAudio(h, ai1p, "out", c1.kr1, "in" ); // ain -> sw
|
cmDspSysConnectAudio(h, ai1p, "out", rpp, "in-1"); // sw -> rcdply
|
||||||
cmDspSysConnectAudio(h, ai1p, "out", mi1p, "in" );
|
cmDspSysConnectAudio(h, ai1p, "out", c1.kr0, "in" ); // ain -> sw
|
||||||
|
cmDspSysConnectAudio(h, ai1p, "out", c1.kr1, "in" ); // ain -> sw
|
||||||
|
cmDspSysConnectAudio(h, ai1p, "out", mi1p, "in" );
|
||||||
|
}
|
||||||
|
|
||||||
if( fragFl )
|
if( fragFl )
|
||||||
{
|
{
|
||||||
@ -553,6 +557,8 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
cmDspSysConnectAudio(h, c1.cmp, "out", ao1p, "in" ); // cmp -> mix 0
|
cmDspSysConnectAudio(h, c1.cmp, "out", ao1p, "in" ); // cmp -> mix 0
|
||||||
|
//cmDspSysConnectAudio(h, wtp, "out", ao1p, "in" );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cmDspSysConnectAudio(h, c0.cmp, "out", afop, "in0" ); // comp -> audio_file_out
|
cmDspSysConnectAudio(h, c0.cmp, "out", afop, "in0" ); // comp -> audio_file_out
|
||||||
@ -689,7 +695,8 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
|
|||||||
cmDspSysInstallCb(h, scp, "sel", sfp, "index", NULL );
|
cmDspSysInstallCb(h, scp, "sel", sfp, "index", NULL );
|
||||||
cmDspSysInstallCb(h, scp, "sel", modp,"reset", NULL );
|
cmDspSysInstallCb(h, scp, "sel", modp,"reset", NULL );
|
||||||
cmDspSysInstallCb(h, scp, "sel", modr,"reset", NULL );
|
cmDspSysInstallCb(h, scp, "sel", modr,"reset", NULL );
|
||||||
|
cmDspSysInstallCb(h, scp, "sel", rpp, "initIdx", NULL );
|
||||||
|
cmDspSysInstallCb(h, scp, "sel", prp, "in", NULL );
|
||||||
//cmDspSysInstallCb(h, reload,"out", modp, "reload", NULL );
|
//cmDspSysInstallCb(h, reload,"out", modp, "reload", NULL );
|
||||||
|
|
||||||
|
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include "cmPrefix.h"
|
#include "cmPrefix.h"
|
||||||
#include "cmGlobal.h"
|
#include "cmGlobal.h"
|
||||||
#include "cmRpt.h"
|
#include "cmRpt.h"
|
||||||
|
#include "cmTime.h"
|
||||||
#include "cmAudioPort.h"
|
#include "cmAudioPort.h"
|
||||||
#include "cmMem.h"
|
#include "cmMem.h"
|
||||||
#include "cmMallocDebug.h"
|
#include "cmMallocDebug.h"
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include "cmCtx.h"
|
#include "cmCtx.h"
|
||||||
#include "cmMem.h"
|
#include "cmMem.h"
|
||||||
#include "cmMallocDebug.h"
|
#include "cmMallocDebug.h"
|
||||||
|
#include "cmTime.h"
|
||||||
#include "cmMidi.h"
|
#include "cmMidi.h"
|
||||||
#include "cmMidiPort.h"
|
#include "cmMidiPort.h"
|
||||||
|
|
||||||
@ -507,7 +508,7 @@ void _cmMpMIDISystemReadProc( const MIDIPacketList *pktListPtr, void* readProcRe
|
|||||||
|
|
||||||
double nano = 1e-9 * ( (double) _cmMpRoot.timeBaseInfo.numer) / ((double) _cmMpRoot.timeBaseInfo.denom);
|
double nano = 1e-9 * ( (double) _cmMpRoot.timeBaseInfo.numer) / ((double) _cmMpRoot.timeBaseInfo.denom);
|
||||||
|
|
||||||
// so here's the delta in nanoseconds:
|
// so here's the timestamp in nanoseconds:
|
||||||
double nanoSeconds = ((double) packetPtr->timeStamp) * nano;
|
double nanoSeconds = ((double) packetPtr->timeStamp) * nano;
|
||||||
|
|
||||||
// 1000 times that for microSeconds:
|
// 1000 times that for microSeconds:
|
||||||
@ -516,13 +517,17 @@ void _cmMpMIDISystemReadProc( const MIDIPacketList *pktListPtr, void* readProcRe
|
|||||||
// BUG BUG BUG: How can multiplying the nanoseconds produce microseconds?
|
// BUG BUG BUG: How can multiplying the nanoseconds produce microseconds?
|
||||||
// Shouldn't the nano to micro conversion be a divide?
|
// Shouldn't the nano to micro conversion be a divide?
|
||||||
|
|
||||||
double deltaMicroSecs = microSecs - pp->prevMicroSecs;
|
//double deltaMicroSecs = microSecs - pp->prevMicroSecs;
|
||||||
|
|
||||||
pp->prevMicroSecs = microSecs;
|
pp->prevMicroSecs = microSecs;
|
||||||
|
|
||||||
|
cmTimeSpec_t ts;
|
||||||
|
ts.tv_sec = floor(microSecs / 1000000.0);
|
||||||
|
ts.tv_nsec = (microSecs - ts.tv_sec * 1000000.0) * 1000.0;
|
||||||
|
|
||||||
assert( pp->inputFl == true );
|
assert( pp->inputFl == true );
|
||||||
|
|
||||||
cmMpParseMidiData( pp->parserH, (unsigned)deltaMicroSecs, packetPtr->data, packetPtr->length );
|
cmMpParseMidiData( pp->parserH, &ts, packetPtr->data, packetPtr->length );
|
||||||
|
|
||||||
packetPtr = MIDIPacketNext(packetPtr);
|
packetPtr = MIDIPacketNext(packetPtr);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user