cmMidiScoreFollow.h/c : Added filename parameters to cmMidiScoreFollowMain().
This commit is contained in:
parent
ca40492412
commit
ee9ba9270e
@ -112,6 +112,14 @@ void _cmMsf_ReportMidiErrors( const _cmMsf_ScoreFollow_t* f, cmScH_t scH, const
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void _cmMsf_WriteMatchFileHeader( cmFileH_t fH )
|
||||||
|
{
|
||||||
|
cmFilePrintf(fH," Score Score Score MIDI MIDI MIDI\n");
|
||||||
|
cmFilePrintf(fH," Bar UUID Pitch UUID Ptch Vel.\n");
|
||||||
|
cmFilePrintf(fH,"- ----- ----- ----- ----- ---- ----\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
// Write one scScoreMatcherResult_t record to the file fH.
|
// Write one scScoreMatcherResult_t record to the file fH.
|
||||||
unsigned _cmMsf_WriteMatchFileLine( cmFileH_t fH, cmScH_t scH, const cmScMatcherResult_t* r )
|
unsigned _cmMsf_WriteMatchFileLine( cmFileH_t fH, cmScH_t scH, const cmScMatcherResult_t* r )
|
||||||
{
|
{
|
||||||
@ -130,7 +138,7 @@ unsigned _cmMsf_WriteMatchFileLine( cmFileH_t fH, cmScH_t scH, const cmScMatcher
|
|||||||
cmMidiToSciPitch(e->pitch,buf,5);
|
cmMidiToSciPitch(e->pitch,buf,5);
|
||||||
}
|
}
|
||||||
|
|
||||||
cmFilePrintf(fH,"m %3i %5i %4s %5i %4s %3i\n",
|
cmFilePrintf(fH,"m %5i %5i %5s %5i %4s %3i\n",
|
||||||
loc==NULL ? 0 : loc->barNumb, // score evt bar
|
loc==NULL ? 0 : loc->barNumb, // score evt bar
|
||||||
scUid, // score event uuid
|
scUid, // score event uuid
|
||||||
buf, // score event pitch
|
buf, // score event pitch
|
||||||
@ -147,17 +155,17 @@ void _cmMsf_ScoreFollowCb( struct cmScMatcher_str* p, void* arg, cmScMatcherResu
|
|||||||
r->rV[r->rN++] = *rp;
|
r->rV[r->rN++] = *rp;
|
||||||
}
|
}
|
||||||
|
|
||||||
cmMsfRC_t cmMidiScoreFollowMain( cmCtx_t* ctx )
|
cmMsfRC_t cmMidiScoreFollowMain(
|
||||||
|
cmCtx_t* ctx,
|
||||||
|
const cmChar_t* scoreCsvFn, // score CSV file as generated from cmXScoreTest().
|
||||||
|
const cmChar_t* midiFn, // MIDI file to track
|
||||||
|
const cmChar_t* matchRptOutFn, // Score follow status report
|
||||||
|
const cmChar_t* matchSvgOutFn, // Score follow graphic report
|
||||||
|
const cmChar_t* midiOutFn, // (optional) midiFn with apply sostenuto and velocities from the score to the MIDI file
|
||||||
|
const cmChar_t* tlBarOutFn // (optional) bar positions sutiable for use in a cmTimeLine description file.
|
||||||
|
)
|
||||||
{
|
{
|
||||||
cmMsfRC_t rc = kOkMsfRC;
|
cmMsfRC_t rc = kOkMsfRC;
|
||||||
//const cmChar_t* scoreFn = cmFsMakeUserDirFn("src/kc/src/kc/data","mod2e.csv");
|
|
||||||
const cmChar_t* scoreFn = cmFsMakeUserDirFn("temp","a7.csv");
|
|
||||||
const cmChar_t* midiFn = cmFsMakeUserDirFn("media/projects/imag_themes/scores/gen","round1-utf8_11.mid");
|
|
||||||
const cmChar_t* outFn = cmFsMakeUserDirFn("temp","match.txt");
|
|
||||||
const cmChar_t* svgFn = cmFsMakeUserDirFn("temp","score0.html");
|
|
||||||
const cmChar_t* newMidiFn= cmFsMakeUserDirFn("temp","a7.mid");
|
|
||||||
const cmChar_t* tlBarFn = cmFsMakeUserDirFn("temp","time_line_temp.txt");
|
|
||||||
|
|
||||||
double srate = 96000.0;
|
double srate = 96000.0;
|
||||||
cmScMatcher* smp = NULL;
|
cmScMatcher* smp = NULL;
|
||||||
cmScH_t scH = cmScNullHandle;
|
cmScH_t scH = cmScNullHandle;
|
||||||
@ -179,16 +187,16 @@ cmMsfRC_t cmMidiScoreFollowMain( cmCtx_t* ctx )
|
|||||||
cmCtx* prCtx = cmCtxAlloc(NULL, err.rpt, cmLHeapNullHandle, cmSymTblNullHandle );
|
cmCtx* prCtx = cmCtxAlloc(NULL, err.rpt, cmLHeapNullHandle, cmSymTblNullHandle );
|
||||||
|
|
||||||
// initialize the score
|
// initialize the score
|
||||||
if( cmScoreInitialize( ctx, &scH, scoreFn, srate, NULL, 0, NULL, NULL, cmSymTblNullHandle) != kOkScRC )
|
if( cmScoreInitialize( ctx, &scH, scoreCsvFn, srate, NULL, 0, NULL, NULL, cmSymTblNullHandle) != kOkScRC )
|
||||||
{
|
{
|
||||||
rc = cmErrMsg(&err,kFailMsfRC,"cmScoreInitialize() failed on %s",cmStringNullGuard(scoreFn));
|
rc = cmErrMsg(&err,kFailMsfRC,"cmScoreInitialize() failed on %s",cmStringNullGuard(scoreCsvFn));
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup the callback record
|
// setup the callback record
|
||||||
if((sfr.rAllocN = cmScoreEvtCount( scH )*2) == 0)
|
if((sfr.rAllocN = cmScoreEvtCount( scH )*2) == 0)
|
||||||
{
|
{
|
||||||
rc = cmErrMsg(&err,kFailMsfRC,"The score %s appears to be empty.",cmStringNullGuard(scoreFn));
|
rc = cmErrMsg(&err,kFailMsfRC,"The score %s appears to be empty.",cmStringNullGuard(scoreCsvFn));
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,19 +237,21 @@ cmMsfRC_t cmMidiScoreFollowMain( cmCtx_t* ctx )
|
|||||||
printf("MIDI notes:%i Score Events:%i\n",mN,cmScoreEvtCount(scH));
|
printf("MIDI notes:%i Score Events:%i\n",mN,cmScoreEvtCount(scH));
|
||||||
|
|
||||||
// create the output file
|
// create the output file
|
||||||
if( cmFileOpen(&fH,outFn,kWriteFileFl,&ctx->rpt) != kOkFileRC )
|
if( cmFileOpen(&fH,matchRptOutFn,kWriteFileFl,&ctx->rpt) != kOkFileRC )
|
||||||
{
|
{
|
||||||
rc = cmErrMsg(&err,kFailMsfRC,"Unable to create the file '%s'.",cmStringNullGuard(outFn));
|
rc = cmErrMsg(&err,kFailMsfRC,"Unable to create the file '%s'.",cmStringNullGuard(matchRptOutFn));
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
// allocate the graphics object
|
// allocate the graphics object
|
||||||
if( cmScoreMatchGraphicAlloc( ctx, &smgH, scoreFn, midiFn ) != kOkSmgRC )
|
if( cmScoreMatchGraphicAlloc( ctx, &smgH, scoreCsvFn, midiFn ) != kOkSmgRC )
|
||||||
{
|
{
|
||||||
rc = cmErrMsg(&err,kFailMsfRC,"Score Match Graphics allocation failed..");
|
rc = cmErrMsg(&err,kFailMsfRC,"Score Match Graphics allocation failed..");
|
||||||
goto errLabel;
|
goto errLabel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// write the match report output file header
|
||||||
|
_cmMsf_WriteMatchFileHeader(fH);
|
||||||
|
|
||||||
// for each score follower callback record
|
// for each score follower callback record
|
||||||
for(i=0; i<sfr.rN; ++i)
|
for(i=0; i<sfr.rN; ++i)
|
||||||
@ -267,12 +277,14 @@ cmMsfRC_t cmMidiScoreFollowMain( cmCtx_t* ctx )
|
|||||||
//cmMidiFilePrintMsgs( mfH, &ctx->rpt );
|
//cmMidiFilePrintMsgs( mfH, &ctx->rpt );
|
||||||
|
|
||||||
// write the tracking match file as an SVG file.
|
// write the tracking match file as an SVG file.
|
||||||
cmScoreMatchGraphicWrite( smgH, svgFn );
|
cmScoreMatchGraphicWrite( smgH, matchSvgOutFn );
|
||||||
|
|
||||||
// write a cmTimeLine file which contains markers at each bar position
|
// write a cmTimeLine file which contains markers at each bar position
|
||||||
cmScoreMatchGraphicGenTimeLineBars(smgH, tlBarFn, srate );
|
if( tlBarOutFn != NULL )
|
||||||
|
cmScoreMatchGraphicGenTimeLineBars(smgH, tlBarOutFn, srate );
|
||||||
|
|
||||||
cmScoreMatchGraphicUpdateMidiFromScore( ctx, smgH, newMidiFn );
|
if( midiOutFn != NULL )
|
||||||
|
cmScoreMatchGraphicUpdateMidiFromScore( ctx, smgH, midiOutFn );
|
||||||
|
|
||||||
|
|
||||||
errLabel:
|
errLabel:
|
||||||
@ -286,12 +298,12 @@ cmMsfRC_t cmMidiScoreFollowMain( cmCtx_t* ctx )
|
|||||||
|
|
||||||
cmCtxFree(&prCtx);
|
cmCtxFree(&prCtx);
|
||||||
|
|
||||||
cmFsFreeFn(scoreFn);
|
//cmFsFreeFn(scoreCsvFn);
|
||||||
cmFsFreeFn(midiFn);
|
//cmFsFreeFn(midiFn);
|
||||||
cmFsFreeFn(outFn);
|
//cmFsFreeFn(matchRptOutFn);
|
||||||
cmFsFreeFn(svgFn);
|
//cmFsFreeFn(matchSvgOutFn);
|
||||||
cmFsFreeFn(newMidiFn);
|
//cmFsFreeFn(outMidiFn);
|
||||||
cmFsFreeFn(tlBarFn);
|
//cmFsFreeFn(tlBarFn);
|
||||||
|
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,15 @@ extern "C" {
|
|||||||
typedef cmRC_t cmMsfRC_t;
|
typedef cmRC_t cmMsfRC_t;
|
||||||
|
|
||||||
|
|
||||||
cmMsfRC_t cmMidiScoreFollowMain( cmCtx_t* ctx );
|
cmMsfRC_t cmMidiScoreFollowMain(
|
||||||
|
cmCtx_t* ctx,
|
||||||
|
const cmChar_t* scoreCsvFn, // score CSV file as generated from cmXScoreTest().
|
||||||
|
const cmChar_t* midiFn, // MIDI file to track
|
||||||
|
const cmChar_t* matchRptOutFn, // Score follow status report
|
||||||
|
const cmChar_t* matchSvgOutFn, // Score follow graphic report
|
||||||
|
const cmChar_t* midiOutFn, // (optional) midiFn with apply sostenuto and velocities from the score to the MIDI file
|
||||||
|
const cmChar_t* tlBarOutFn // (optional) bar positions sutiable for use in a cmTimeLine description file.
|
||||||
|
);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user