namespace cw { namespace afop { enum { kOpenProcId, kProcProcId, kCloseProcId }; typedef struct proc_ctx_str { unsigned procId; void* userPtr; const object_t* args; // cfg. for the selected process func unsigned cycleIndex; char* srcFn; float srcSrate; unsigned srcChN; unsigned srcBits; const float** srcChV; // srcChV[ srcChN ][ srcWndSmpN ] - read incoming samples from this buffer unsigned srcWndSmpN; // unsigned srcHopSmpN; // char* dstFn; float dstSrate; unsigned dstChN; unsigned dstBits; float** dstChV; // dstChV[ dstChN ][ dstWndSmpN ] unsigned dstWndSmpN; // unsigned dstHopSmpN; // dsp::data_recorder::fobj_t** recordChA; // recordChA[ recordChN ] } proc_ctx_t; // Open // Accept or modify the destination configuration. The src signal parameters are definted by the driver program. // // Proc: // If srcChN is non-zero then srcChV will be valid. The last srcHopSmpN will contain new samples for this iteration // If dstChN is non-zero then fill at least the first dstHopSmpN samples in dstChV[][]. // // Note that the srcChV[][] and dstChV[][] both point to buffers of lengh src/dstWndSmpN but only the first src/dstHopSmpN // are finalized for a given cycle. The training wndSmpN-hopSmpN will be available (shifted right by hopSmpN samples) // on the next call. // // Return kEofRC if no input file is given and processing is complete. typedef rc_t (*proc_func_t)( proc_ctx_t* ctx ); rc_t file_processor( const char* srcFn, const char* dstFn, proc_func_t func, unsigned wndSmpN, unsigned hopSmpN, void* userArg, const object_t* args, const object_t* recorder_cfg, unsigned recordChN=0 ); rc_t file_processor( const object_t* cfg ); } }