In this section I'll introduce the keyword run which can be understood as a playing instance. But I rather talk about run because it's not guaranted that the recall outputs directly to a device.
The implemented effect as a subclass of AgsRecall resides as template on the appropriate AgsAudio or AgsChannel.
When recycling changes on input, new AgsRecallRecycling will be added. This class function may be of relevancy:
channel_class->recycling_changed
As a new run occures the AgsRecallAudioRun and AgsRecallChannelRun will be duplicated, dependencies resolved, state initialized and enter the play loop hierarchy. These class functions will be called on the recall:
channel_class->duplicate
Further processing:
recall_class->resolve_dependency
The recall may want to depend on a other recall (eg. a counter) and may ignore following calls while rather do processing on an event of the dependency.
recall_class->run_init_pre, recall_class->run_init_inter & recall_class->run_init_post
Will be called only once for the run reffering to dedicated AgsRecallID.
recall_class->run_pre, recall_class->run_inter & recall_class->run_post
Will be called for each cycle of a run reffering to AgsRecallID.
There may be more than one AgsRecallID for a template i.e. there can exist more than one run at the very same time.
As soon as an add_audio_signal event will be emitted on an AgsRecycling, the AgsRecallAudioSignal subclass will be instantiated which performs audio stream manipulation. These class functions will be called on the recall:
recall_class->run_init_pre, recall_class->run_init_inter & recall_class->run_init_post
recall_class->automate, recall_class->feed_input_queue, recall_class->run_pre, recall_class->run_inter, recall_class->run_post & recall_class->feed_output_queue
When you're done with processing call:
recall_class->done