123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186 |
- #ifndef cmAudDspIF_h
- #define cmAudDspIF_h
-
- #ifdef __cplusplus
- extern "C" {
- #endif
-
- //( { file_desc: "Virtual interface to the audio DSP system." kw:[rt]}
- //
- // This class provides a two-way interface to the audio DSP system.
- // It is designed to work independenty of the physical
- // method of communication. For example, when used by
- // cmAudDspLocal, it supports in memory transfer of messages
- // between the application and the audio-DSP engine.
- // Another implementation however could use it to support
- // a networked communication scheme to a remote audio-DSP
- // system. Note that in either case, however, this class
- // resides with, and is linked to, the application, and not
- // the engine.
-
- // This API has two basic responsibilities:
- //
- // 1) Provides a function based interface to the audio DSP system for the
- // client application. This is more convenient, and safer, than the lower level
- // message based interface provided by cmAudDsp.h.
- // The client calls these API functions to send commands to the audio DSP
- // system. Internally the cmAdIfxxx functions converts the commands to
- // raw message packets and passes them to a transmission service
- // via cmAdIfParm_t audioDspFunc().
- //
- // 2) Acts as the receiver of raw message streams from whatever external
- // service (e.g. cmAudDspLocal, cmAudDspUdp) is receiving raw message packets
- // from audio DSP system.
- //
- // This process is driven by periodic calls from the client to
- // cmAdIfDispatchMsgToHost().
- // cmAdIfDispatchMsgToHost() then generates an internal
- // 'kClientMsgPollDuiId' msg which is passed toward the
- // cmAudDsp system.
- // When the msg encounters a sub-system with queued msgs waiting
- // for the client a callback chain ensues which eventually
- // calls cmAdIfRecvAudDspMsg() which in turn calls the appropriate
- // client provided cmAdIfDispatch_t function (ssInitFunc,statusFunc or uiFunc).
- // Note that this entire chain of calls occurs in the client thread
- // and in the context of the cmAdIfDispatchMsgToHost() procedure.
- //)
-
- //(
- enum
- {
- kOkAiRC = cmOkRC,
- kAudDspFailAiRC,
- kLHeapFailAiRC,
- kUnknownMsgTypeAiRC,
- kMsgCorruptAiRC,
- kSendFailAiRC,
- kQueueFailAiRC,
- kNoMsgAiRC,
- kJsonFailAiRC,
- kDeserialFailAiRC,
- kFileSysFailAiRC
- };
-
- typedef cmRC_t cmAiRC_t;
-
- typedef cmHandle_t cmAiH_t;
-
- // These functions are provided by the client to receive messages
- // from the audio DSP sytem. These functions are only called from the client thread
- // from within cmAdIfDispatchMsgToHost().
- typedef struct
- {
- void* cbDataPtr; // data to send as the first arg. to app. callbacks
-
- cmRC_t (*ssInitFunc)( void* cbDataPtr, const cmAudioSysSsInitMsg_t* r, const char* iDevLabel, const char* oDevLabel );
- cmRC_t (*statusFunc)( void* cbDataPtr, const cmAudioSysStatus_t* r, const double* iMeterArray, const double* oMeterArray );
- cmRC_t (*uiFunc)( void* cbDataPtr, const cmDspUiHdr_t* r );
- } cmAdIfDispatch_t;
-
- typedef struct
- {
- cmAdIfDispatch_t dispatchRecd; // client application callback pointers
- cmMsgSendFuncPtr_t audDspFunc; // the cmAdIfXXX functions use the callback to send msgs to the audio DSP system.
- void* audDspFuncDataPtr; // data to send with the audio DSP callback function
- } cmAdIfParm_t;
-
-
- extern cmAiH_t cmAiNullHandle;
-
- cmAiRC_t cmAdIfAllocate( cmCtx_t* ctx, cmAiH_t* hp, const cmAdIfParm_t* parms );
- cmAiRC_t cmAdIfFree( cmAiH_t* hp );
-
- bool cmAdIfIsValid( cmAiH_t h );
-
- // Receive a msg from the audio DSP system. This is the main point of entry
- // for all calls from the audio DSP system to the client.
- // This function is provided as a callback to the owner of this cmAudDspIF
- // (e.g. cmAudDspLocal, cmAudDspUdpClient) it should never need to be called
- // by the client.
- cmAiRC_t cmAdIfRecvAudDspMsg( cmAiH_t h, unsigned msgByteCnt, const void* msgDataPtr);
-
-
- //-------------------------------------------------------------------------
- //
- // The functions below are used to send commands to the audio DSP system
- // from the client application.
- //
-
- // Print a hardware report.
- cmAiRC_t cmAdIfDeviceReport( cmAiH_t h );
-
- // Select a audio system configuration. This must be done prior to
- // sending any other commands.
- cmAiRC_t cmAdIfSetAudioSysCfg( cmAiH_t h, unsigned asCfgIdx );
-
- // Select an audio input or output device for a given audio sub-system.
- // An audio configuration must have been selected via cmAdIfSetAudioSysCfg()
- // prior to calling this function.
- cmAiRC_t cmAdIfSetAudioDevice( cmAiH_t h, unsigned asSubIdx, bool inputFl, unsigned devIdx );
-
- // Set the sample rate for a given audio sub-system or the entire audio system.
- // Set asSubIdx to cmInvalidIdx to assign the sample rate to all sub-systems
- // of the current audio system configuration.
- // An audio configuration must have been selected via cmAdIfSetAudioSysCfg()
- // prior to calling this function.
- cmAiRC_t cmAdIfSetSampleRate( cmAiH_t h, unsigned asSubIdx, double srate );
-
- // Select a DSP program for a given audio sub-system or the entire audio system.
- // Set asSubIdx to cmInvalidIdx to load the program on all sub-systems
- // of the current audio system configuration.
- // An audio configuration must have been selected via cmAdIfSetAudioSysCfg()
- // prior to calling this function.
- cmAiRC_t cmAdIfLoadProgram( cmAiH_t h, unsigned asSubIdx, unsigned pgmIdx );
-
- // Print a representation (instances and connections) of the loaded program
- // to a JSON file.
- cmAiRC_t cmAdIfPrintPgm( cmAiH_t h, unsigned asSubIdx, const cmChar_t* fn );
-
- // Start the audio streaming.
- // An audio configuration must have been selected via cmAdIfSetAudioSysCfg()
- // and a DSP program must have been selected via cmAdIfLoadProgram()
- // prior to calling this function.
- cmAiRC_t cmAdIfEnableAudio( cmAiH_t h, bool enableFl );
-
- // Enable/disable periodic audio system status notifications.
- cmAiRC_t cmAdIfEnableStatusNotify( cmAiH_t h, bool enableFl );
-
- // Send a kUiSelAsId style message to the audio DSP system.
- cmAiRC_t cmAdIfSendMsgToAudioDSP(
- cmAiH_t h,
- unsigned asSubIdx,
- unsigned msgTypeId,
- unsigned selId,
- unsigned flags,
- unsigned instId,
- unsigned instVarId,
- const cmDspValue_t* valPtr );
-
- // The client application must periodically call this function to
- // receive pending messages from the audio DSP system. The
- // messages are delivered via callbacks provided by cmAdIfDispatch_t.
- // This function should only be called from the client thread.
- cmAiRC_t cmAdIfDispatchMsgToHost( cmAiH_t h );
-
- /*
- Local call chain:
- cmAdIfDispatchMsgToHost() -> p->parms.audDspFunc = cmAudDspLocal::_cmAdlAudDspSendFunc()
- -> cmAudioDsp::cmAudDspReceiveClientMsg()
- -> cmAudioDsp::_cmAudDspClientMsgPoll()
- -> cmAudioSys::cmAudioSysReceiveMsg()
- -> cmThread::cmTs1p1cDequeueMsg()
- -> cmAudioSysCfg_t::clientCbFunc = cmAudDsp::_cmAudioSysToClientCallback()
- -> cmAudDsp::cmAd_t::cbFunc = cmAudDspLocal::_cmAudDspLocalCallback()
- -> cmAudDspIF::cmAdIfRecvAudDspMsg()
- -> cmAudDspIF::_cmAiDispatchMsgToClient()
- -> cmAudDspIF::cmAdIfDispatch_t.uiFunc = kcApp::_s_handleUiMsg()
-
- */
-
- //)
-
- #ifdef __cplusplus
- }
- #endif
-
- #endif
|