MidiPlayerTK.MidiSynth

Contains all the functions to build a wave table synth: load SoundFont and samples, process midi event, play voices, controllers, generators ...
This class is inherited by others class to build these prefabs: MidiStreamPlayer, MidiFilePlayer, MidiInReader.
It is not recommended to instanciate directly this class, rather add prefabs to the hierarchy of your scene. More...

+ Inheritance diagram for MidiPlayerTK.MidiSynth:

Public Member Functions

string MPTK_Channel (int channel)
 Build an info string about the channel. Moreover a good pretext to display an example of Channel API. More...
 
int MPTK_ChannelBankGetIndex (int channel)
 Get channel bank. More...
 
int MPTK_ChannelCount ()
 Get channel count. The midi norm is 16, but MPTK can manage up to 32 channels. More...
 
bool MPTK_ChannelEnableGet (int channel)
 Is channel is enabled or disabled. More...
 
void MPTK_ChannelEnableSet (int channel, bool enable)
 Enable or disable a channel. More...
 
int MPTK_ChannelForcedPresetGet (int channel)
 Set forced preset on the channel. Midi will allways playing with this preset even if a Midi Preset Change message is received.
Set to -1 to disable this behavior. More...
 
bool MPTK_ChannelForcedPresetSet (int channel, int preset)
 Set forced preset on the channel. Midi will allways playing with this preset even if a Midi Preset Change message is received.
Set to -1 to disable this behavior. More...
 
int MPTK_ChannelNoteCount (int channel)
 Get count of notes played since the start of the Midi. More...
 
bool MPTK_ChannelPresetChange (int channel, int preset, int newbank=-1)
 Change the preset and bank for the channel.
When playing a Midi file, the preset is set by channel with the Midi message Patch Change.
The bank is changed with a ControlChange Midi message.
The new value of the bank is local for the channel, the preset list is not updated.
To change globally the bank, use instead the global methods: MidiPlayerGlobal.MPTK_SelectBankInstrument or MidiPlayerGlobal.MPTK_SelectBankDrum More...
 
int MPTK_ChannelPresetGetIndex (int channel)
 Get channel preset indx. More...
 
string MPTK_ChannelPresetGetName (int channel)
 Get channel current preset name. More...
 
float MPTK_ChannelVolumeGet (int channel)
 Get the volume of the channel More...
 
void MPTK_ChannelVolumeSet (int channel, float volume)
 Set the volume for a channel as a percentage. More...
 
void MPTK_ChorusSetDefault ()
 [MPTK PRO] - Set Chorus Unity default value as defined with Unity. More...
 
void MPTK_ClearAllSound (bool destroyAudioSource=false, int _idSession=-1)
 Clear all sound by sending note off.
That could take some seconds because release time for sample need to be played. More...
 
void MPTK_InitSynth (int channelCount=16)
 Initialize the synthetizer: channel, voices, modulator.
It's not usefull to call this method if you are using prefabs (MidiFilePlayer, MidiStreamPlayer, ...).
Each gameObjects created from these prefabs have their own, autonomous and isolated synth. More...
 
void MPTK_ResetStat ()
 Reset voices statistics More...
 
void MPTK_ReverbSetDefault ()
 [MPTK PRO] - Set Reverb Unity default value as defined with Unity. More...
 
void MPTK_SFChorusSetDefault ()
 [MPTK PRO] - Set Chrous SoundFont default value as defined in fluidsynth.
FLUID_CHORUS_DEFAULT_N 3
FLUID_CHORUS_DEFAULT_LEVEL 2.0 but set to 0.9 (thank John)
FLUID_CHORUS_DEFAULT_SPEED 0.3
FLUID_CHORUS_DEFAULT_DEPTH 8.0
FLUID_CHORUS_DEFAULT_TYPE FLUID_CHORUS_MOD_SINE
WIDTH 10 More...
 
void MPTK_SFFilterSetDefault ()
 [MPTK PRO] - Set Filter SoundFont default value as defined in fluidsynth.
More...
 
void MPTK_SFReverbSetDefault ()
 [MPTK PRO] - Set Reverb SoundFont default value as defined in fluidsynth.
FLUID_REVERB_DEFAULT_ROOMSIZE 0.2f
FLUID_REVERB_DEFAULT_DAMP 0.0f
FLUID_REVERB_DEFAULT_WIDTH 0.5f
FLUID_REVERB_DEFAULT_LEVEL 0.9f
More...
 
void MPTK_StartSequencerMidi ()
 Start the Midi sequencer: each midi events are read and play in a dedicated thread.
This thread is automatically started by prefabs MidiFilePlayer, MidiListPlayer, MidiExternalPlayer. More...
 
void MPTK_StopSynth ()
 Stop processing samples by the synth and the Midi sequencer. More...
 
IEnumerator MPTK_WaitAllNotesOff (int _idSession=-1)
 Wait until all notes are off.
That could take some seconds due to the samples release time.
Therefore, the method exit after a timeout of 3 seconds.
*** Use this method only as a coroutine *** More...
 
delegate void OnAudioFrameStartHandler (double synthTime)
 Delegate for the event OnAudioFrameStartHandler. see OnAudioFrameStart More...
 

Public Attributes

bool MPTK_ApplyModLfo
 Apply LFO effect defined in the SoundFont More...
 
bool MPTK_ApplyRealTimeModulator
 Apply real time modulatoreffect defined in the SoundFont: pitch bend, control change, enveloppe modulation More...
 
bool MPTK_ApplySFChorus
 [MPTK PRO] - Apply chorus effect as defined in the SoundFont.
This effect is processed with the fluidsynth algo independently on each voices but with a small decrease of performace (10%). More...
 
bool MPTK_ApplySFFilter
 [MPTK PRO] - Apply frequency low-pass filter as defined in the SoundFont.
This effect is processed with the fluidsynth algo independently on each voices but with a small decrease of performace (40%). More...
 
bool MPTK_ApplySFReverb
 [MPTK PRO] - Apply reverberation effect as defined in the SoundFont.
This effect is processed with the fluidsynth algo independently on each voices but with a small decrease of performace (40%). More...
 
bool MPTK_ApplyVibLfo
 Apply vibrato effect defined in the SoundFont More...
 
bool MPTK_AutoBuffer = true
 Voice buffering is important to get better performance. But you can disable this fonction with this parameter. More...
 
int MPTK_AutoCleanVoiceLimit
 Free voices older than MPTK_AutoCleanVoiceLimit are removed when count is over than MPTK_AutoCleanVoiceTime More...
 
bool MPTK_CorePlayer
 If true then Midi events are read and play from a dedicated thread.
If false, MidiSynth will use AudioSource gameobjects to play sound.
This properties must be defined before running the application from the inspector.
The default is true.
Warning: The non core mode player (MPTK_CorePlayer=false) will be removed with the next major version (V3) More...
 
float MPTK_CutOffVolume = 0.05f
 When amplitude is below this value the playing of sample is stopped (voice_off).
Can be increase for better performance but with degraded quality because sample could be stopped earlier. Remember: Amplitude can varying between 0 and 1. More...
 
bool MPTK_DirectSendToPlayer
 If true (default) then Midi events are sent automatically to the midi player.
