Copyright (C) Kevin Larke 2009-2020

This file is part of libcm.

libcm is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.

libcm is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.

See the GNU General Public License distributed with the libcm package or look here: .


cmMidiScoreFollow : Score follow a MIDI files.
//
// This function uses a CSV score file generated from cmXScoreTest() to score follow a MIDI file.
// Output filesL
// - MIDI file with velocities from the score applied to the associated notes in the MIDI file.
// - A text file, for use with cmTimeLine, which describes the bar positions as absolute times into the score.
// - An SVG file which shows the score match results over time for each note in the score.
// - A report file which lists the score match status over time.



enum
{
  kOkMsfRC = cmOkRC,
  kFailMsfRC
};

typedef cmRC_t cmMsfRC_t;


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.
);