99 rivejä
4.1 KiB
C
99 rivejä
4.1 KiB
C
#ifndef cmPickup_h
|
|
#define cmPickup_h
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
//( { file_desc:"'fluxo' channel calibration and gain normalization program." kw:[fluxo]}
|
|
|
|
enum
|
|
{
|
|
kOkPuRC = cmOkRC,
|
|
kProcFailPuRC,
|
|
kJsonFailPuRC
|
|
};
|
|
|
|
typedef cmRC_t cmPuRC_t;
|
|
typedef cmHandle_t cmPuH_t;
|
|
|
|
// This record holds information which is maintained on a per-pickup basis
|
|
typedef struct
|
|
{
|
|
unsigned begSmpIdx; // during auto-gain cfg set to the first sample in the audio example file where the group of notes from this pickup begin.
|
|
unsigned endSmpIdx; // ... end of the example notes for this pickup
|
|
unsigned midiPitch; // midi pitch associated with this pickup
|
|
unsigned onCnt; // during auto-gain cfg set to the count of onsets detected for this pickup
|
|
unsigned offCnt; // ... offset detected
|
|
cmReal_t gateMaxAvg; // avg of the the max gate RMS values for all detected notes
|
|
cmReal_t gain; // auto-gain coeff for this pickup
|
|
|
|
} cmPuCh_t;
|
|
|
|
|
|
extern cmPuH_t cmPuNullHandle;
|
|
|
|
cmPuRC_t cmPuAlloc( cmCtx_t* ctx, cmPuH_t* hp );
|
|
cmPuRC_t cmPuFree( cmPuH_t* hp );
|
|
bool cmPuIsValid( cmPuH_t h );
|
|
|
|
// Given a recorded audio file containing a set of notes recorded from each pickup,
|
|
// an Audacity label file which marks the beginning of teach set of notes,
|
|
// and a set of gate detector parameters attempt to calculate a set of gain
|
|
// coefficients to equalize the relative gain of all the pickup channels.
|
|
// This algorithm works in two passes: In the first pass the gain coefficient
|
|
// is established by finding an average RMS value among the examples and
|
|
// then increasing and decreasing the pickups to move the examples closer
|
|
// to the average. The gain is then adjusted and a second pass is made to
|
|
// examine how well the gate detectors work with the new gain setttings.
|
|
cmPuRC_t cmPuAutoGainCfg(
|
|
cmPuH_t h,
|
|
const cmChar_t* audioFn, // audio file containing a set of examples for each note
|
|
const cmChar_t* labelFn, // audicity label file with one marker preceding each set of notes
|
|
const cmChar_t* outMtx0Fn, // octave binary matrix file containing the intermediate and final results of the gate detector analysis after the first pass
|
|
const cmChar_t* outMtx1Fn, // octave binary matrix file containing the intermediate and final results of the gate detector analysis after the second pass
|
|
const cmChar_t* outAudFn, // audioFn rewritten with auto-gain applied
|
|
unsigned procSmpCnt, // analysis DSP frame size in samples
|
|
cmReal_t hopMs, // analysis window hop size in milliseconds
|
|
const cmGateDetectParams* gd0Args, // first pass gate detector args
|
|
const cmGateDetectParams* gd1Args ); // second pass gate detector args
|
|
|
|
// Calls cmPuReadJson() and then prepends the fileDir to each of the
|
|
// file names. All the files are then read and written to this directory.
|
|
// and calls cmPuAutoGainCfg().
|
|
cmPuRC_t cmPuAutoGainCfgFromJson(
|
|
cmPuH_t h,
|
|
const cmChar_t* fileDir,
|
|
cmJsonH_t jsH,
|
|
cmJsonNode_t* onp,
|
|
unsigned procSmpCnt );
|
|
|
|
|
|
cmPuRC_t cmPuAutoGainExec( cmPuH_t h, const cmChar_t* fileDir, unsigned procSmpCnt );
|
|
|
|
// Load the 'parmsCfg', 'gdArgs' and 'gain' array from the JSON
|
|
// 'autoTune' object contained in the JSON object 'onp'.
|
|
cmPuRC_t cmPuReadJson( cmPuH_t h, cmJsonH_t jsH, cmJsonNode_t* onp );
|
|
|
|
unsigned cmPuChannelCount( cmPuH_t h );
|
|
const cmPuCh_t* cmPuChannel( cmPuH_t h, unsigned chIdx );
|
|
|
|
|
|
// Update the 'autoTune' JSON object contained the JSON object 'onp'.
|
|
cmPuRC_t cmPuWriteJson( cmPuH_t h, cmJsonH_t jsH, cmJsonNode_t* onp );
|
|
|
|
// Update the 'autoTune' JSON object in the JSON file 'jsonFn'.
|
|
// (Same as cmPuWriteJson() except the JSON tree to update is contained in a file.)
|
|
cmPuRC_t cmPuWriteJsonFile( cmPuH_t h, const cmChar_t* jsonFn );
|
|
|
|
void cmPuReport( cmPuH_t h, cmRpt_t* rpt );
|
|
|
|
void cmPuTest(cmCtx_t* ctx);
|
|
//)
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|