Set to false if you want to process events without playing sound.
OnEventNotesMidi Unity Event can be used to process each notes. More...
 
bool MPTK_EnableChangeTempo
 Should accept change tempo from Midi Events ? More...
 
bool MPTK_EnableFreeSynthRate = false
 Allow direct setting of the Synth Rate More...
 
bool MPTK_EnablePanChange
 Should change pan from Midi Events or from SoundFont ?
Pan is disabled when Spatialization is activated. More...
 
bool MPTK_EnablePresetDrum
 Should accept change Preset for Drum canal 10 ?
Disabled by default. Could sometimes create bad sound with midi files not really compliant with the Midi norm. More...
 
bool MPTK_KillByExclusiveClass = true
 V2.83 Find the exclusive class of this voice. If set, kill all voices that match the exclusive class
and are younger than the first voice process created by this noteon event. More...
 
float MPTK_LeanSynthStarting = 0.05f
 V2.873 - A lean startup of the volume of the synth is useful to avoid weird sound at the beguining of the application (in some cases).
This parameter sets the speed of the increase of the volume of the audio source.
Set to 1 for an immediate full volume at start. More...
 
bool MPTK_LogWave
 Log for each wave to be played More...
 
bool MPTK_ReleaseSameNote = true
 V2.83. If the same note is hit twice on the same channel, then the older voice process is advanced to the release stage.
It's the default Midi processing. More...
 
uint MPTK_ReleaseTimeMin = 500000
 [Only when CorePlayer=False] Define a minimum release time at noteoff in 100 iem nanoseconds.
Default 50 ms is a good tradeoff. Below some unpleasant sound could be heard. Useless when MPTK_CorePlayer is true. More...
 
float MPTK_ReleaseTimeMod = 1f
 When a note is stopped with a noteoff or when the duration is over, note continue to play for a short time depending the instrument.

This parameter is a multiplier to increase or decrease the default release time defined in the SoundFont for each instrument.
Recommended values between 0.1 and 10. Default is 1 (no modification of the release time).
Performance issue: the longer it lasts the more CPU is used after the noteon. With a long release time, a lot of samples will be played simultaneously. More...
 
float MPTK_SFChorusAmplify
 [MPTK PRO] - Chorus level is defined in the SoundFont in the range [0, 1].
This parameter is added to the the default SoundFont value.
Range must be [-1, 1] More...
 
float MPTK_SFFilterFreqOffset = 0f
 [MPTK PRO] - Frequency cutoff is defined in the SoundFont for each notes.
This parameter increase or decrease the default SoundFont value. Range: -2000 to 3000 More...
 
float MPTK_SFReverbAmplify
 [MPTK PRO] - Reverberation level is defined in the SoundFont in the range [0, 1].
This parameter is added to the the default SoundFont value.
Range must be [-1, 1] More...
 
bool MPTK_SpatialSynthEnabled
 In spatialization mode not all MidiSynths are enabled. More...
 
int MPTK_StatVoiceCountActive
 Count of the active voices (playing) - Readonly More...
 
int MPTK_StatVoiceCountFree
 Count of the free voices for reusing on need.
Voice older than AutoCleanVoiceTime are removed but only when count is over than AutoCleanVoiceLimit - Readonly More...
 
int MPTK_StatVoicePlayed
 Count of voice played since the start of the synth More...
 
float MPTK_StatVoiceRatioReused
 Percentage of voice reused during the synth life. 0: any reuse, 100:all voice reused (unattainable, of course!) More...
 
bool MPTK_WeakDevice
 Should play on a weak device (cheaper smartphone) ? Apply only with AudioSource mode (MPTK_CorePlayer=False).
Playing Midi files with WeakDevice activated could cause some bad interpretation of Midi Event, consequently bad sound. More...
 
EventSynthClass OnEventSynthAwake
 Unity event fired at awake of the synthesizer. Name of the gameobject component is passed as a parameter.
Seting this callback function by script (AddListener) is not recommended. It's better to set callback function from the inspector. More...
 
EventSynthClass OnEventSynthStarted
 Unity event fired at start of the synthesizer. Name of the gameobject component is passed as a parameter.
Seting this callback function by script (AddListener) is not recommended. It's better to set callback function from the inspector. More...
 
bool playOnlyFirstWave
 Preset are often composed with 2 or more samples. Classically for left and right channel. Check this to play only the first sample found More...
 

Static Public Attributes

static List< MidiFilePlayerSpatialSynths
 Contains each MidiSynth for each channel or track when the prefab MidiSpatializer is used and IsMidiChannelSpace=true.
Warning: only one MidiSpatializer can be used in a hierarchy. More...
 

Properties

bool MPTK_ApplyUnityChorus [get, set]
 [MPTK PRO] - Apply Chorus Unity effect to the AudioSource. The effect is applied to all voices. More...
 
bool MPTK_ApplyUnityReverb [get, set]
 [MPTK PRO] - Apply Reverb Unity effect to the AudioSource. The effect is applied to all voices. More...
 
float MPTK_ChorusDelay [get, set]
 [MPTK PRO] - Chorus delay in ms.
Range from 0.1 to 100. Default = 40 ms. More...
 
float MPTK_ChorusDepth [get, set]
 [MPTK PRO] - Chorus modulation depth.
Range from 0 to 1. Default = 0.03. More...
 
float MPTK_ChorusDryMix [get, set]
 [MPTK PRO] - Volume of original signal to pass to output.
Range from 0 to 1. Default = 0.5. More...
 
float MPTK_ChorusRate [get, set]
 [MPTK PRO] - Chorus modulation rate in hz.
Range from 0 to 20. Default = 0.8 hz. More...
 
float MPTK_ChorusWetMix1 [get, set]
 [MPTK PRO] - Volume of 1st chorus tap.
Range from 0 to 1. Default = 0.5. More...
 
float MPTK_ChorusWetMix2 [get, set]
 [MPTK PRO] - Volume of 2nd chorus tap. This tap is 90 degrees out of phase of the first tap.
Range from 0 to 1. Default = 0.5. More...
 
float MPTK_ChorusWetMix3 [get, set]
 [MPTK PRO] - Volume of 3rd chorus tap. This tap is 90 degrees out of phase of the second tap.
Range from 0 to 1. Default = 0.5. More...
 
int MPTK_IndexSynthBuffSize [get, set]
 Set or Get sample rate output of the synth. -1:default, 0:24000, 1:36000, 2:48000, 3:60000, 4:72000, 5:84000, 6:96000.
It's better to stop playing before changing on fly to avoid bad noise. More...
 
int MPTK_IndexSynthRate [get, set]
 Set or Get sample rate output of the synth. -1:default, 0:24000, 1:36000, 2:48000, 3:60000, 4:72000, 5:84000, 6:96000.
It's better to stop playing before changing on fly to avoid bad noise. More...
 
string? MPTK_InstrumentPlayed [get]
 If spatialization is track mode, contains the last instrument played on this track More...
 
bool MPTK_IsSpatialSynthMaster [get]
 Trus if this MidiSynth is the master synth responsible to read midi events and to dispatch to other MidiSynths More...
 
