I am trying to understand how sinks and sink inputs work. The code I am trying to figure out creates the following sinks: master_sink (external sink obtained from ALSA sink module via pa_namereq_get) raw_sink (created with the flat_volume_sink parameter of the pa_sink_new_data structure set to master_sink) voip_sink (created with the flat_volume_sink parameter of the pa_sink_new_data structure set to raw_sink) And the following sink inputs: aep_sink_input (created with the sink parameter of the pa_sink_input_new_data structure set to raw_sink and the origin_sink parameter of the pa_sink_input_new_data structure set to voip_sink) hw_sink_input (created with the sink parameter of the pa_sink_input_new_data structure set to master_sink and the origin_sink parameter of the pa_sink_input_new_data structure set to raw_sink) cs_call_sink_input (created with the sink parameter of the pa_sink_input_new_data structure set to voip_sink and the origin_sink parameter of the pa_sink_input_new_data structure set to 0) I then have some other code that feeds audio into the voip_sink sink Can someone tell me the pathway in which audio will go from the app through to being fed into master_sink (and from there into the hardware)? Which sinks and sink inputs will it pass through and in which order? What about if audio passes into the raw_sink sink, what path will it take through the code in that case? And where should I be looking (e.g. specific callback functions on the sinks or sink inputs) for anything that might be doing any kind of processing on the audio?