> For the complete documentation index, see [llms.txt](https://docs.lmms.io/developer-guides/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.lmms.io/developer-guides/core/instruments-and-effects/the-type-of-instruments.md).

# The type of instruments

`Instrument::Flag` defines some properties of instruments.

```cpp
	enum Flag
	{
		NoFlags = 0x00,
		IsSingleStreamed = 0x01,	/*! Instrument provides a single audio stream for all notes */
		IsMidiBased = 0x02,			/*! Instrument is controlled by MIDI events rather than NotePlayHandles */
		IsNotBendable = 0x04,		/*! Instrument can't react to pitch bend changes */
	};
```

Here are some explanations:

#### Single-streamed vs. Multiple-streamed

An instrument in LMMS is called single-streamed if it renders and returns audio from all notes at once, not for each note. Conversely, a multiple-streamed instrument renders audio for each note and returns the output from every notes separately.

In other words, an instrument is multiple-streamed if and only if LMMS(*not* the instrument plugin) can control and access the rendered result of individual notes.

Some per-note features such as built-in polyphonic envelopes, LFOs, and filters are only available in multiple-streamed instruments.

#### MIDI-based vs. Non-MIDI-based

MIDI-based instruments process notes only using MIDI events, while others use `NotePlayHandle`s for it. For example, VST instruments(and LV2 in the future) are MIDI-based.

{% hint style="info" %}
All MIDI-based instruments must be single-streamed in the current implementation
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.lmms.io/developer-guides/core/instruments-and-effects/the-type-of-instruments.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