float MPTK_MaxDistance [get, set]
 If MPTK_Spatialize is enabled, the volume of the audio source depends on the distance between the audio source and the listener.
Beyong this distance, the volume is set to 0 and the midi player is paused. No effect if MPTK_Spatialize is disabled. More...
 
bool MPTK_PauseOnDistance [get, set]
 [obsolete] replaced by MPTK_Spatialize"); V2.83 More...
 
float MPTK_ReverbDecayHFRatio [get, set]
 [MPTK PRO] - Decay HF Ratio : High-frequency to low-frequency decay time ratio.
Ranges from 0.1 to 2.0. More...
 
float MPTK_ReverbDecayTime [get, set]
 [MPTK PRO] - Reverberation decay time at low-frequencies in seconds.
Ranges from 0.1 to 20. Default is 1. More...
 
float MPTK_ReverbDelay [get, set]
 [MPTK PRO] - Late reverberation delay time relative to first reflection in seconds.
Ranges from 0 to 0.1. Default is 0.04 More...
 
float MPTK_ReverbDensity [get, set]
 [MPTK PRO] - Reverberation density (modal density) in percent.
Ranges from 0 to 1. More...
 
float MPTK_ReverbDiffusion [get, set]
 [MPTK PRO] - Reverberation diffusion (echo density) in percent.
Ranges from 0 to 1. Default is 1. More...
 
float MPTK_ReverbDryLevel [get, set]
 [MPTK PRO] - Mix level of dry signal in output.
Ranges from 0 to 1. More...
 
float MPTK_ReverbHFReference [get, set]
 [MPTK PRO] - Reference high frequency in Hz.
Ranges from 1000 to 20000. Default is 5000 More...
 
float MPTK_ReverbLevel [get, set]
 [MPTK PRO] - Late reverberation level relative to room effect.
Ranges from 0 to 1. More...
 
float MPTK_ReverbLFReference [get, set]
 [MPTK PRO] - Reference low-frequency in Hz.
Ranges from 20 to 1000. Default is 250 More...
 
float MPTK_ReverbReflectionDelay [get, set]
 [MPTK PRO] - Late reverberation level relative to room effect.
Ranges from -10000.0 to 2000.0. Default is 0.0. More...
 
float MPTK_ReverbReflectionLevel [get, set]
 [MPTK PRO] - Early reflections level relative to room effect.
Ranges from 0 to 1. More...
 
float MPTK_ReverbRoom [get, set]
 [MPTK PRO] - Room effect level at low frequencies.
Ranges from 0 to 1. More...
 
float MPTK_ReverbRoomHF [get, set]
 [MPTK PRO] - Room effect high-frequency level.
Ranges from 0 to 1. More...
 
float MPTK_ReverbRoomLF [get, set]
 [MPTK PRO] - Room effect low-frequency level.
Ranges from 0 to 1. More...
 
float MPTK_SFChorusDepth [get, set]
 [MPTK PRO] - Set the SoundFont chorus effect depth
Chorus depth [0, 256]
V2.88.2 More...
 
float MPTK_SFChorusLevel [get, set]
 [MPTK PRO] - Set the SoundFont chorus effect level [0, 10]
V2.88.2 - becomes a parameter and default value set to 0.9 (was 2f, thank John) More...
 
float MPTK_SFChorusSpeed [get, set]
 [MPTK PRO] - Set the SoundFont chorus effect speed
Chorus speed in Hz [0.1, 5]
V2.88.2 More...
 
float MPTK_SFChorusWidth [get, set]
 [MPTK PRO] - Set the SoundFont chorus effect width
The chorus unit process a monophonic input signal and produces stereo output controlled by WIDTH macro.
Width allows to get a gradually stereo effect from minimum (monophonic) to maximum stereo effect. [0, 10]
V2.88.2 More...
 
float MPTK_SFFilterQModOffset [get, set]
 [MPTK PRO] - Quality Factor is defined in the SoundFont for each notes.
This parameter increase or decrease the default SoundFont value. Range: -96 to 96. More...
 
float MPTK_SFReverbDamp [get, set]
 [MPTK PRO] - Set the SoundFont reverb effect damp [0,1].
Controls the reverb time frequency dependency. This controls the reverb time for the frequency sample rate/2
When 0, the reverb time for high frequencies is the same as for DC frequency.
When > 0, high frequencies have less reverb time than lower frequencies.
V2.88.2
More...
 
float MPTK_SFReverbLevel [get, set]
 [MPTK PRO] - Set the SoundFont reverb effect level
V2.88.2 More...
 
float MPTK_SFReverbRoomSize [get, set]
 [MPTK PRO] - Set the SoundFont reverb effect room size. Controls concave reverb time between 0 (0.7 s) and 1 (12.5 s)
V2.88.2
More...
 
float MPTK_SFReverbWidth [get, set]
 [MPTK PRO] - Set the SoundFont reverb effect width [0,100].
Controls the left/right output separation.
When 0, there are no separation and the signal on left and right output is the same.This sounds like a monophonic signal.
When 100, the separation between left and right is maximum.
V2.88.2
More...
 
bool MPTK_Spatialize [get, set]
 Should the Spatialization effect must be enabled?
See here how to setup spatialization with Unity https://paxstellar.fr/midi-file-player-detailed-view-2/#Foldout-Spatialization-Parameters More...
 
int MPTK_SpatialSynthIndex [get]
 Index of the MidiSynth for the dedicated Channel or Track when the prefab MidiSpatializer is used.
The MidiSynth reader (from a midi file) has no channel because no voice is played, so DedicatedChannel is set to -1 More...
 
int MPTK_SynthRate [get, set]
 Current synth rate defined. More...
 
int MPTK_TransExcludedChannel [get, set]
 V2.88.3 Transpose will apply to all channels except this one. Set to -1 to apply to all channel.
Default is 9 because generally we don't want to transpose drum channel. More...
 
int MPTK_Transpose [get, set]
 Transpose note from -24 to 24 More...
 
float MPTK_Volume [get, set]
 Volume of midi playing.
Must be >=0 and <= 1 More...
 

Events

OnAudioFrameStartHandler OnAudioFrameStart
 [MPTK PRO] - this event is triggered at each start of a new audio frame from the audio engine.
The parameter (double) is the current synth time in milliseconds. See example of use.
The callbach function will not run on the Unity thread, so you can't call Unity API except Debug.Log. More...
 

Detailed Description

Contains all the functions to build a wave table synth: load SoundFont and samples, process midi event, play voices, controllers, generators ...
This class is inherited by others class to build these prefabs: MidiStreamPlayer, MidiFilePlayer, MidiInReader.
It is not recommended to instanciate directly this class, rather add prefabs to the hierarchy of your scene.

[MPTK PRO] - class extention pro

Member Function Documentation

◆ MPTK_Channel()

string MidiPlayerTK.MidiSynth.MPTK_Channel ( int  channel)

Build an info string about the channel. Moreover a good pretext to display an example of Channel API.

