# The structure of the LMMS core

## Important classes

There are some important C++ classes in the LMMS codebase. Here are some examples:

* `LmmsCore`(also known as `Engine`): Holds the instances of other important classes, e.g. `Song`, `AudioEngine`, `PatternStore`, `Mixer`.
* `Song`: Controls the playback. Also works as a top-level container of LMMS projects.
* `AudioEngine`: Renders audio independently of audio backends. Also manages audio backends and MIDI interfaces.
* `PlayHandle`: Manages objects that plays sound, ex. notes, instruments, sample clips.
* `AudioDevice`: Base class for audio backends.
* `Model`: Models in sense of [Model-view-controller pattern](https://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller)
  * `AutomatableModel`: `Model`s which can be controlled by `Controller`s and/or `AutomationPattern`s, e.g. `BoolModel`, `IntModel`, `FloatModel`.
* `Track`: Base class for various types of tracks, including `AutomationTrack`, `BBTrack`, `InstrumentTrack`, and `SampleTrack`.
* `Plugin`: Base class for LMMS plugins(instruments and effects). For details on LMMS plugins, see the plugin system section.
  * `Instrument`: Generates audio signal from notes(from note clips or external MIDI inputs)
  * `Effect`: Transforms audio signal
