{{tag>igde editor audio}}
[[:start|Start Page]] >> [[:gamedev|Game Development with the Drag[en]gine]] >> [[gamedev:deigde|Drag[en]gine Integrated Game Development Environment]] >> **Synthesizer Editor**
====== IGDE Synthesizer Editor ======
The synthesizer editor allows to edit //Synthesizer// resources (*.desynth) for your game. Synthesizers produce sound using sources. The production process is controlled using controllers linked to source properties. Since sound produces many samples per second the controllers are defined by curves.
{{:gamedev:deigde:editors:editor_synthesizer.jpg?direct&400|Synthesizer editor preview}}
The editor window composes of the property panels.
====== Controllers ======
{{ :gamedev:deigde:editors:editor_synthesizer_controllers.png?nolink|Controller panel}}
Controllers are used by game programmers to adjust the sound production. In general the artist defines the controller ranges but game programmers can overrule them to make their life easier. This does not interfere with the sound production process. The output of the controller is a **Bezier Curve** with the curve //Output Value// linearly mapped from the range **Minimum Value -> Maximum Value** to the range **0 -> 1**. See [[gamedev:deigde:editors:widgetbeziercurve|Bezier Curve Editor]] for usage. The elapsed synthesizer time is the curve //Input Value//.
Controllers are typically accessed by the game developer using the unique **Controller Name** (case sensitive). This allows to mix and match different animators with differing controller setups (count, ordering and ranges) as long as the required names are present.
The controller list is an ordered list. For this reason controllers are shown with their index number too. Game developers can use this index number as an alternative to controller names.
The **Clamp value to range** check box determines if the input value (elapsed play time) is clamped to the controller range or wraps around if going past the range.
Below the curve editor some buttons are located to quickly set the curve using typical shapes to while playing back the synthesizer. It is possible to change the curve while the synthesizer is producing sound but you have to set the curve ahead of time otherwise artefacts can happen. The //Synthesizer Module// decides what ahead-time is used.
The **Const** button sets the curve to a constant curve using the value from the input field.
The **Linear** button sets the curve to a linear curve ranging from (0, //Minimum Value//) to (//Play time//, //Maximum Value//).
The **Inverse** button next to it set the same linear curve but with the //Minimum// and //Maximum// value flipped.
The **Bezier** button sets the curve to a bezier curve ranging from (0, //Minimum Value//) to (//Play time//, //Maximum Value//).
The **Inverse** button next to it set the same bezier curve but with the //Minimum// and //Maximum// value flipped.
====== Links ======
{{ :gamedev:deigde:editors:editor_synthesizer_links.png?nolink|Link panel}}
Links map controller values to source target input values using bezier curves. The artist is in full control of links. This decouples controller ranges allowing game programmers to freely manipulate them as they need.
The curve input range is **0 -> 1**. The curve output range is also **0 -> 1**. Hence using a default linear curve forwards controller output values unmodified to rule target input values. See [[gamedev:deigde:editors:widgetbeziercurve|Bezier Curve Editor]] for usage.
Links have a unique **Name** used to identify them in source targets. The link list is sorted alphabetically.
The **Controller** value indicates which controller is used as input for the link. If no controller is assigned the link uses 0 as input value.
The **Repeat** value allows to repeat the curve multiple times. This is useful for jig-saw type curves which can not be done with a bezier or linear type curve. This is also useful for overlaid detail sources. There you can easily adjust their play speed relative to the main source.
====== Sources ======
{{ :gamedev:deigde:editors:editor_synthesizer_sources.png?nolink|}}
Sources define how the sound is produced. Sources are processed from top to bottom in the order they are specified. Sources can produce pre-recorded sound or procedurally calculated sound. See [[gamedev:synthesizers|Synthesizers]] for a comprehensive explanation of source types. Depending on the selected source type the panel layout below is different.
Sources can be grouped using the **Group** sources. Groups can be unfolded in the list. Inside a group children sources can be added. The sound output of the group source is produced by processing the children sources from top to bottom in the order they are specified.
//**General Settings**//
Parameters present for all source types.
The **Name** is the unique name of source. It is used for editing purpose only and is ignore in-game.
The **Mix Mode** defines how the produces sound is mixed with the sound produces by prior sources. Supported are **Add** to add the sound to the mix and **Blend** to cross-fade (blend) between the prior sound and the produced sound.
The **Blend Factor** defines the strength of the sound in the mix (percentage value).
The **Minimum Volume** and **Maximum Volume** define the volume range if the //Volume// target is linked to controllers. A controller output value of 0 uses the //Minimum Volume//. A controller output value of 1 uses the //Maximum Volume//. Values in between blend linearly between the minimum and maximum volume. If no controller is linked the //Minimum Volume// is used.
The **Minimum Panning** and **Maximum Panning** define the panning range if the //Panning// target is linked to controllers. Panning defines the position of the sound relative to the listener and is only used if more than 1 channel is used. A value of -1 places the sound on the far left side. A value of 1 places the sound on the far right side. A controller output value of 0 uses the //Minimum Panning//. A controller output value of 1 uses the //Maximum Panning//. Values in between blend linearly between the minimum and maximum panning. If no controller is linked the //Minimum Panning// is used.
If **Enable Source** is ticked the source produces sound otherwise it is skipped.
The **Targets and Links** panel is present for all source types. The list of available targets depends on the source type. Targets define source parameters that can be manipulated using controllers via links. Each target can have one or more links assigned. If more than one link is assigned their output values are multiplied together. For this reason links produce output values in the range **0 -> 1**. If no link is present an input value of 0 is used.
The last panel below changes according to the type of the selected source. See [[gamedev:synthesizers|Synthesizers]] for an explanation of the parameters used.
//**Effects**//
Each rule can be assigned **Effects** to modify the produced sound. Effects are applied by the order in the list from top to bottom. Effects can be enabled and disabled. Effects have targets like sources to manipulate their targets.
====== Synthesizer Settings ======
{{ :gamedev:deigde:editors:editor_synthesizer_synthesizer.png?nolink|Synthesizer settings}}
Defines the synthesizer parameters and allows to test-play the synthesizer.
The **Channels** defines the number out channels the synthesizer produces sound for. For in-game speakers mono sound sources (1 channel) should be used. For menu music or in-game music stereo sound sources (2 channels) should be used. Multi-channel synthesizers are possible if the user has appropriate sound systems at his disposition. The support for such setups depends on the //Audio Module// used by the customer. You should not rely on such hardware to be present.
The **Sample Rate** defines the sample rate of the sound produced by the synthesizer. Typical values are **44100**, **22050** and **11025**. Recommended is **44100**. Lower fidelity sound sources are useful to reduce file sizes and processing time but they introduce artefacts which are notice with certain sounds.
The **Bytes Per Sample** defines the count of bytes required to represent one sample. Typical values are **1** and **2**. Recommended is **2**. Lower fidelity sound sources are useful to reduce file sizes and processing time but they introduce artefacts which are notice with certain sounds.
Sound sources (*.ogg for example) have to match the synthesizer //Channels//, //Sample Rate// and //Bytes per Sample//. If they do not match the will be ignored.
The **Sample Count** defines the count of samples produced by the synthesizer. Synthesizers are always finite in length but can potentially loop forever. Changing the sample count recalculates the play time in seconds of the synthesizer.
The **Play Time** defines the length of the synthesizer in seconds. Changing the play time recalculates the sample count of the synthesizer.
The **Playback / Testing** controls playback to test the synthesizer using a speaker played in the editor.