mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2024-12-11 21:31:18 +00:00
commit
a0ec2c5932
23 changed files with 43 additions and 43 deletions
2
.github/workflows/sonarcloud.yml
vendored
2
.github/workflows/sonarcloud.yml
vendored
|
@ -85,7 +85,7 @@ jobs:
|
||||||
ls -la ${{ github.workspace }}/build
|
ls -la ${{ github.workspace }}/build
|
||||||
ls -la ${{ github.workspace }}/build/coverage
|
ls -la ${{ github.workspace }}/build/coverage
|
||||||
|
|
||||||
# The offical sonarsource/sonarcloud-github-action@v1.5 action does not work properly.
|
# The official sonarsource/sonarcloud-github-action@v1.5 action does not work properly.
|
||||||
# It keeps complaining that the build-wrapper.json cannot be found.
|
# It keeps complaining that the build-wrapper.json cannot be found.
|
||||||
# Hence, use a third party action to download and add sonar-scanner to PATH and then run it manually.
|
# Hence, use a third party action to download and add sonar-scanner to PATH and then run it manually.
|
||||||
- name: Setup sonarqube
|
- name: Setup sonarqube
|
||||||
|
|
|
@ -283,7 +283,7 @@ if ( WIN32 )
|
||||||
set ( windows-version "0x0400" )
|
set ( windows-version "0x0400" )
|
||||||
endif()
|
endif()
|
||||||
endif ()
|
endif ()
|
||||||
message ( STATUS "Targetting Windows Version ${windows-version}" )
|
message ( STATUS "Targeting Windows Version ${windows-version}" )
|
||||||
add_definitions ( -D _WIN32_WINNT=${windows-version} )
|
add_definitions ( -D _WIN32_WINNT=${windows-version} )
|
||||||
add_definitions ( -D WINVER=${windows-version} )
|
add_definitions ( -D WINVER=${windows-version} )
|
||||||
list ( APPEND CMAKE_REQUIRED_DEFINITIONS "-DWINVER=${windows-version}" )
|
list ( APPEND CMAKE_REQUIRED_DEFINITIONS "-DWINVER=${windows-version}" )
|
||||||
|
|
|
@ -14,7 +14,7 @@ body
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Reduce width of main content for more readibility */
|
/* Reduce width of main content for more readability */
|
||||||
div.contents,
|
div.contents,
|
||||||
div.header
|
div.header
|
||||||
{
|
{
|
||||||
|
|
|
@ -21,7 +21,7 @@ int main()
|
||||||
// array of buffers used to setup channel mapping
|
// array of buffers used to setup channel mapping
|
||||||
float *dry[1 * 2], *fx[1 * 2];
|
float *dry[1 * 2], *fx[1 * 2];
|
||||||
|
|
||||||
// first make sure to zero out the sample buffers everytime before calling fluid_synth_process()
|
// first make sure to zero out the sample buffers every time before calling fluid_synth_process()
|
||||||
memset(left, 0, sizeof(left));
|
memset(left, 0, sizeof(left));
|
||||||
memset(right, 0, sizeof(right));
|
memset(right, 0, sizeof(right));
|
||||||
|
|
||||||
|
|
|
@ -32,7 +32,7 @@ The API contains the functions to query the type, the current value, the
|
||||||
default value, the range and the "hints" of a setting. The range is the minimum
|
default value, the range and the "hints" of a setting. The range is the minimum
|
||||||
and maximum value of the setting. The hints gives additional information about
|
and maximum value of the setting. The hints gives additional information about
|
||||||
a setting. For example, whether a string represents a filename. Or whether a
|
a setting. For example, whether a string represents a filename. Or whether a
|
||||||
number should be interpreted on on a logarithmic scale. Check the settings.h
|
number should be interpreted on a logarithmic scale. Check the settings.h
|
||||||
API documentation for a description of all functions.
|
API documentation for a description of all functions.
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -74,9 +74,9 @@ extern "C" {
|
||||||
* For further details please refer to fluid_synth_process().
|
* For further details please refer to fluid_synth_process().
|
||||||
*
|
*
|
||||||
* @parblock
|
* @parblock
|
||||||
* @note Whereas fluid_synth_process() allows aliasing buffers, there is the guarentee that @p out
|
* @note Whereas fluid_synth_process() allows aliasing buffers, there is the guarantee that @p out
|
||||||
* and @p fx buffers provided by fluidsynth's audio drivers never alias. This prevents downstream
|
* and @p fx buffers provided by fluidsynth's audio drivers never alias. This prevents downstream
|
||||||
* applications from e.g. applying a custom effect accidentially to the same buffer multiple times.
|
* applications from e.g. applying a custom effect accidentally to the same buffer multiple times.
|
||||||
* @endparblock
|
* @endparblock
|
||||||
*
|
*
|
||||||
* @parblock
|
* @parblock
|
||||||
|
|
|
@ -145,7 +145,7 @@ FLUIDSYNTH_API int fluid_midi_event_get_lyrics(fluid_midi_event_t *evt,
|
||||||
* @defgroup midi_router MIDI Router
|
* @defgroup midi_router MIDI Router
|
||||||
* @ingroup midi_input
|
* @ingroup midi_input
|
||||||
*
|
*
|
||||||
* Rule based tranformation and filtering of MIDI events.
|
* Rule based transformation and filtering of MIDI events.
|
||||||
*
|
*
|
||||||
* @{
|
* @{
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1137,7 +1137,7 @@ fluid_handle_reverbpreset(void *data, int ac, char **av, fluid_ostream_t out)
|
||||||
/*
|
/*
|
||||||
The function is useful for reverb and chorus commands which have
|
The function is useful for reverb and chorus commands which have
|
||||||
1 or 2 parameters.
|
1 or 2 parameters.
|
||||||
The function checks that there is 1 or 2 aguments.
|
The function checks that there is 1 or 2 arguments.
|
||||||
When there is 2 parameters it checks the first argument that must be
|
When there is 2 parameters it checks the first argument that must be
|
||||||
an fx group index in the range[0..synth->effects_groups-1].
|
an fx group index in the range[0..synth->effects_groups-1].
|
||||||
|
|
||||||
|
@ -1159,7 +1159,7 @@ static int check_fx_group_idx(int ac, char **av, fluid_ostream_t out,
|
||||||
return -2;
|
return -2;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* check optionnal first argument which is a fx group index */
|
/* check optional first argument which is a fx group index */
|
||||||
fx_group = -1;
|
fx_group = -1;
|
||||||
|
|
||||||
if(ac > 1)
|
if(ac > 1)
|
||||||
|
|
|
@ -73,7 +73,7 @@ static const IID _IID_IAudioRenderClient =
|
||||||
*
|
*
|
||||||
* Current limitations:
|
* Current limitations:
|
||||||
* - Only one stereo audio output.
|
* - Only one stereo audio output.
|
||||||
* - If audio.sample-format is "16bits", a convertion from float
|
* - If audio.sample-format is "16bits", a conversion from float
|
||||||
* without dithering is used.
|
* without dithering is used.
|
||||||
*
|
*
|
||||||
* Available settings:
|
* Available settings:
|
||||||
|
|
|
@ -344,7 +344,7 @@ new_fluid_waveout_audio_driver2(fluid_settings_t *settings, fluid_audio_func_t f
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocate the internal waveout buffers:
|
/* allocate the internal waveout buffers:
|
||||||
The length of a single buffer in bytes is dependant of period_size.
|
The length of a single buffer in bytes is dependent of period_size.
|
||||||
*/
|
*/
|
||||||
lenBuffer = wfx.Format.nBlockAlign * period_size;
|
lenBuffer = wfx.Format.nBlockAlign * period_size;
|
||||||
/* create and clear the driver data */
|
/* create and clear the driver data */
|
||||||
|
@ -394,7 +394,7 @@ new_fluid_waveout_audio_driver2(fluid_settings_t *settings, fluid_audio_func_t f
|
||||||
FLUID_MEMSET(dev->drybuf, 0, sizeof(float*) * audio_channels * 2);
|
FLUID_MEMSET(dev->drybuf, 0, sizeof(float*) * audio_channels * 2);
|
||||||
for(i = 0; i < audio_channels * 2; ++i)
|
for(i = 0; i < audio_channels * 2; ++i)
|
||||||
{
|
{
|
||||||
/* The length of a single buffer drybuf[i] is dependant of period_size */
|
/* The length of a single buffer drybuf[i] is dependent of period_size */
|
||||||
dev->drybuf[i] = FLUID_ARRAY(float, period_size);
|
dev->drybuf[i] = FLUID_ARRAY(float, period_size);
|
||||||
if(dev->drybuf[i] == NULL)
|
if(dev->drybuf[i] == NULL)
|
||||||
{
|
{
|
||||||
|
|
|
@ -29,11 +29,11 @@
|
||||||
* pointers to a queue and re-add them in a separate thread. Lame-o API! :(
|
* pointers to a queue and re-add them in a separate thread. Lame-o API! :(
|
||||||
*
|
*
|
||||||
* Multiple/single devices handling capabilities:
|
* Multiple/single devices handling capabilities:
|
||||||
* This driver is able to handle multiple devices chosen by the user trough
|
* This driver is able to handle multiple devices chosen by the user through
|
||||||
* the settings midi.winmidi.device.
|
* the settings midi.winmidi.device.
|
||||||
* For example, let the following device names:
|
* For example, let the following device names:
|
||||||
* 0:Port MIDI SB Live! [CE00], 1:SB PCI External MIDI, default, x[;y;z;..]
|
* 0:Port MIDI SB Live! [CE00], 1:SB PCI External MIDI, default, x[;y;z;..]
|
||||||
* Then the driver is able receive MIDI messages comming from distinct devices
|
* Then the driver is able receive MIDI messages coming from distinct devices
|
||||||
* and forward these messages on distinct MIDI channels set.
|
* and forward these messages on distinct MIDI channels set.
|
||||||
* 1.1)For example, if the user chooses 2 devices at index 0 and 1, the user
|
* 1.1)For example, if the user chooses 2 devices at index 0 and 1, the user
|
||||||
* must specify this by putting the name "0;1" in midi.winmidi.device setting.
|
* must specify this by putting the name "0;1" in midi.winmidi.device setting.
|
||||||
|
@ -95,8 +95,8 @@ struct fluid_winmidi_driver
|
||||||
HANDLE hThread;
|
HANDLE hThread;
|
||||||
DWORD dwThread;
|
DWORD dwThread;
|
||||||
|
|
||||||
/* devices informations table */
|
/* devices information table */
|
||||||
int dev_count; /* device informations count in dev_infos[] table */
|
int dev_count; /* device information count in dev_infos[] table */
|
||||||
device_infos_t dev_infos[1];
|
device_infos_t dev_infos[1];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -205,7 +205,7 @@ fluid_winmidi_callback(HMIDIIN hmi, UINT wMsg, DWORD_PTR dwInstance,
|
||||||
* build a device name prefixed by its index. The format of the returned
|
* build a device name prefixed by its index. The format of the returned
|
||||||
* name is: dev_idx:dev_name
|
* name is: dev_idx:dev_name
|
||||||
* The name returned is convenient for midi.winmidi.device setting.
|
* The name returned is convenient for midi.winmidi.device setting.
|
||||||
* It allows the user to identify a device index through its name or vise
|
* It allows the user to identify a device index through its name or vice
|
||||||
* versa. This allows the user to specify a multi device name using a list of
|
* versa. This allows the user to specify a multi device name using a list of
|
||||||
* devices index (see fluid_winmidi_midi_driver_settings()).
|
* devices index (see fluid_winmidi_midi_driver_settings()).
|
||||||
*
|
*
|
||||||
|
@ -350,7 +350,7 @@ fluid_winmidi_parse_device_name(fluid_winmidi_driver_t *dev, char *dev_name)
|
||||||
|
|
||||||
/* look for a multi device naming */
|
/* look for a multi device naming */
|
||||||
/* multi devices name "x;[y;..]". parse devices index: x;y;..
|
/* multi devices name "x;[y;..]". parse devices index: x;y;..
|
||||||
Each ascii index are separated by a semicolon caracter.
|
Each ascii index are separated by a semicolon character.
|
||||||
*/
|
*/
|
||||||
FLUID_STRCPY(cpy_dev_name, dev_name); /* fluid_strtok() will overwrite */
|
FLUID_STRCPY(cpy_dev_name, dev_name); /* fluid_strtok() will overwrite */
|
||||||
next_idx = cpy_dev_name;
|
next_idx = cpy_dev_name;
|
||||||
|
@ -496,7 +496,7 @@ new_fluid_winmidi_driver(fluid_settings_t *settings,
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* allocation of driver structure size dependant of max_devices */
|
/* allocation of driver structure size dependent of max_devices */
|
||||||
i = sizeof(fluid_winmidi_driver_t) + (max_devices - 1) * sizeof(device_infos_t);
|
i = sizeof(fluid_winmidi_driver_t) + (max_devices - 1) * sizeof(device_infos_t);
|
||||||
dev = FLUID_MALLOC(i);
|
dev = FLUID_MALLOC(i);
|
||||||
|
|
||||||
|
|
|
@ -2285,7 +2285,7 @@ int fluid_player_set_loop(fluid_player_t *player, int loop)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* update the MIDI player internal deltatime dependant of actual tempo.
|
* update the MIDI player internal deltatime dependent of actual tempo.
|
||||||
* @param player MIDI player instance
|
* @param player MIDI player instance
|
||||||
*/
|
*/
|
||||||
static void fluid_player_update_tempo(fluid_player_t *player)
|
static void fluid_player_update_tempo(fluid_player_t *player)
|
||||||
|
|
|
@ -200,7 +200,7 @@ enum midi_sysex_tuning_msg_id
|
||||||
MIDI_SYSEX_TUNING_BULK_DUMP = 0x01, /**< Bulk tuning dump response (non-realtime) */
|
MIDI_SYSEX_TUNING_BULK_DUMP = 0x01, /**< Bulk tuning dump response (non-realtime) */
|
||||||
MIDI_SYSEX_TUNING_NOTE_TUNE = 0x02, /**< Tuning note change message (realtime) */
|
MIDI_SYSEX_TUNING_NOTE_TUNE = 0x02, /**< Tuning note change message (realtime) */
|
||||||
MIDI_SYSEX_TUNING_BULK_DUMP_REQ_BANK = 0x03, /**< Bulk tuning dump request (with bank, non-realtime) */
|
MIDI_SYSEX_TUNING_BULK_DUMP_REQ_BANK = 0x03, /**< Bulk tuning dump request (with bank, non-realtime) */
|
||||||
MIDI_SYSEX_TUNING_BULK_DUMP_BANK = 0x04, /**< Bulk tuning dump resonse (with bank, non-realtime) */
|
MIDI_SYSEX_TUNING_BULK_DUMP_BANK = 0x04, /**< Bulk tuning dump response (with bank, non-realtime) */
|
||||||
MIDI_SYSEX_TUNING_OCTAVE_DUMP_1BYTE = 0x05, /**< Octave tuning dump using 1 byte values (non-realtime) */
|
MIDI_SYSEX_TUNING_OCTAVE_DUMP_1BYTE = 0x05, /**< Octave tuning dump using 1 byte values (non-realtime) */
|
||||||
MIDI_SYSEX_TUNING_OCTAVE_DUMP_2BYTE = 0x06, /**< Octave tuning dump using 2 byte values (non-realtime) */
|
MIDI_SYSEX_TUNING_OCTAVE_DUMP_2BYTE = 0x06, /**< Octave tuning dump using 2 byte values (non-realtime) */
|
||||||
MIDI_SYSEX_TUNING_NOTE_TUNE_BANK = 0x07, /**< Tuning note change message (with bank, realtime/non-realtime) */
|
MIDI_SYSEX_TUNING_NOTE_TUNE_BANK = 0x07, /**< Tuning note change message (with bank, realtime/non-realtime) */
|
||||||
|
@ -310,7 +310,7 @@ struct _fluid_player_t
|
||||||
0, the player is driven by external tempo (exttempo)
|
0, the player is driven by external tempo (exttempo)
|
||||||
*/
|
*/
|
||||||
int sync_mode;
|
int sync_mode;
|
||||||
/* miditempo: internal tempo comming from MIDI file tempo change events
|
/* miditempo: internal tempo coming from MIDI file tempo change events
|
||||||
(in micro seconds per quarter note)
|
(in micro seconds per quarter note)
|
||||||
*/
|
*/
|
||||||
int miditempo; /* as indicated by MIDI SetTempo: n 24th of a usec per midi-clock. bravo! */
|
int miditempo; /* as indicated by MIDI SetTempo: n 24th of a usec per midi-clock. bravo! */
|
||||||
|
|
|
@ -560,7 +560,7 @@ fluid_sequencer_get_tick(fluid_sequencer_t *seq)
|
||||||
* the events are adjusted accordingly.
|
* the events are adjusted accordingly.
|
||||||
*
|
*
|
||||||
* @note May only be called from a sequencer callback or initially when no event dispatching happens.
|
* @note May only be called from a sequencer callback or initially when no event dispatching happens.
|
||||||
* Otherwise it will mess up your event timing, because you have zero contol over which events are
|
* Otherwise it will mess up your event timing, because you have zero control over which events are
|
||||||
* affected by the scale change.
|
* affected by the scale change.
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
|
@ -624,7 +624,7 @@ fluid_sequencer_process(fluid_sequencer_t *seq, unsigned int msec)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
* only used privately by fluid_seqbind and only from sequencer callback, thus lock aquire is not needed.
|
* only used privately by fluid_seqbind and only from sequencer callback, thus lock acquire is not needed.
|
||||||
*/
|
*/
|
||||||
void fluid_sequencer_invalidate_note(fluid_sequencer_t *seq, fluid_seq_id_t dest, fluid_note_id_t id)
|
void fluid_sequencer_invalidate_note(fluid_sequencer_t *seq, fluid_seq_id_t dest, fluid_note_id_t id)
|
||||||
{
|
{
|
||||||
|
|
|
@ -84,7 +84,7 @@ static bool event_compare(const fluid_event_t& left, const fluid_event_t& right)
|
||||||
// | NOTEON | 0 | 0 | 0 | 0 | 1 | 0 |
|
// | NOTEON | 0 | 0 | 0 | 0 | 1 | 0 |
|
||||||
// | X | 0 | 0 | 0 | 0 | 1 | 1 |
|
// | X | 0 | 0 | 0 | 0 | 1 | 1 |
|
||||||
//
|
//
|
||||||
// The values in the diagonal (i.e. comparision with itself) must be true to make them become false after leaving this
|
// The values in the diagonal (i.e. comparison with itself) must be true to make them become false after leaving this
|
||||||
// function in order to satisfy the irreflexive requirement, i.e. assert(!(a < a))
|
// function in order to satisfy the irreflexive requirement, i.e. assert(!(a < a))
|
||||||
|
|
||||||
leftIsBeforeRight =
|
leftIsBeforeRight =
|
||||||
|
|
|
@ -110,8 +110,8 @@
|
||||||
|
|
||||||
/* SCALE_WET_WIDTH is a compensation weight factor to get an output
|
/* SCALE_WET_WIDTH is a compensation weight factor to get an output
|
||||||
amplitude (wet) rather independent of the width setting.
|
amplitude (wet) rather independent of the width setting.
|
||||||
0: the output amplitude is fully dependant on the width setting.
|
0: the output amplitude is fully dependent on the width setting.
|
||||||
>0: the output amplitude is less dependant on the width setting.
|
>0: the output amplitude is less dependent on the width setting.
|
||||||
With a SCALE_WET_WIDTH of 0.2 the output amplitude is rather
|
With a SCALE_WET_WIDTH of 0.2 the output amplitude is rather
|
||||||
independent of width setting (see fluid_chorus_set()).
|
independent of width setting (see fluid_chorus_set()).
|
||||||
*/
|
*/
|
||||||
|
@ -134,7 +134,7 @@
|
||||||
/* and max lfo speed (5 Hz) */
|
/* and max lfo speed (5 Hz) */
|
||||||
#define RANGE_MOD_RATE (HIGH_MOD_RATE - LOW_MOD_RATE)
|
#define RANGE_MOD_RATE (HIGH_MOD_RATE - LOW_MOD_RATE)
|
||||||
|
|
||||||
/* some chorus cpu_load measurement dependant of modulation rate: mod_rate
|
/* some chorus cpu_load measurement dependent of modulation rate: mod_rate
|
||||||
(number of chorus blocks: 2)
|
(number of chorus blocks: 2)
|
||||||
|
|
||||||
No stero unit:
|
No stero unit:
|
||||||
|
@ -560,7 +560,7 @@ static void update_parameters_from_sample_rate(fluid_chorus_t *chorus)
|
||||||
Modulated delay line initialization.
|
Modulated delay line initialization.
|
||||||
|
|
||||||
Sets the length line ( alloc delay samples).
|
Sets the length line ( alloc delay samples).
|
||||||
Remark: the function sets the internal size accordling to the length delay_length.
|
Remark: the function sets the internal size according to the length delay_length.
|
||||||
The size is augmented by INTERP_SAMPLES_NBR to take account of interpolation.
|
The size is augmented by INTERP_SAMPLES_NBR to take account of interpolation.
|
||||||
|
|
||||||
@param chorus, pointer on chorus unit.
|
@param chorus, pointer on chorus unit.
|
||||||
|
@ -783,7 +783,7 @@ fluid_chorus_set(fluid_chorus_t *chorus, int set, int nr, fluid_real_t level,
|
||||||
chorus->level = 0.1;
|
chorus->level = 0.1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* update parameters dependant of sample rate */
|
/* update parameters dependent of sample rate */
|
||||||
update_parameters_from_sample_rate(chorus);
|
update_parameters_from_sample_rate(chorus);
|
||||||
|
|
||||||
#ifdef DEBUG_PRINT
|
#ifdef DEBUG_PRINT
|
||||||
|
@ -915,7 +915,7 @@ fluid_chorus_samplerate_change(fluid_chorus_t *chorus, fluid_real_t sample_rate)
|
||||||
{
|
{
|
||||||
chorus->sample_rate = sample_rate;
|
chorus->sample_rate = sample_rate;
|
||||||
|
|
||||||
/* update parameters dependant of sample rate */
|
/* update parameters dependent of sample rate */
|
||||||
update_parameters_from_sample_rate(chorus);
|
update_parameters_from_sample_rate(chorus);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -210,8 +210,8 @@
|
||||||
-----------------------------------------------------------------------------*/
|
-----------------------------------------------------------------------------*/
|
||||||
/* SCALE_WET_WIDTH is a compensation weight factor to get an output
|
/* SCALE_WET_WIDTH is a compensation weight factor to get an output
|
||||||
amplitude (wet) rather independent of the width setting.
|
amplitude (wet) rather independent of the width setting.
|
||||||
0: the output amplitude is fully dependant on the width setting.
|
0: the output amplitude is fully dependent on the width setting.
|
||||||
>0: the output amplitude is less dependant on the width setting.
|
>0: the output amplitude is less dependent on the width setting.
|
||||||
With a SCALE_WET_WIDTH of 0.2 the output amplitude is rather
|
With a SCALE_WET_WIDTH of 0.2 the output amplitude is rather
|
||||||
independent of width setting (see fluid_revmodel_update()).
|
independent of width setting (see fluid_revmodel_update()).
|
||||||
*/
|
*/
|
||||||
|
@ -363,7 +363,7 @@ static void set_fdn_delay_lpf(fdn_delay_lpf *lpf,
|
||||||
/*-----------------------------------------------------------------------------
|
/*-----------------------------------------------------------------------------
|
||||||
Delay line :
|
Delay line :
|
||||||
The delay line is composed of the line plus an absorbent low pass filter
|
The delay line is composed of the line plus an absorbent low pass filter
|
||||||
to get frequency dependant reverb time.
|
to get frequency dependent reverb time.
|
||||||
-----------------------------------------------------------------------------*/
|
-----------------------------------------------------------------------------*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
@ -928,7 +928,7 @@ static void initialize_mod_delay_lines(fluid_late *late, fluid_real_t sample_rat
|
||||||
int i;
|
int i;
|
||||||
fluid_real_t mod_depth, length_factor;
|
fluid_real_t mod_depth, length_factor;
|
||||||
|
|
||||||
/* update delay line parameter dependant of sample rate */
|
/* update delay line parameter dependent of sample rate */
|
||||||
late->samplerate = sample_rate;
|
late->samplerate = sample_rate;
|
||||||
|
|
||||||
/* compute mod_depth, length factor */
|
/* compute mod_depth, length factor */
|
||||||
|
|
|
@ -79,7 +79,7 @@
|
||||||
Each MIDI channel have a legato detector.
|
Each MIDI channel have a legato detector.
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
Portamento is a feature independant of the legato detector. So
|
Portamento is a feature independent of the legato detector. So
|
||||||
portamento isn't part of the lagato detector. However portamento
|
portamento isn't part of the lagato detector. However portamento
|
||||||
(when enabled) is triggered at noteOn (like legato). Like in legato
|
(when enabled) is triggered at noteOn (like legato). Like in legato
|
||||||
situation it is usual to have a portamento from a note 'fromkey' to another
|
situation it is usual to have a portamento from a note 'fromkey' to another
|
||||||
|
|
|
@ -475,7 +475,7 @@ fluid_voice_calculate_gain_amplitude(const fluid_voice_t *voice, fluid_real_t ga
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Useful to return the nominal pitch of a key */
|
/* Useful to return the nominal pitch of a key */
|
||||||
/* The nominal pitch is dependant of voice->root_pitch,tuning, and
|
/* The nominal pitch is dependent of voice->root_pitch,tuning, and
|
||||||
GEN_SCALETUNE generator.
|
GEN_SCALETUNE generator.
|
||||||
This is useful to set the value of GEN_PITCH generator on noteOn.
|
This is useful to set the value of GEN_PITCH generator on noteOn.
|
||||||
This is useful to get the beginning/ending pitch for portamento.
|
This is useful to get the beginning/ending pitch for portamento.
|
||||||
|
|
|
@ -1210,7 +1210,7 @@ fluid_settings_str_equal(fluid_settings_t *settings, const char *name, const cha
|
||||||
* @param settings a settings object
|
* @param settings a settings object
|
||||||
* @param name a setting's name
|
* @param name a setting's name
|
||||||
* @param def the default string value of the setting if it exists
|
* @param def the default string value of the setting if it exists
|
||||||
* @return FLUID_OK if a default vaule exists, FLUID_FAILED otherwise
|
* @return FLUID_OK if a default value exists, FLUID_FAILED otherwise
|
||||||
*
|
*
|
||||||
* @note The returned string is not owned by the caller and should not be modified or freed.
|
* @note The returned string is not owned by the caller and should not be modified or freed.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -1760,7 +1760,7 @@ fluid_long_long_t fluid_file_tell(FILE* f)
|
||||||
#ifdef WIN32
|
#ifdef WIN32
|
||||||
// On Windows, long is only a 32 bit integer. Thus ftell() does not support to handle files >2GiB.
|
// On Windows, long is only a 32 bit integer. Thus ftell() does not support to handle files >2GiB.
|
||||||
// We should use _ftelli64() in this case, however its availability depends on MS CRT and might not be
|
// We should use _ftelli64() in this case, however its availability depends on MS CRT and might not be
|
||||||
// availble on WindowsXP, Win98, etc.
|
// available on WindowsXP, Win98, etc.
|
||||||
//
|
//
|
||||||
// The web recommends to fallback to _telli64() in this case. However, it's return value differs from
|
// The web recommends to fallback to _telli64() in this case. However, it's return value differs from
|
||||||
// _ftelli64() on Win10: https://github.com/FluidSynth/fluidsynth/pull/629#issuecomment-602238436
|
// _ftelli64() on Win10: https://github.com/FluidSynth/fluidsynth/pull/629#issuecomment-602238436
|
||||||
|
|
|
@ -29,14 +29,14 @@ int main(void)
|
||||||
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
||||||
TEST_ASSERT(fluid_samplecache_count_entries() == 1);
|
TEST_ASSERT(fluid_samplecache_count_entries() == 1);
|
||||||
|
|
||||||
/* Attempt to pin and unpin an exising preset should succeed (but have no effect) */
|
/* Attempt to pin and unpin an existing preset should succeed (but have no effect) */
|
||||||
TEST_ASSERT(fluid_synth_pin_preset(synth, id, 0, 42) == FLUID_OK);
|
TEST_ASSERT(fluid_synth_pin_preset(synth, id, 0, 42) == FLUID_OK);
|
||||||
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
||||||
|
|
||||||
TEST_ASSERT(fluid_synth_unpin_preset(synth, id, 0, 42) == FLUID_OK);
|
TEST_ASSERT(fluid_synth_unpin_preset(synth, id, 0, 42) == FLUID_OK);
|
||||||
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
||||||
|
|
||||||
/* Attempt to pin and unpin a non-existant preset should fail */
|
/* Attempt to pin and unpin a non-existent preset should fail */
|
||||||
TEST_ASSERT(fluid_synth_pin_preset(synth, id, 42, 42) == FLUID_FAILED);
|
TEST_ASSERT(fluid_synth_pin_preset(synth, id, 42, 42) == FLUID_FAILED);
|
||||||
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
TEST_ASSERT(count_loaded_samples(synth, id) == 123);
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ void callback_stable_sort(unsigned int time, fluid_event_t *event, fluid_sequenc
|
||||||
{
|
{
|
||||||
static const int expected_type_order[] =
|
static const int expected_type_order[] =
|
||||||
{ FLUID_SEQ_NOTEOFF, FLUID_SEQ_NOTEON, FLUID_SEQ_SYSTEMRESET, FLUID_SEQ_UNREGISTERING
|
{ FLUID_SEQ_NOTEOFF, FLUID_SEQ_NOTEON, FLUID_SEQ_SYSTEMRESET, FLUID_SEQ_UNREGISTERING
|
||||||
/* technically, FLUID_SEQ_NOTEOFF and FLUID_SEQ_NOTEON are to follow, but we've already unregisted */ };
|
/* technically, FLUID_SEQ_NOTEOFF and FLUID_SEQ_NOTEON are to follow, but we've already unregistered */ };
|
||||||
|
|
||||||
TEST_ASSERT(fluid_event_get_type(event) == expected_type_order[order++]);
|
TEST_ASSERT(fluid_event_get_type(event) == expected_type_order[order++]);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue