|
|
EngineProcedureEXT - Allow clients to wrap engine procedure
|
|
|
|
|
|
About
|
|
|
-----
|
|
|
Clients may be interested in having more control over the engine procedure. In
|
|
|
particular, they may want to modify or access the generated output before
|
|
|
passing it to the underlying platform. In other cases, clients like Wine may
|
|
|
have specific thread requirements that the platform's audio library cannot
|
|
|
satisfy. This extension allows clients to "wrap" the engine procedure with
|
|
|
arbitrary code.
|
|
|
|
|
|
Dependencies
|
|
|
------------
|
|
|
This extension does not interact with any non-standard XAudio features.
|
|
|
|
|
|
New Types
|
|
|
---------
|
|
|
typedef void (FAUDIOCALL *FAudioEngineCallEXT)(FAudio *audio, float *output);
|
|
|
|
|
|
typedef void (FAUDIOCALL *FAudioEngineProcedureEXT)(
|
|
|
FAudioEngineCallEXT defaultEngineProc,
|
|
|
FAudio *audio,
|
|
|
float *output,
|
|
|
void *user
|
|
|
);
|
|
|
|
|
|
New Procedures and Functions
|
|
|
----------------------------
|
|
|
FAUDIOAPI void FAudio_SetEngineProcedureEXT(
|
|
|
FAudio *audio,
|
|
|
FAudioEngineProcedureEXT clientEngineProc,
|
|
|
void *user
|
|
|
);
|
|
|
|
|
|
How to Use
|
|
|
----------
|
|
|
At any time, the client may request that FAudio call the given
|
|
|
clientEngineProc function instead of FAudio's default engine procedure
|
|
|
beginning with the next engine tick. It is valid to call
|
|
|
FAudio_SetEngineProcedureEXT before creating the mastering voice.
|
|
|
|
|
|
clientEngineProc will be invoked with a pointer to FAudio's default engine
|
|
|
procedure, allowing the client to execute the procedure on a specific thread,
|
|
|
or operate on the retrieved audio before returning control back to FAudio.
|
|
|
|