cmDspKr.h/c cmDspBuiltIn.c, cmDspPgmKr.c : Added 'NanoMap' DSP object.

This commit is contained in:
kpl 2013-10-31 18:07:00 -07:00
parent 341bde7a7c
commit edad3b99cd
4 changed files with 130 additions and 5 deletions

View File

@ -1203,8 +1203,8 @@ cmDspRC_t _cmDspMidiOutRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t
for(i=0; i<kMidiChCnt; ++i)
{
cmMpDeviceSend(p->devIdx,p->portIdx,kCtlMdId,121,0); // reset all controllers
cmMpDeviceSend(p->devIdx,p->portIdx,kCtlMdId,123,0); // turn all notes off
cmMpDeviceSend(p->devIdx,p->portIdx,kCtlMdId+i,121,0); // reset all controllers
cmMpDeviceSend(p->devIdx,p->portIdx,kCtlMdId+i,123,0); // turn all notes off
cmSleepMs(15);
}
}
@ -5411,6 +5411,7 @@ cmDspClassConsFunc_t _cmDspClassBuiltInArray[] =
cmScaleRangeClassCons,
cmActiveMeasClassCons,
cmAmSyncClassCons,
cmNanoMapClassCons,
NULL,
};

View File

@ -2123,3 +2123,122 @@ struct cmDspClass_str* cmAmSyncClassCons( cmDspCtx_t* ctx )
return &_cmAmSyncDC;
}
//==========================================================================================================================================
enum
{
kPgmNmId,
kStatusNmId,
kD0NmId,
kD1NmId,
kThruNmId
};
cmDspClass_t _cmNanoMapDC;
typedef struct
{
cmDspInst_t inst;
} cmDspNanoMap_t;
cmDspRC_t _cmDspNanoMapSend( cmDspCtx_t* ctx, cmDspInst_t* inst, unsigned st, unsigned d0, unsigned d1 )
{
cmDspSetUInt(ctx,inst,kD1NmId,d1);
cmDspSetUInt(ctx,inst,kD0NmId,d0);
cmDspSetUInt(ctx,inst,kStatusNmId,st);
return kOkDspRC;
}
void _cmDspNanoMapPgm( cmDspCtx_t* ctx, cmDspInst_t* inst, unsigned pgm )
{
unsigned i;
for(i=0; i<kMidiChCnt; ++i)
{
_cmDspNanoMapSend(ctx,inst,kCtlMdId+i,121,0); // reset all controllers
_cmDspNanoMapSend(ctx,inst,kCtlMdId+i,123,0); // turn all notes off
_cmDspNanoMapSend(ctx,inst,kCtlMdId+i,0,0); // switch to bank 0
_cmDspNanoMapSend(ctx,inst,kPgmMdId+i,pgm,0); // send pgm change
cmSleepMs(15);
}
}
cmDspInst_t* _cmDspNanoMapAlloc(cmDspCtx_t* ctx, cmDspClass_t* classPtr, unsigned storeSymId, unsigned instSymId, unsigned id, unsigned va_cnt, va_list vl )
{
cmDspVarArg_t args[] =
{
{ "pgm", kPgmNmId, 0, 0, kInDsvFl | kUIntDsvFl | kOptArgDsvFl, "Reprogram all channels to this pgm." },
{ "status", kStatusNmId, 0, 0, kOutDsvFl | kInDsvFl | kUIntDsvFl | kOptArgDsvFl, "MIDI status" },
{ "d0", kD0NmId, 0, 0, kOutDsvFl | kInDsvFl | kUIntDsvFl | kOptArgDsvFl, "MIDI channel message d0" },
{ "d1", kD1NmId, 0, 0, kOutDsvFl | kInDsvFl | kUIntDsvFl | kOptArgDsvFl, "MIDI channel message d1" },
{ "thru", kThruNmId, 0, 0, kInDsvFl | kBoolDsvFl | kOptArgDsvFl, "Enable pass through."},
{ NULL, 0, 0, 0, 0 }
};
cmDspNanoMap_t* p = cmDspInstAlloc(cmDspNanoMap_t,ctx,classPtr,args,instSymId,id,storeSymId,va_cnt,vl);
cmDspSetDefaultUInt(ctx,&p->inst, kPgmNmId, 0, 0 );
return &p->inst;
}
cmDspRC_t _cmDspNanoMapReset(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
{
cmDspRC_t rc = kOkDspRC;
cmDspApplyAllDefaults(ctx,inst);
_cmDspNanoMapPgm(ctx,inst,cmDspUInt(inst,kPgmNmId));
return rc;
}
cmDspRC_t _cmDspNanoMapRecv(cmDspCtx_t* ctx, cmDspInst_t* inst, const cmDspEvt_t* evt )
{
//cmDspNanoMap_t* p = (cmDspNanoMap_t*)inst;
switch( evt->dstVarId )
{
case kPgmNmId:
cmDspSetEvent(ctx,inst,evt);
_cmDspNanoMapPgm(ctx,inst,cmDspUInt(inst,kPgmNmId));
break;
case kStatusNmId:
{
unsigned status = cmDsvGetUInt(evt->valuePtr);
if( (status & 0xf0) == kNoteOnMdId )
{
unsigned d0 = cmDspUInt(inst,kD0NmId);
unsigned ch = d0 % 8;
status = (status & 0xf0) + ch;
cmDspSetUInt(ctx,inst,kStatusNmId,status);
}
}
break;
default:
cmDspSetEvent(ctx,inst,evt);
break;
}
return kOkDspRC;
}
struct cmDspClass_str* cmNanoMapClassCons( cmDspCtx_t* ctx )
{
cmDspClassSetup(&_cmNanoMapDC,ctx,"NanoMap",
NULL,
_cmDspNanoMapAlloc,
NULL,
_cmDspNanoMapReset,
NULL,
_cmDspNanoMapRecv,
NULL,
NULL,
"Nanosynth Mapper");
return &_cmNanoMapDC;
}

View File

@ -15,6 +15,7 @@ extern "C" {
struct cmDspClass_str* cmScaleRangeClassCons( cmDspCtx_t* ctx );
struct cmDspClass_str* cmActiveMeasClassCons( cmDspCtx_t* ctx );
struct cmDspClass_str* cmAmSyncClassCons( cmDspCtx_t* ctx );
struct cmDspClass_str* cmNanoMapClassCons( cmDspCtx_t* ctx );
#ifdef __cplusplus
}

View File

@ -117,6 +117,7 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
cmDspInst_t* pts = cmDspSysAllocInst(h,"PortToSym", NULL, 2, "on", "off" );
cmDspInst_t* mip = cmDspSysAllocInst(h,"MidiIn", NULL, 0 );
cmDspInst_t* mfp = cmDspSysAllocInst(h,"MidiFilePlay",NULL, 0 );
cmDspInst_t* nmp = cmDspSysAllocInst(h,"NanoMap", NULL, 0 );
cmDspInst_t* mop = cmDspSysAllocInst(h,"MidiOut", NULL, 2, r.midiDevice,r.midiOutPort);
cmDspInst_t* sfp = cmDspSysAllocInst(h,"ScFol", NULL, 1, r.scFn );
cmDspInst_t* amp = cmDspSysAllocInst(h,"ActiveMeas", NULL, 1, 100 );
@ -466,15 +467,18 @@ cmDspRC_t _cmDspSysPgm_TimeLine(cmDspSysH_t h, void** userPtrPtr )
cmDspSysInstallCb(h, mfp, "d1", d1Rt, "f-in", NULL );
cmDspSysInstallCb(h, d1Rt, "f-out-0", sfp, "d1", NULL );
cmDspSysInstallCb(h, d1Rt, "f-out-1", mop, "d1", NULL );
cmDspSysInstallCb(h, d1Rt, "f-out-1", nmp, "d1", NULL );
cmDspSysInstallCb(h, nmp, "d1", mop, "d1", NULL );
cmDspSysInstallCb(h, mfp, "d0", d0Rt, "f-in", NULL );
cmDspSysInstallCb(h, d0Rt, "f-out-0", sfp, "d0", NULL );
cmDspSysInstallCb(h, d0Rt, "f-out-1", mop, "d0", NULL );
cmDspSysInstallCb(h, d0Rt, "f-out-1", nmp, "d0", NULL );
cmDspSysInstallCb(h, nmp, "d0", mop, "d0", NULL );
cmDspSysInstallCb(h, mfp, "status", stRt, "f-in", NULL );
cmDspSysInstallCb(h, stRt, "f-out-0", sfp, "status",NULL );
cmDspSysInstallCb(h, stRt, "f-out-1", mop, "status",NULL );
cmDspSysInstallCb(h, stRt, "f-out-1", nmp, "status",NULL );
cmDspSysInstallCb(h, nmp, "status", mop, "status",NULL );
// MIDI input port
cmDspSysInstallCb(h, mip, "smpidx", sfp, "smpidx", NULL );