Developer Guide - Overview of the system
gAlan is, at its heart, an event-driven program. GTK+, the GUI toolkit, is event-based, and the flow of sound (audio-signals) and audio-events (both detailed in section 3) is controlled by the events received from the user.
NOTE: If you're not clear on the definition of the terms event, audio-event, signal, audio-signal, generator, component and control, you might want to skip ahead briefly to sections 3 and 4.
For this overview, I will assume that the currently active master clock is that attached to an OSS Output generator/plugin. The default master clock works similarly, except it is driven by a timer and not by the sound card.
When an OSS Output master clock is activated, the routine gen_clock_mainloop is registered with GDK so that whenever /dev/dsp is ready for more input (see the use of gdk_input_add in oss_output.c), gen_clock_mainloop is called. gen_clock_mainloop alternates between processing audio-events (as they come due) and firing the realtime-handler functions (registered by gen_register_realtime_fn).
One of the registered realtime-callbacks will be part of the OSS Output generator. When oss_output.c's realtime_handler receives an AE_REALTIME event (see generator.h), it
This should all be giving the impression that audio-events are pushed through the system, whereas audio-signals are pulled.