Parameters
channel
Returns
GUILayout.BeginHorizontal();
GUILayout.Label("Channel Preset Preset/Bank/Forced Count Enabled Volume", myStyle.TitleLabel3);
GUILayout.EndHorizontal();
for (int channel = 0; channel < midiFilePlayer.MPTK_ChannelCount(); channel++)
{
GUILayout.BeginHorizontal();
// Display channel number
GUILayout.Label($" {channel:00}", myStyle.TitleLabel3, GUILayout.Width(60));
// Display preset
GUILayout.Label(midiFilePlayer.MPTK_ChannelPresetGetName(channel) ?? "not set", myStyle.TitleLabel3, GUILayout.MaxWidth(150));
// Display preset and bank index
int presetForced = midiFilePlayer.MPTK_ChannelForcedPresetGet(channel);
if (presetForced == -1)
// Preset not forced, get the preset defined on this channel by the Midi
presetForced = midiFilePlayer.MPTK_ChannelPresetGetIndex(channel);
int bankIndex = midiFilePlayer.MPTK_ChannelBankGetIndex(channel);
GUILayout.Label($"{presetForced} / {bankIndex}", myStyle.LabelRight/*, GUILayout.Width(80)*/);
// Slider to change the preset on this channel
int selectPreset = (int)GUILayout.HorizontalSlider(midiFilePlayer.MPTK_ChannelForcedPresetGet(channel),
-1f, 127f, myStyle.SliderBar, myStyle.SliderThumb, GUILayout.MaxWidth(50));
if (selectPreset != midiFilePlayer.MPTK_ChannelForcedPresetGet(channel))
{
midiFilePlayer.MPTK_ChannelForcedPresetSet(channel, selectPreset);
}
// Display count note by channel
GUILayout.Label($"{midiFilePlayer.MPTK_ChannelNoteCount(channel),-5}", myStyle.LabelRight, GUILayout.Width(60));
// Toggle to enable or disable a channel
GUILayout.Label(" ", myStyle.TitleLabel3, GUILayout.Width(60));
bool state = GUILayout.Toggle(midiFilePlayer.MPTK_ChannelEnableGet(channel), "", GUILayout.MaxWidth(20));
if (state != midiFilePlayer.MPTK_ChannelEnableGet(channel))
{
midiFilePlayer.MPTK_ChannelEnableSet(channel, state);
Debug.LogFormat("Channel {0} state:{1}, preset:{2}", channel, state, midiFilePlayer.MPTK_ChannelPresetGetName(channel) ?? "not set"); /*2.84*/
}
// Slider to change volume
float currentVolume = midiFilePlayer.MPTK_ChannelVolumeGet(channel);
GUILayout.Label($"{Math.Round(currentVolume, 2)}", myStyle.LabelRight, GUILayout.Width(40));
float volume = GUILayout.HorizontalSlider(currentVolume, 0f, 1f, myStyle.SliderBar, myStyle.SliderThumb, GUILayout.MaxWidth(80));
if (volume != currentVolume)
{
midiFilePlayer.MPTK_ChannelVolumeSet(channel, volume);
}
GUILayout.EndHorizontal();
}

◆ MPTK_ChannelBankGetIndex()

int MidiPlayerTK.MidiSynth.MPTK_ChannelBankGetIndex ( int  channel)

Get channel bank.

Parameters
channelmust be between 0 and 15

◆ MPTK_ChannelCount()

int MidiPlayerTK.MidiSynth.MPTK_ChannelCount ( )

Get channel count. The midi norm is 16, but MPTK can manage up to 32 channels.

Parameters
channelmust be between 0 and 15
Returns
channel count

◆ MPTK_ChannelEnableGet()

bool MidiPlayerTK.MidiSynth.MPTK_ChannelEnableGet ( int  channel)

Is channel is enabled or disabled.

Parameters
channelchannel, must be between 0 and 15
Returns
true if channel is enabled

◆ MPTK_ChannelEnableSet()

void MidiPlayerTK.MidiSynth.MPTK_ChannelEnableSet ( int  channel,
bool  enable 
)

Enable or disable a channel.

Parameters
channelmust be between 0 and 15
enabletrue to enable

◆ MPTK_ChannelForcedPresetGet()

int MidiPlayerTK.MidiSynth.MPTK_ChannelForcedPresetGet ( int  channel)

Set forced preset on the channel. Midi will allways playing with this preset even if a Midi Preset Change message is received.
Set to -1 to disable this behavior.

Parameters
channel
Returns
preset index, -1 if not set
GUILayout.Label($"{midiFilePlayer.MPTK_ChannelForcedPresetGet(channel)}/{midiFilePlayer.MPTK_ChannelBankGetIndex(channel)}");
int forced =
(int)GUILayout.HorizontalSlider(
midiFilePlayer.MPTK_ChannelForcedPresetGet(channel),
-1f, 127f);
if (forced != midiFilePlayer.MPTK_ChannelForcedPresetGet(channel))
midiFilePlayer.MPTK_ChannelForcedPresetSet(channel, forcedPreset);

◆ MPTK_ChannelForcedPresetSet()

bool MidiPlayerTK.MidiSynth.MPTK_ChannelForcedPresetSet ( int  channel,
int  preset 
)

Set forced preset on the channel. Midi will allways playing with this preset even if a Midi Preset Change message is received.
Set to -1 to disable this behavior.

Parameters
channel0 to 15 channel
preset0 to 127 preset
Returns
GUILayout.Label($"{midiFilePlayer.MPTK_ChannelForcedPresetGet(channel)}/{midiFilePlayer.MPTK_ChannelBankGetIndex(channel)}");
int forced =
(int)GUILayout.HorizontalSlider(
midiFilePlayer.MPTK_ChannelForcedPresetGet(channel),
-1f, 127f);
if (forced != midiFilePlayer.MPTK_ChannelForcedPresetGet(channel))
midiFilePlayer.MPTK_ChannelForcedPresetSet(channel, forcedPreset);

◆ MPTK_ChannelNoteCount()

int MidiPlayerTK.MidiSynth.MPTK_ChannelNoteCount ( int  channel)

Get count of notes played since the start of the Midi.

Parameters
channelmust be between 0 and 15

◆ MPTK_ChannelPresetChange()

bool MidiPlayerTK.MidiSynth.MPTK_ChannelPresetChange ( int  channel,
int  preset,
int  newbank = -1 
)

Change the preset and bank for the channel.
When playing a Midi file, the preset is set by channel with the Midi message Patch Change.
The bank is changed with a ControlChange Midi message.
The new value of the bank is local for the channel, the preset list is not updated.
To change globally the bank, use instead the global methods: MidiPlayerGlobal.MPTK_SelectBankInstrument or MidiPlayerGlobal.MPTK_SelectBankDrum

Parameters
channel0 to 15. There is 16 channels available in the Midi norm.
presetThe count of presets is dependant of the soundfont selected
newbankoptionnal, use the default bank defined globally
Returns
true if preset change is done

◆ MPTK_ChannelPresetGetIndex()

int MidiPlayerTK.MidiSynth.MPTK_ChannelPresetGetIndex ( int  channel)

Get channel preset indx.

Parameters
channelmust be between 0 and 15

◆ MPTK_ChannelPresetGetName()

string MidiPlayerTK.MidiSynth.MPTK_ChannelPresetGetName ( int  channel)

Get channel current preset name.

