cmDspBuiltIn.c : Added cmDspBinEnc and cmDsp2d.
This commit is contained in:
parent
1a6156f50a
commit
aab1940eb5
@ -44,6 +44,8 @@
|
|||||||
#include "cmVectOpsTemplateMain.h"
|
#include "cmVectOpsTemplateMain.h"
|
||||||
#include "cmMidiPort.h"
|
#include "cmMidiPort.h"
|
||||||
|
|
||||||
|
#include "sa/cmSaProc.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
About variables:
|
About variables:
|
||||||
1) Variables represent data fields within a DSP object.
|
1) Variables represent data fields within a DSP object.
|
||||||
@ -5514,6 +5516,225 @@ struct cmDspClass_str* cmRsrcWrClassCons( cmDspCtx_t* ctx )
|
|||||||
return &_cmRsrcWrDC;
|
return &_cmRsrcWrDC;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//==========================================================================================================================================
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kModeBeId,
|
||||||
|
kAzimBeId,
|
||||||
|
kElevBeId,
|
||||||
|
kDistBeId,
|
||||||
|
kAudioInBeId,
|
||||||
|
kAudioOut0BeId,
|
||||||
|
kAudioOut1BeId
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
cmDspInst_t inst;
|
||||||
|
cmBinEnc* bep;
|
||||||
|
} cmDspBinEnc_t;
|
||||||
|
|
||||||
|
cmDspClass_t _cmBeDC;
|
||||||
|
|
||||||
|
cmDspInst_t* _cmDspBinEncAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsigned storeSymId, unsigned instSymId, unsigned id, unsigned va_cnt, va_list vl )
|
||||||
|
{
|
||||||
|
cmDspVarArg_t args[] =
|
||||||
|
{
|
||||||
|
{ "mode", kModeBeId, 0, 0, kInDsvFl | kUIntDsvFl | kReqArgDsvFl, "Mode" },
|
||||||
|
{ "azim", kAzimBeId, 0, 0, kInDsvFl | kDoubleDsvFl, "Azimuth" },
|
||||||
|
{ "elev", kElevBeId, 0, 0, kInDsvFl | kDoubleDsvFl, "Elevation" },
|
||||||
|
{ "dist", kDistBeId, 0, 0, kInDsvFl | kDoubleDsvFl, "Distance" },
|
||||||
|
{ "in", kAudioInBeId, 0, 0, kInDsvFl | kAudioBufDsvFl, "Audio Input" },
|
||||||
|
{ "out0", kAudioOut0BeId, 0, 1, kOutDsvFl | kAudioBufDsvFl, "Audio Output 0" },
|
||||||
|
{ "out1", kAudioOut1BeId, 0, 1, kOutDsvFl | kAudioBufDsvFl, "Audio Output 1" },
|
||||||
|
{ NULL, 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
cmDspBinEnc_t* p = cmDspInstAlloc(cmDspBinEnc_t,ctx,classPtr,args,instSymId,id,storeSymId,va_cnt,vl);
|
||||||
|
|
||||||
|
cmDspSetDefaultUInt( ctx,&p->inst, kModeBeId, 0, 0.0 );
|
||||||
|
cmDspSetDefaultDouble( ctx,&p->inst, kAzimBeId, 0, 0.0 );
|
||||||
|
cmDspSetDefaultDouble( ctx,&p->inst, kElevBeId, 0, 0.0 );
|
||||||
|
cmDspSetDefaultDouble( ctx,&p->inst, kDistBeId, 0, 0.0 );
|
||||||
|
|
||||||
|
return &p->inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmDspRC_t _cmDspBinEncFree(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
||||||
|
{
|
||||||
|
cmDspRC_t rc = kOkDspRC;
|
||||||
|
cmDspBinEnc_t* p = (cmDspBinEnc_t*)inst;
|
||||||
|
|
||||||
|
cmBinEncFree(&p->bep);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmDspRC_t _cmDspBinEncSetup(cmDspCtx_t* ctx, cmDspBinEnc_t* p )
|
||||||
|
{
|
||||||
|
cmDspRC_t rc = kOkDspRC;
|
||||||
|
|
||||||
|
cmBinEncFree(&p->bep);
|
||||||
|
|
||||||
|
p->bep = cmBinEncAlloc(ctx->cmProcCtx,NULL,cmDspSampleRate(ctx), cmDspSamplesPerCycle(ctx));
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmDspRC_t _cmDspBinEncReset(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
||||||
|
{
|
||||||
|
cmDspBinEnc_t* p = (cmDspBinEnc_t*)inst;
|
||||||
|
cmDspRC_t rc;
|
||||||
|
|
||||||
|
if((rc = cmDspApplyAllDefaults(ctx,inst)) != kOkDspRC )
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
return _cmDspBinEncSetup(ctx,p);
|
||||||
|
}
|
||||||
|
|
||||||
|
cmDspRC_t _cmDspBinEncExec(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
||||||
|
{
|
||||||
|
cmDspBinEnc_t* p = (cmDspBinEnc_t*)inst;
|
||||||
|
cmDspRC_t rc = kOkDspRC;
|
||||||
|
|
||||||
|
unsigned iChIdx = 0;
|
||||||
|
const cmSample_t* ip = cmDspAudioBuf(ctx,inst,kAudioInBeId,iChIdx);
|
||||||
|
unsigned iSmpCnt = cmDspVarRows(inst,kAudioInBeId);
|
||||||
|
|
||||||
|
// if no connected
|
||||||
|
if( iSmpCnt == 0 )
|
||||||
|
return rc;
|
||||||
|
|
||||||
|
unsigned oChIdx = 0;
|
||||||
|
cmSample_t* o0p = cmDspAudioBuf(ctx,inst,kAudioOut0BeId,oChIdx);
|
||||||
|
unsigned oSmp0Cnt = cmDspVarRows(inst,kAudioOut0BeId);
|
||||||
|
cmSample_t* o1p = cmDspAudioBuf(ctx,inst,kAudioOut1BeId,oChIdx);
|
||||||
|
unsigned oSmp1Cnt = cmDspVarRows(inst,kAudioOut0BeId);
|
||||||
|
|
||||||
|
assert( iSmpCnt==oSmp0Cnt && iSmpCnt==oSmp1Cnt );
|
||||||
|
|
||||||
|
cmBinEncExec( p->bep, ip, o0p, o1p, iSmpCnt );
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmDspRC_t _cmDspBinEncRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
||||||
|
{
|
||||||
|
cmDspBinEnc_t* p = (cmDspBinEnc_t*)inst;
|
||||||
|
cmDspRC_t rc = kOkDspRC;
|
||||||
|
|
||||||
|
cmDspSetEvent(ctx,inst,evt);
|
||||||
|
|
||||||
|
switch( evt->dstVarId )
|
||||||
|
{
|
||||||
|
case kModeBeId:
|
||||||
|
cmBinEncSetMode(p->bep, cmDspUInt(inst,kModeBeId));
|
||||||
|
break;
|
||||||
|
|
||||||
|
case kAzimBeId:
|
||||||
|
case kElevBeId:
|
||||||
|
case kDistBeId:
|
||||||
|
{
|
||||||
|
float azim = cmDspDouble(inst,kAzimBeId);
|
||||||
|
float elev = cmDspDouble(inst,kElevBeId);
|
||||||
|
float dist = cmDspDouble(inst,kDistBeId);
|
||||||
|
cmBinEncSetLoc(p->bep, azim, elev, dist );
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
{ assert(0); }
|
||||||
|
}
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
struct cmDspClass_str* cmBinEncClassCons( cmDspCtx_t* ctx )
|
||||||
|
{
|
||||||
|
cmDspClassSetup(&_cmBeDC,ctx,"BinauralEnc",
|
||||||
|
NULL,
|
||||||
|
_cmDspBinEncAlloc,
|
||||||
|
_cmDspBinEncFree,
|
||||||
|
_cmDspBinEncReset,
|
||||||
|
_cmDspBinEncExec,
|
||||||
|
_cmDspBinEncRecv,
|
||||||
|
NULL,NULL,
|
||||||
|
"Binaural filter.");
|
||||||
|
|
||||||
|
return &_cmBeDC;
|
||||||
|
}
|
||||||
|
|
||||||
|
//==========================================================================================================================================
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
kX2dId,
|
||||||
|
kY2dId,
|
||||||
|
kRadius2dId,
|
||||||
|
kAngle2dId
|
||||||
|
};
|
||||||
|
|
||||||
|
cmDspClass_t _cm2dDC;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
cmDspInst_t inst;
|
||||||
|
} cmDsp2d_t;
|
||||||
|
|
||||||
|
cmDspInst_t* _cmDsp2dAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsigned storeSymId, unsigned instSymId, unsigned id, unsigned va_cnt, va_list vl )
|
||||||
|
{
|
||||||
|
cmDspVarArg_t args[] =
|
||||||
|
{
|
||||||
|
{ "x", kX2dId, 0, 0, kOutDsvFl | kDoubleDsvFl, "X coordinate" },
|
||||||
|
{ "y", kY2dId, 0, 0, kOutDsvFl | kDoubleDsvFl, "Y coordinate"},
|
||||||
|
{ "radius",kRadius2dId, 0, 0, kOutDsvFl | kDoubleDsvFl, "Radius"},
|
||||||
|
{ "angle", kAngle2dId, 0, 0, kOutDsvFl | kDoubleDsvFl, "Angle"},
|
||||||
|
{ NULL, 0, 0, 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
|
cmDsp2d_t* p = cmDspInstAlloc(cmDsp2d_t,ctx,classPtr,args,instSymId,id,storeSymId,va_cnt,vl);
|
||||||
|
|
||||||
|
cmDspSetDefaultDouble(ctx, &p->inst, kX2dId, 0.0, 0.0);
|
||||||
|
cmDspSetDefaultDouble(ctx, &p->inst, kY2dId, 0.0, 0.0);
|
||||||
|
cmDspSetDefaultDouble(ctx, &p->inst, kRadius2dId, 0.0, 0.0);
|
||||||
|
cmDspSetDefaultDouble(ctx, &p->inst, kAngle2dId, 0.0, 0.0);
|
||||||
|
|
||||||
|
// create the UI control
|
||||||
|
cmDspUi2dCreate(ctx,&p->inst,kX2dId,kY2dId,kRadius2dId,kAngle2dId);
|
||||||
|
|
||||||
|
return &p->inst;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmDspRC_t _cmDsp2dReset(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
||||||
|
{
|
||||||
|
cmDspApplyAllDefaults(ctx,inst);
|
||||||
|
return kOkDspRC;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmDspRC_t _cmDsp2dRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
|
||||||
|
{
|
||||||
|
cmDspSetEvent(ctx,inst,evt);
|
||||||
|
|
||||||
|
return kOkDspRC;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
struct cmDspClass_str* cm2dClassCons( cmDspCtx_t* ctx )
|
||||||
|
{
|
||||||
|
cmDspClassSetup(&_cm2dDC,ctx,"twod",
|
||||||
|
NULL,
|
||||||
|
_cmDsp2dAlloc,
|
||||||
|
NULL,
|
||||||
|
_cmDsp2dReset,
|
||||||
|
NULL,
|
||||||
|
_cmDsp2dRecv,
|
||||||
|
NULL,
|
||||||
|
NULL,
|
||||||
|
"2d value control.");
|
||||||
|
|
||||||
|
return &_cm2dDC;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//==========================================================================================================================================
|
//==========================================================================================================================================
|
||||||
|
|
||||||
//==========================================================================================================================================
|
//==========================================================================================================================================
|
||||||
@ -5556,6 +5777,8 @@ cmDspClassConsFunc_t _cmDspClassBuiltInArray[] =
|
|||||||
cmShiftBufClassCons,
|
cmShiftBufClassCons,
|
||||||
cmNetSendClassCons,
|
cmNetSendClassCons,
|
||||||
cmRsrcWrClassCons,
|
cmRsrcWrClassCons,
|
||||||
|
cmBinEncClassCons,
|
||||||
|
cm2dClassCons,
|
||||||
|
|
||||||
cmDelayClassCons,
|
cmDelayClassCons,
|
||||||
cmPShiftClassCons,
|
cmPShiftClassCons,
|
||||||
|
Loading…
Reference in New Issue
Block a user