Parameters
channelmust be between 0 and 15

◆ MPTK_ChannelVolumeGet()

float MidiPlayerTK.MidiSynth.MPTK_ChannelVolumeGet ( int  channel)

Get the volume of the channel

Parameters
channelmust be between 0 and 15
Returns
volume of the channel, between 0 and 1

◆ MPTK_ChannelVolumeSet()

void MidiPlayerTK.MidiSynth.MPTK_ChannelVolumeSet ( int  channel,
float  volume 
)

Set the volume for a channel as a percentage.

Parameters
channelmust be between 0 and 15 or -1 to apply to all channel
volumepercentage of volume from the global volume for the channel, must be between 0 and 1

◆ MPTK_ChorusSetDefault()

void MidiPlayerTK.MidiSynth.MPTK_ChorusSetDefault ( )

[MPTK PRO] - Set Chorus Unity default value as defined with Unity.

◆ MPTK_ClearAllSound()

void MidiPlayerTK.MidiSynth.MPTK_ClearAllSound ( bool  destroyAudioSource = false,
int  _idSession = -1 
)

Clear all sound by sending note off.
That could take some seconds because release time for sample need to be played.

if (GUILayout.Button("Clear"))
midiStreamPlayer.MPTK_ClearAllSound(true);
Parameters
destroyAudioSourceusefull only in non core mode
_idSessionclear only for sample playing with this session, -1 for all (default)

◆ MPTK_InitSynth()

void MidiPlayerTK.MidiSynth.MPTK_InitSynth ( int  channelCount = 16)

Initialize the synthetizer: channel, voices, modulator.
It's not usefull to call this method if you are using prefabs (MidiFilePlayer, MidiStreamPlayer, ...).
Each gameObjects created from these prefabs have their own, autonomous and isolated synth.

Parameters
channelCountNumber of channel to create, default 16. Any other values are experimental!

◆ MPTK_ResetStat()

void MidiPlayerTK.MidiSynth.MPTK_ResetStat ( )

Reset voices statistics

◆ MPTK_ReverbSetDefault()

void MidiPlayerTK.MidiSynth.MPTK_ReverbSetDefault ( )

[MPTK PRO] - Set Reverb Unity default value as defined with Unity.

◆ MPTK_SFChorusSetDefault()

void MidiPlayerTK.MidiSynth.MPTK_SFChorusSetDefault ( )

[MPTK PRO] - Set Chrous SoundFont default value as defined in fluidsynth.
FLUID_CHORUS_DEFAULT_N 3
FLUID_CHORUS_DEFAULT_LEVEL 2.0 but set to 0.9 (thank John)
FLUID_CHORUS_DEFAULT_SPEED 0.3
FLUID_CHORUS_DEFAULT_DEPTH 8.0
FLUID_CHORUS_DEFAULT_TYPE FLUID_CHORUS_MOD_SINE
WIDTH 10

◆ MPTK_SFFilterSetDefault()

void MidiPlayerTK.MidiSynth.MPTK_SFFilterSetDefault ( )

[MPTK PRO] - Set Filter SoundFont default value as defined in fluidsynth.

◆ MPTK_SFReverbSetDefault()

void MidiPlayerTK.MidiSynth.MPTK_SFReverbSetDefault ( )

[MPTK PRO] - Set Reverb SoundFont default value as defined in fluidsynth.
FLUID_REVERB_DEFAULT_ROOMSIZE 0.2f
FLUID_REVERB_DEFAULT_DAMP 0.0f
FLUID_REVERB_DEFAULT_WIDTH 0.5f
FLUID_REVERB_DEFAULT_LEVEL 0.9f

Default chorus voice count

◆ MPTK_StartSequencerMidi()

void MidiPlayerTK.MidiSynth.MPTK_StartSequencerMidi ( )

Start the Midi sequencer: each midi events are read and play in a dedicated thread.
This thread is automatically started by prefabs MidiFilePlayer, MidiListPlayer, MidiExternalPlayer.

◆ MPTK_StopSynth()

void MidiPlayerTK.MidiSynth.MPTK_StopSynth ( )

Stop processing samples by the synth and the Midi sequencer.

◆ MPTK_WaitAllNotesOff()

IEnumerator MidiPlayerTK.MidiSynth.MPTK_WaitAllNotesOff ( int  _idSession = -1)

Wait until all notes are off.
That could take some seconds due to the samples release time.
Therefore, the method exit after a timeout of 3 seconds.
*** Use this method only as a coroutine ***

// Call this method with: StartCoroutine(NextPreviousWithWait(false));
// See TestMidiFilePlayerScripting.cs
public IEnumerator NextPreviousWithWait(bool next)
{
midiFilePlayer.MPTK_Stop();
yield return midiFilePlayer.MPTK_WaitAllNotesOff(midiFilePlayer.IdSession);
if (next)
midiFilePlayer.MPTK_Next();
else
midiFilePlayer.MPTK_Previous();
CurrentIndexPlaying = midiFilePlayer.MPTK_MidiIndex;
yield return 0;
}
Parameters
_idSessionclear only for samples playing with this session, -1 for all
Returns

◆ OnAudioFrameStartHandler()

delegate void MidiPlayerTK.MidiSynth.OnAudioFrameStartHandler ( double  synthTime)

Delegate for the event OnAudioFrameStartHandler. see OnAudioFrameStart

Parameters
synthTime

Member Data Documentation

◆ MPTK_ApplyModLfo

bool MidiPlayerTK.MidiSynth.MPTK_ApplyModLfo

Apply LFO effect defined in the SoundFont

◆ MPTK_ApplyRealTimeModulator

bool MidiPlayerTK.MidiSynth.MPTK_ApplyRealTimeModulator

Apply real time modulatoreffect defined in the SoundFont: pitch bend, control change, enveloppe modulation

◆ MPTK_ApplySFChorus

bool MidiPlayerTK.MidiSynth.MPTK_ApplySFChorus

[MPTK PRO] - Apply chorus effect as defined in the SoundFont.
This effect is processed with the fluidsynth algo independently on each voices but with a small decrease of performace (10%).

◆ MPTK_ApplySFFilter

bool MidiPlayerTK.MidiSynth.MPTK_ApplySFFilter

[MPTK PRO] - Apply frequency low-pass filter as defined in the SoundFont.
This effect is processed with the fluidsynth algo independently on each voices but with a small decrease of performace (40%).

◆ MPTK_ApplySFReverb

bool MidiPlayerTK.MidiSynth.MPTK_ApplySFReverb

[MPTK PRO] - Apply reverberation effect as defined in the SoundFont.
This effect is processed with the fluidsynth algo independently on each voices but with a small decrease of performace (40%).

◆ MPTK_ApplyVibLfo

bool MidiPlayerTK.MidiSynth.MPTK_ApplyVibLfo

Apply vibrato effect defined in the SoundFont

◆ MPTK_AutoBuffer

bool MidiPlayerTK.MidiSynth.MPTK_AutoBuffer = true

Voice buffering is important to get better performance. But you can disable this fonction with this parameter.

◆ MPTK_AutoCleanVoiceLimit

int MidiPlayerTK.MidiSynth.MPTK_AutoCleanVoiceLimit

Free voices older than MPTK_AutoCleanVoiceLimit are removed when count is over than MPTK_AutoCleanVoiceTime

◆ MPTK_CorePlayer

bool MidiPlayerTK.MidiSynth.MPTK_CorePlayer

If true then Midi events are read and play from a dedicated thread.
If false, MidiSynth will use AudioSource gameobjects to play sound.
This properties must be defined before running the application from the inspector.
The default is true.
Warning: The non core mode player (MPTK_CorePlayer=false) will be removed with the next major version (V3)

◆ MPTK_CutOffVolume

float MidiPlayerTK.MidiSynth.MPTK_CutOffVolume = 0.05f

When amplitude is below this value the playing of sample is stopped (voice_off).
Can be increase for better performance but with degraded quality because sample could be stopped earlier. Remember: Amplitude can varying between 0 and 1.

◆ MPTK_DirectSendToPlayer

bool MidiPlayerTK.MidiSynth.MPTK_DirectSendToPlayer

If true (default) then Midi events are sent automatically to the midi player.
Set to false if you want to process events without playing sound.
OnEventNotesMidi Unity Event can be used to process each notes.

◆ MPTK_EnableChangeTempo

bool MidiPlayerTK.MidiSynth.MPTK_EnableChangeTempo

Should accept change tempo from Midi Events ?

◆ MPTK_EnableFreeSynthRate

bool MidiPlayerTK.MidiSynth.MPTK_EnableFreeSynthRate = false

Allow direct setting of the Synth Rate

◆ MPTK_EnablePanChange

bool MidiPlayerTK.MidiSynth.MPTK_EnablePanChange

Should change pan from Midi Events or from SoundFont ?
Pan is disabled when Spatialization is activated.

◆ MPTK_EnablePresetDrum

bool MidiPlayerTK.MidiSynth.MPTK_EnablePresetDrum

Should accept change Preset for Drum canal 10 ?
Disabled by default. Could sometimes create bad sound with midi files not really compliant with the Midi norm.

◆ MPTK_KillByExclusiveClass

bool MidiPlayerTK.MidiSynth.MPTK_KillByExclusiveClass = true

V2.83 Find the exclusive class of this voice. If set, kill all voices that match the exclusive class
and are younger than the first voice process created by this noteon event.

◆ MPTK_LeanSynthStarting

float MidiPlayerTK.MidiSynth.MPTK_LeanSynthStarting = 0.05f

V2.873 - A lean startup of the volume of the synth is useful to avoid weird sound at the beguining of the application (in some cases).
This parameter sets the speed of the increase of the volume of the audio source.
Set to 1 for an immediate full volume at start.

◆ MPTK_LogWave

bool MidiPlayerTK.MidiSynth.MPTK_LogWave

Log for each wave to be played

◆ MPTK_ReleaseSameNote

bool MidiPlayerTK.MidiSynth.MPTK_ReleaseSameNote = true

V2.83. If the same note is hit twice on the same channel, then the older voice process is advanced to the release stage.
It's the default Midi processing.

◆ MPTK_ReleaseTimeMin

uint MidiPlayerTK.MidiSynth.MPTK_ReleaseTimeMin = 500000

[Only when CorePlayer=False] Define a minimum release time at noteoff in 100 iem nanoseconds.
Default 50 ms is a good tradeoff. Below some unpleasant sound could be heard. Useless when MPTK_CorePlayer is true.

◆ MPTK_ReleaseTimeMod

float MidiPlayerTK.MidiSynth.MPTK_ReleaseTimeMod = 1f

When a note is stopped with a noteoff or when the duration is over, note continue to play for a short time depending the instrument.

This parameter is a multiplier to increase or decrease the default release time defined in the SoundFont for each instrument.
Recommended values between 0.1 and 10. Default is 1 (no modification of the release time).
Performance issue: the longer it lasts the more CPU is used after the noteon. With a long release time, a lot of samples will be played simultaneously.

◆ MPTK_SFChorusAmplify

float MidiPlayerTK.MidiSynth.MPTK_SFChorusAmplify

[MPTK PRO] - Chorus level is defined in the SoundFont in the range [0, 1].
This parameter is added to the the default SoundFont value.
Range must be [-1, 1]

◆ MPTK_SFFilterFreqOffset

float MidiPlayerTK.MidiSynth.MPTK_SFFilterFreqOffset = 0f

[MPTK PRO] - Frequency cutoff is defined in the SoundFont for each notes.
This parameter increase or decrease the default SoundFont value. Range: -2000 to 3000

◆ MPTK_SFReverbAmplify

float MidiPlayerTK.MidiSynth.MPTK_SFReverbAmplify

[MPTK PRO] - Reverberation level is defined in the SoundFont in the range [0, 1].
This parameter is added to the the default SoundFont value.
Range must be [-1, 1]

◆ MPTK_SpatialSynthEnabled

bool MidiPlayerTK.MidiSynth.MPTK_SpatialSynthEnabled

In spatialization mode not all MidiSynths are enabled.

◆ MPTK_StatVoiceCountActive

int MidiPlayerTK.MidiSynth.MPTK_StatVoiceCountActive

Count of the active voices (playing) - Readonly

◆ MPTK_StatVoiceCountFree

int MidiPlayerTK.MidiSynth.MPTK_StatVoiceCountFree

Count of the free voices for reusing on need.
Voice older than AutoCleanVoiceTime are removed but only when count is over than AutoCleanVoiceLimit - Readonly

◆ MPTK_StatVoicePlayed

int MidiPlayerTK.MidiSynth.MPTK_StatVoicePlayed

Count of voice played since the start of the synth

◆ MPTK_StatVoiceRatioReused

float MidiPlayerTK.MidiSynth.MPTK_StatVoiceRatioReused

Percentage of voice reused during the synth life. 0: any reuse, 100:all voice reused (unattainable, of course!)

◆ MPTK_WeakDevice

bool MidiPlayerTK.MidiSynth.MPTK_WeakDevice

Should play on a weak device (cheaper smartphone) ? Apply only with AudioSource mode (MPTK_CorePlayer=False).
Playing Midi files with WeakDevice activated could cause some bad interpretation of Midi Event, consequently bad sound.

◆ OnEventSynthAwake

EventSynthClass MidiPlayerTK.MidiSynth.OnEventSynthAwake

Unity event fired at awake of the synthesizer. Name of the gameobject component is passed as a parameter.
Seting this callback function by script (AddListener) is not recommended. It's better to set callback function from the inspector.

Example of script (but it's recommended to set callback function from the inspector).

...
if (!midiStreamPlayer.OnEventSynthAwake.HasEvent())
midiStreamPlayer.OnEventSynthAwake.AddListener(StartLoadingSynth);
...
public void StartLoadingSynth(string name)
{
Debug.LogFormat("Synth {0} loading", name);
}

◆ OnEventSynthStarted

EventSynthClass MidiPlayerTK.MidiSynth.OnEventSynthStarted

Unity event fired at start of the synthesizer. Name of the gameobject component is passed as a parameter.
Seting this callback function by script (AddListener) is not recommended. It's better to set callback function from the inspector.

Example of script (but it's recommended to set callback function from the inspector).

...
if (!midiStreamPlayer.OnEventStartSynth.HasEvent())
midiStreamPlayer.OnEventStartSynth.AddListener(EndLoadingSynth);
...
public void EndLoadingSynth(string name)
{
Debug.LogFormat("Synth {0} loaded", name);
midiStreamPlayer.MPTK_PlayEvent(
new MPTKEvent() { Command = MPTKCommand.PatchChange, Value = CurrentPatchInstrument, Channel = StreamChannel});
}
MPTKCommand
MIDI command codes. Defined the action to be done with the message: note on/off, change instrument,...
Definition: MPTKEvent.cs:15

◆ playOnlyFirstWave

bool MidiPlayerTK.MidiSynth.playOnlyFirstWave

Preset are often composed with 2 or more samples. Classically for left and right channel. Check this to play only the first sample found


◆ SpatialSynths

List<MidiFilePlayer> MidiPlayerTK.MidiSynth.SpatialSynths
static

Contains each MidiSynth for each channel or track when the prefab MidiSpatializer is used and IsMidiChannelSpace=true.
Warning: only one MidiSpatializer can be used in a hierarchy.

Property Documentation

◆ MPTK_ApplyUnityChorus

bool MidiPlayerTK.MidiSynth.MPTK_ApplyUnityChorus
getset

[MPTK PRO] - Apply Chorus Unity effect to the AudioSource. The effect is applied to all voices.

◆ MPTK_ApplyUnityReverb

bool MidiPlayerTK.MidiSynth.MPTK_ApplyUnityReverb
getset

[MPTK PRO] - Apply Reverb Unity effect to the AudioSource. The effect is applied to all voices.

◆ MPTK_ChorusDelay

float MidiPlayerTK.MidiSynth.MPTK_ChorusDelay
getset

[MPTK PRO] - Chorus delay in ms.
Range from 0.1 to 100. Default = 40 ms.

◆ MPTK_ChorusDepth

float MidiPlayerTK.MidiSynth.MPTK_ChorusDepth
getset

[MPTK PRO] - Chorus modulation depth.
Range from 0 to 1. Default = 0.03.

◆ MPTK_ChorusDryMix

float MidiPlayerTK.MidiSynth.MPTK_ChorusDryMix
getset

[MPTK PRO] - Volume of original signal to pass to output.
Range from 0 to 1. Default = 0.5.

◆ MPTK_ChorusRate

float MidiPlayerTK.MidiSynth.MPTK_ChorusRate
getset

[MPTK PRO] - Chorus modulation rate in hz.
Range from 0 to 20. Default = 0.8 hz.

◆ MPTK_ChorusWetMix1

float MidiPlayerTK.MidiSynth.MPTK_ChorusWetMix1
getset

[MPTK PRO] - Volume of 1st chorus tap.
Range from 0 to 1. Default = 0.5.

◆ MPTK_ChorusWetMix2

float MidiPlayerTK.MidiSynth.MPTK_ChorusWetMix2
getset

[MPTK PRO] - Volume of 2nd chorus tap. This tap is 90 degrees out of phase of the first tap.
Range from 0 to 1. Default = 0.5.

◆ MPTK_ChorusWetMix3

float MidiPlayerTK.MidiSynth.MPTK_ChorusWetMix3
getset

[MPTK PRO] - Volume of 3rd chorus tap. This tap is 90 degrees out of phase of the second tap.
Range from 0 to 1. Default = 0.5.

◆ MPTK_IndexSynthBuffSize

int MidiPlayerTK.MidiSynth.MPTK_IndexSynthBuffSize
getset

Set or Get sample rate output of the synth. -1:default, 0:24000, 1:36000, 2:48000, 3:60000, 4:72000, 5:84000, 6:96000.
It's better to stop playing before changing on fly to avoid bad noise.

◆ MPTK_IndexSynthRate

int MidiPlayerTK.MidiSynth.MPTK_IndexSynthRate
getset

Set or Get sample rate output of the synth. -1:default, 0:24000, 1:36000, 2:48000, 3:60000, 4:72000, 5:84000, 6:96000.
It's better to stop playing before changing on fly to avoid bad noise.

◆ MPTK_InstrumentPlayed

string? MidiPlayerTK.MidiSynth.MPTK_InstrumentPlayed
get

If spatialization is track mode, contains the last instrument played on this track

◆ MPTK_IsSpatialSynthMaster

bool MidiPlayerTK.MidiSynth.MPTK_IsSpatialSynthMaster
get

Trus if this MidiSynth is the master synth responsible to read midi events and to dispatch to other MidiSynths

◆ MPTK_MaxDistance

float MidiPlayerTK.MidiSynth.MPTK_MaxDistance
getset

If MPTK_Spatialize is enabled, the volume of the audio source depends on the distance between the audio source and the listener.
Beyong this distance, the volume is set to 0 and the midi player is paused. No effect if MPTK_Spatialize is disabled.

◆ MPTK_PauseOnDistance

bool MidiPlayerTK.MidiSynth.MPTK_PauseOnDistance
getset

[obsolete] replaced by MPTK_Spatialize"); V2.83

◆ MPTK_ReverbDecayHFRatio

float MidiPlayerTK.MidiSynth.MPTK_ReverbDecayHFRatio
getset

[MPTK PRO] - Decay HF Ratio : High-frequency to low-frequency decay time ratio.
Ranges from 0.1 to 2.0.

◆ MPTK_ReverbDecayTime

float MidiPlayerTK.MidiSynth.MPTK_ReverbDecayTime
getset

[MPTK PRO] - Reverberation decay time at low-frequencies in seconds.
Ranges from 0.1 to 20. Default is 1.

◆ MPTK_ReverbDelay

float MidiPlayerTK.MidiSynth.MPTK_ReverbDelay
getset

[MPTK PRO] - Late reverberation delay time relative to first reflection in seconds.
Ranges from 0 to 0.1. Default is 0.04

◆ MPTK_ReverbDensity

float MidiPlayerTK.MidiSynth.MPTK_ReverbDensity
getset

[MPTK PRO] - Reverberation density (modal density) in percent.
Ranges from 0 to 1.

◆ MPTK_ReverbDiffusion

float MidiPlayerTK.MidiSynth.MPTK_ReverbDiffusion
getset

[MPTK PRO] - Reverberation diffusion (echo density) in percent.
Ranges from 0 to 1. Default is 1.

◆ MPTK_ReverbDryLevel

float MidiPlayerTK.MidiSynth.MPTK_ReverbDryLevel
getset

[MPTK PRO] - Mix level of dry signal in output.
Ranges from 0 to 1.

◆ MPTK_ReverbHFReference

float MidiPlayerTK.MidiSynth.MPTK_ReverbHFReference
getset

[MPTK PRO] - Reference high frequency in Hz.
Ranges from 1000 to 20000. Default is 5000

◆ MPTK_ReverbLevel

float MidiPlayerTK.MidiSynth.MPTK_ReverbLevel
getset

[MPTK PRO] - Late reverberation level relative to room effect.
Ranges from 0 to 1.

◆ MPTK_ReverbLFReference

float MidiPlayerTK.MidiSynth.MPTK_ReverbLFReference
getset

[MPTK PRO] - Reference low-frequency in Hz.
Ranges from 20 to 1000. Default is 250

◆ MPTK_ReverbReflectionDelay

float MidiPlayerTK.MidiSynth.MPTK_ReverbReflectionDelay
getset

[MPTK PRO] - Late reverberation level relative to room effect.
Ranges from -10000.0 to 2000.0. Default is 0.0.

◆ MPTK_ReverbReflectionLevel

float MidiPlayerTK.MidiSynth.MPTK_ReverbReflectionLevel
getset

[MPTK PRO] - Early reflections level relative to room effect.
Ranges from 0 to 1.

◆ MPTK_ReverbRoom

float MidiPlayerTK.MidiSynth.MPTK_ReverbRoom
getset

[MPTK PRO] - Room effect level at low frequencies.
Ranges from 0 to 1.

◆ MPTK_ReverbRoomHF

float MidiPlayerTK.MidiSynth.MPTK_ReverbRoomHF
getset

[MPTK PRO] - Room effect high-frequency level.
Ranges from 0 to 1.

◆ MPTK_ReverbRoomLF

float MidiPlayerTK.MidiSynth.MPTK_ReverbRoomLF
getset

[MPTK PRO] - Room effect low-frequency level.
Ranges from 0 to 1.

◆ MPTK_SFChorusDepth

float MidiPlayerTK.MidiSynth.MPTK_SFChorusDepth
getset

[MPTK PRO] - Set the SoundFont chorus effect depth
Chorus depth [0, 256]
V2.88.2

◆ MPTK_SFChorusLevel

float MidiPlayerTK.MidiSynth.MPTK_SFChorusLevel
getset

[MPTK PRO] - Set the SoundFont chorus effect level [0, 10]
V2.88.2 - becomes a parameter and default value set to 0.9 (was 2f, thank John)

◆ MPTK_SFChorusSpeed

float MidiPlayerTK.MidiSynth.MPTK_SFChorusSpeed
getset

[MPTK PRO] - Set the SoundFont chorus effect speed
Chorus speed in Hz [0.1, 5]
V2.88.2

◆ MPTK_SFChorusWidth

float MidiPlayerTK.MidiSynth.MPTK_SFChorusWidth
getset

[MPTK PRO] - Set the SoundFont chorus effect width
The chorus unit process a monophonic input signal and produces stereo output controlled by WIDTH macro.
Width allows to get a gradually stereo effect from minimum (monophonic) to maximum stereo effect. [0, 10]
V2.88.2

◆ MPTK_SFFilterQModOffset

float MidiPlayerTK.MidiSynth.MPTK_SFFilterQModOffset
getset

[MPTK PRO] - Quality Factor is defined in the SoundFont for each notes.
This parameter increase or decrease the default SoundFont value. Range: -96 to 96.

◆ MPTK_SFReverbDamp

float MidiPlayerTK.MidiSynth.MPTK_SFReverbDamp
getset

[MPTK PRO] - Set the SoundFont reverb effect damp [0,1].
Controls the reverb time frequency dependency. This controls the reverb time for the frequency sample rate/2
When 0, the reverb time for high frequencies is the same as for DC frequency.
When > 0, high frequencies have less reverb time than lower frequencies.
V2.88.2

◆ MPTK_SFReverbLevel

float MidiPlayerTK.MidiSynth.MPTK_SFReverbLevel
getset

[MPTK PRO] - Set the SoundFont reverb effect level
V2.88.2

◆ MPTK_SFReverbRoomSize

float MidiPlayerTK.MidiSynth.MPTK_SFReverbRoomSize
getset

[MPTK PRO] - Set the SoundFont reverb effect room size. Controls concave reverb time between 0 (0.7 s) and 1 (12.5 s)
V2.88.2

◆ MPTK_SFReverbWidth

float MidiPlayerTK.MidiSynth.MPTK_SFReverbWidth
getset

[MPTK PRO] - Set the SoundFont reverb effect width [0,100].
Controls the left/right output separation.
When 0, there are no separation and the signal on left and right output is the same.This sounds like a monophonic signal.
When 100, the separation between left and right is maximum.
V2.88.2

◆ MPTK_Spatialize

bool MidiPlayerTK.MidiSynth.MPTK_Spatialize
getset

Should the Spatialization effect must be enabled?
See here how to setup spatialization with Unity https://paxstellar.fr/midi-file-player-detailed-view-2/#Foldout-Spatialization-Parameters

◆ MPTK_SpatialSynthIndex

int MidiPlayerTK.MidiSynth.MPTK_SpatialSynthIndex
get

Index of the MidiSynth for the dedicated Channel or Track when the prefab MidiSpatializer is used.
The MidiSynth reader (from a midi file) has no channel because no voice is played, so DedicatedChannel is set to -1

◆ MPTK_SynthRate

int MidiPlayerTK.MidiSynth.MPTK_SynthRate
getset

Current synth rate defined.

◆ MPTK_TransExcludedChannel

int MidiPlayerTK.MidiSynth.MPTK_TransExcludedChannel
getset

V2.88.3 Transpose will apply to all channels except this one. Set to -1 to apply to all channel.
Default is 9 because generally we don't want to transpose drum channel.

◆ MPTK_Transpose

int MidiPlayerTK.MidiSynth.MPTK_Transpose
getset

Transpose note from -24 to 24

◆ MPTK_Volume

float MidiPlayerTK.MidiSynth.MPTK_Volume
getset

Volume of midi playing.
Must be >=0 and <= 1

Event Documentation

◆ OnAudioFrameStart

OnAudioFrameStartHandler MidiPlayerTK.MidiSynth.OnAudioFrameStart

[MPTK PRO] - this event is triggered at each start of a new audio frame from the audio engine.
The parameter (double) is the current synth time in milliseconds. See example of use.
The callbach function will not run on the Unity thread, so you can't call Unity API except Debug.Log.

// See Assets\MidiPlayer\Demo\ProDemos\Script\EuclideSeq\TestEuclideanRhythme.cs for the full code.
public void Play()
{
if (IsPlaying)
midiStream.OnAudioFrameStart += PlayHits;
else
midiStream.OnAudioFrameStart -= PlayHits;
}
private void PlayHits(double synthTimeMS)
{
if (lastSynthTime <= 0d)
// First call, init the last time
lastSynthTime = synthTimeMS;
// Calculate time in millisecond since the last loop
double deltaTime = synthTimeMS - lastSynthTime;
lastSynthTime = synthTimeMS;
timeMidiFromStartPlay += deltaTime;
// Calculate time since last beat played
timeSinceLastBeat += deltaTime;
// Slider SldTempo in BPM.
// 60 BPM means 60 beats in each minute, 1 beat per second, 1000 ms between beat.
// 120 BPM would be twice as fast: 120 beats in each minute, 2 per second, 500 ms between beat.
// Calculate the delay between two quarter notes in millisecond
CurrentTempo = (60d / SldTempo.Value) * 1000d;
// Is it time to play a hit ?
if (IsPlaying && timeSinceLastBeat > CurrentTempo)
{
timeSinceLastBeat = 0d;
CurrentBeat++;
}
}