mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2025-05-07 22:21:07 +00:00
Merge branch 'master' into sm24
This commit is contained in:
commit
a82ddb8d08
10 changed files with 121 additions and 28 deletions
|
@ -103,8 +103,8 @@ Changes in FluidSynth 2.0.0 concerning developers:
|
||||||
- use unique device names for the "audio.portaudio.device" setting
|
- use unique device names for the "audio.portaudio.device" setting
|
||||||
- rename fluid_mod_new() and fluid_mod_delete() to match naming conventions: new_fluid_mod() and delete_fluid_mod()
|
- rename fluid_mod_new() and fluid_mod_delete() to match naming conventions: new_fluid_mod() and delete_fluid_mod()
|
||||||
<br /><br />
|
<br /><br />
|
||||||
- add "synth.volenv" a setting for volume envelope processing
|
- add <a href="fluidsettings.xml#synth.volenv">"synth.volenv"</a> a setting for volume envelope processing
|
||||||
- add "midi.autoconnect" a setting for automatically connecting fluidsynth to available MIDI input ports
|
- add <a href="fluidsettings.xml#midi.autoconnect">"midi.autoconnect"</a> a setting for automatically connecting fluidsynth to available MIDI input ports
|
||||||
- add support for polyphonic key pressure events, see fluid_event_key_pressure() and fluid_synth_key_pressure()
|
- add support for polyphonic key pressure events, see fluid_event_key_pressure() and fluid_synth_key_pressure()
|
||||||
- add fluid_synth_add_default_mod() and fluid_synth_remove_default_mod() for manipulating default modulators
|
- add fluid_synth_add_default_mod() and fluid_synth_remove_default_mod() for manipulating default modulators
|
||||||
- add individual reverb setters: fluid_synth_set_reverb_roomsize(), fluid_synth_set_reverb_damp(), fluid_synth_set_reverb_width(), fluid_synth_set_reverb_level()
|
- add individual reverb setters: fluid_synth_set_reverb_roomsize(), fluid_synth_set_reverb_damp(), fluid_synth_set_reverb_width(), fluid_synth_set_reverb_level()
|
||||||
|
@ -113,6 +113,7 @@ Changes in FluidSynth 2.0.0 concerning developers:
|
||||||
- add file callback struct to _fluid_sfloader_t and expose new_fluid_defsfloader() to enable soundfont loading from memory ( see fluid_sfload_mem.c )
|
- add file callback struct to _fluid_sfloader_t and expose new_fluid_defsfloader() to enable soundfont loading from memory ( see fluid_sfload_mem.c )
|
||||||
- add seek support to midi-player, see fluid_player_seek()
|
- add seek support to midi-player, see fluid_player_seek()
|
||||||
- expose functions to manipulate the ladspa effects unit (see ladspa.h)
|
- expose functions to manipulate the ladspa effects unit (see ladspa.h)
|
||||||
|
- add support for text and lyrics midi events, see fluid_midi_event_set_lyrics() and fluid_midi_event_set_text()
|
||||||
- add 24 bit sample support, see _fluid_sample_t::data24
|
- add 24 bit sample support, see _fluid_sample_t::data24
|
||||||
|
|
||||||
\section NewIn1_1_9 Whats new in 1.1.9?
|
\section NewIn1_1_9 Whats new in 1.1.9?
|
||||||
|
|
|
@ -54,7 +54,7 @@ enum fluid_seq_event_type {
|
||||||
FLUID_SEQ_REVERBSEND, /**< Reverb send set event */
|
FLUID_SEQ_REVERBSEND, /**< Reverb send set event */
|
||||||
FLUID_SEQ_CHORUSSEND, /**< Chorus send set event */
|
FLUID_SEQ_CHORUSSEND, /**< Chorus send set event */
|
||||||
FLUID_SEQ_TIMER, /**< Timer event (useful for giving a callback at a certain time) */
|
FLUID_SEQ_TIMER, /**< Timer event (useful for giving a callback at a certain time) */
|
||||||
FLUID_SEQ_ANYCONTROLCHANGE, /**< DOCME (used for remove_events only) */
|
FLUID_SEQ_ANYCONTROLCHANGE, /**< Any control change message (only internally used for remove_events) */
|
||||||
FLUID_SEQ_CHANNELPRESSURE, /**< Channel aftertouch event @since 1.1.0 */
|
FLUID_SEQ_CHANNELPRESSURE, /**< Channel aftertouch event @since 1.1.0 */
|
||||||
FLUID_SEQ_KEYPRESSURE, /**< Polyphonic aftertouch event @since 2.0.0 */
|
FLUID_SEQ_KEYPRESSURE, /**< Polyphonic aftertouch event @since 2.0.0 */
|
||||||
FLUID_SEQ_SYSTEMRESET, /**< System reset event @since 1.1.0 */
|
FLUID_SEQ_SYSTEMRESET, /**< System reset event @since 1.1.0 */
|
||||||
|
|
|
@ -51,6 +51,10 @@ FLUIDSYNTH_API int fluid_midi_event_get_pitch(fluid_midi_event_t* evt);
|
||||||
FLUIDSYNTH_API int fluid_midi_event_set_pitch(fluid_midi_event_t* evt, int val);
|
FLUIDSYNTH_API int fluid_midi_event_set_pitch(fluid_midi_event_t* evt, int val);
|
||||||
FLUIDSYNTH_API int fluid_midi_event_set_sysex(fluid_midi_event_t* evt, void *data,
|
FLUIDSYNTH_API int fluid_midi_event_set_sysex(fluid_midi_event_t* evt, void *data,
|
||||||
int size, int dynamic);
|
int size, int dynamic);
|
||||||
|
FLUIDSYNTH_API int fluid_midi_event_set_text(fluid_midi_event_t *evt,
|
||||||
|
void *data, int size, int dynamic);
|
||||||
|
FLUIDSYNTH_API int fluid_midi_event_set_lyrics(fluid_midi_event_t *evt,
|
||||||
|
void *data, int size, int dynamic);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MIDI router rule type.
|
* MIDI router rule type.
|
||||||
|
|
|
@ -190,9 +190,6 @@
|
||||||
/* Define to enable SIGFPE assertions */
|
/* Define to enable SIGFPE assertions */
|
||||||
#cmakedefine TRAP_ON_FPE @TRAP_ON_FPE@
|
#cmakedefine TRAP_ON_FPE @TRAP_ON_FPE@
|
||||||
|
|
||||||
/* Version number of package */
|
|
||||||
#cmakedefine VERSION @FLUIDSYNTH_VERSION@
|
|
||||||
|
|
||||||
/* Define to do all DSP in single floating point precision */
|
/* Define to do all DSP in single floating point precision */
|
||||||
#cmakedefine WITH_FLOAT @WITH_FLOAT@
|
#cmakedefine WITH_FLOAT @WITH_FLOAT@
|
||||||
|
|
||||||
|
|
|
@ -30,9 +30,6 @@
|
||||||
|
|
||||||
#if DART_SUPPORT
|
#if DART_SUPPORT
|
||||||
|
|
||||||
/* To avoid name conflict */
|
|
||||||
#undef VERSION
|
|
||||||
|
|
||||||
#define INCL_DOS
|
#define INCL_DOS
|
||||||
#include <os2.h>
|
#include <os2.h>
|
||||||
|
|
||||||
|
|
|
@ -48,6 +48,7 @@
|
||||||
void print_usage(void);
|
void print_usage(void);
|
||||||
void print_help(fluid_settings_t *settings);
|
void print_help(fluid_settings_t *settings);
|
||||||
void print_welcome(void);
|
void print_welcome(void);
|
||||||
|
void print_configure(void);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* the globals
|
* the globals
|
||||||
|
@ -504,7 +505,7 @@ int main(int argc, char** argv)
|
||||||
else fluid_settings_setstr(settings, "audio.file.type", optarg);
|
else fluid_settings_setstr(settings, "audio.file.type", optarg);
|
||||||
break;
|
break;
|
||||||
case 'V':
|
case 'V':
|
||||||
printf("FluidSynth %s\n", VERSION);
|
print_configure();
|
||||||
exit (0);
|
exit (0);
|
||||||
break;
|
break;
|
||||||
case 'v':
|
case 'v':
|
||||||
|
@ -810,6 +811,17 @@ print_welcome()
|
||||||
FLUIDSYNTH_VERSION);
|
FLUIDSYNTH_VERSION);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void print_configure()
|
||||||
|
{
|
||||||
|
puts("Sample type="
|
||||||
|
#ifdef WITH_FLOAT
|
||||||
|
"float"
|
||||||
|
#else
|
||||||
|
"double"
|
||||||
|
#endif
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* print_help
|
* print_help
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -32,6 +32,7 @@ static int fluid_midi_event_length(unsigned char event);
|
||||||
* Returns NULL if there was an error reading or allocating memory.
|
* Returns NULL if there was an error reading or allocating memory.
|
||||||
*/
|
*/
|
||||||
static char* fluid_file_read_full(fluid_file fp, size_t* length);
|
static char* fluid_file_read_full(fluid_file fp, size_t* length);
|
||||||
|
static void fluid_midi_event_set_sysex_LOCAL(fluid_midi_event_t *evt, int type, void *data, int size, int dynamic);
|
||||||
#define READ_FULL_INITIAL_BUFLEN 1024
|
#define READ_FULL_INITIAL_BUFLEN 1024
|
||||||
|
|
||||||
|
|
||||||
|
@ -576,6 +577,35 @@ fluid_midi_file_read_event(fluid_midi_file *mf, fluid_track_t *track)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIDI_LYRIC:
|
case MIDI_LYRIC:
|
||||||
|
case MIDI_TEXT:
|
||||||
|
{
|
||||||
|
void* tmp;
|
||||||
|
int size = mf->varlen+1;
|
||||||
|
|
||||||
|
/* NULL terminate strings for safety */
|
||||||
|
metadata[size-1] = '\0';
|
||||||
|
|
||||||
|
evt = new_fluid_midi_event();
|
||||||
|
if (evt == NULL) {
|
||||||
|
FLUID_LOG(FLUID_ERR, "Out of memory");
|
||||||
|
result = FLUID_FAILED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
evt->dtime = mf->dtime;
|
||||||
|
|
||||||
|
tmp = FLUID_MALLOC(size);
|
||||||
|
if (tmp == NULL)
|
||||||
|
{
|
||||||
|
FLUID_LOG(FLUID_PANIC, "Out of memory");
|
||||||
|
result = FLUID_FAILED;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
FLUID_MEMCPY(tmp, metadata, size);
|
||||||
|
|
||||||
|
fluid_midi_event_set_sysex_LOCAL(evt, type, tmp, size, TRUE);
|
||||||
|
fluid_track_add_event(track, evt);
|
||||||
|
mf->dtime = 0;
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MIDI_MARKER:
|
case MIDI_MARKER:
|
||||||
|
@ -808,9 +838,10 @@ delete_fluid_midi_event(fluid_midi_event_t *evt)
|
||||||
temp = evt->next;
|
temp = evt->next;
|
||||||
|
|
||||||
/* Dynamic SYSEX event? - free (param2 indicates if dynamic) */
|
/* Dynamic SYSEX event? - free (param2 indicates if dynamic) */
|
||||||
if (evt->type == MIDI_SYSEX && evt->paramptr && evt->param2)
|
if ((evt->type == MIDI_SYSEX || (evt-> type == MIDI_TEXT) || (evt->type == MIDI_LYRIC)) &&
|
||||||
|
evt->paramptr && evt->param2)
|
||||||
FLUID_FREE (evt->paramptr);
|
FLUID_FREE (evt->paramptr);
|
||||||
|
|
||||||
FLUID_FREE(evt);
|
FLUID_FREE(evt);
|
||||||
evt = temp;
|
evt = temp;
|
||||||
}
|
}
|
||||||
|
@ -1012,7 +1043,7 @@ fluid_midi_event_set_pitch(fluid_midi_event_t *evt, int val)
|
||||||
* Assign sysex data to a MIDI event structure.
|
* Assign sysex data to a MIDI event structure.
|
||||||
* @param evt MIDI event structure
|
* @param evt MIDI event structure
|
||||||
* @param data Pointer to SYSEX data
|
* @param data Pointer to SYSEX data
|
||||||
* @param size Size of SYSEX data
|
* @param size Size of SYSEX data in bytes
|
||||||
* @param dynamic TRUE if the SYSEX data has been dynamically allocated and
|
* @param dynamic TRUE if the SYSEX data has been dynamically allocated and
|
||||||
* should be freed when the event is freed (only applies if event gets destroyed
|
* should be freed when the event is freed (only applies if event gets destroyed
|
||||||
* with delete_fluid_midi_event())
|
* with delete_fluid_midi_event())
|
||||||
|
@ -1023,11 +1054,54 @@ fluid_midi_event_set_pitch(fluid_midi_event_t *evt, int val)
|
||||||
int
|
int
|
||||||
fluid_midi_event_set_sysex(fluid_midi_event_t *evt, void *data, int size, int dynamic)
|
fluid_midi_event_set_sysex(fluid_midi_event_t *evt, void *data, int size, int dynamic)
|
||||||
{
|
{
|
||||||
evt->type = MIDI_SYSEX;
|
fluid_midi_event_set_sysex_LOCAL(evt, MIDI_SYSEX, data, size, dynamic);
|
||||||
|
return FLUID_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign text data to a MIDI event structure.
|
||||||
|
* @param evt MIDI event structure
|
||||||
|
* @param data Pointer to text data
|
||||||
|
* @param size Size of text data in bytes
|
||||||
|
* @param dynamic TRUE if the data has been dynamically allocated and
|
||||||
|
* should be freed when the event is freed via delete_fluid_midi_event()
|
||||||
|
* @return Always returns #FLUID_OK
|
||||||
|
*
|
||||||
|
* @since 2.0.0
|
||||||
|
* @note Unlike the other event assignment functions, this one sets evt->type.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
fluid_midi_event_set_text(fluid_midi_event_t *evt, void *data, int size, int dynamic)
|
||||||
|
{
|
||||||
|
fluid_midi_event_set_sysex_LOCAL(evt, MIDI_TEXT, data, size, dynamic);
|
||||||
|
return FLUID_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Assign lyric data to a MIDI event structure.
|
||||||
|
* @param evt MIDI event structure
|
||||||
|
* @param data Pointer to lyric data
|
||||||
|
* @param size Size of lyric data in bytes
|
||||||
|
* @param dynamic TRUE if the data has been dynamically allocated and
|
||||||
|
* should be freed when the event is freed via delete_fluid_midi_event()
|
||||||
|
* @return Always returns #FLUID_OK
|
||||||
|
*
|
||||||
|
* @since 2.0.0
|
||||||
|
* @note Unlike the other event assignment functions, this one sets evt->type.
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
fluid_midi_event_set_lyrics(fluid_midi_event_t *evt, void *data, int size, int dynamic)
|
||||||
|
{
|
||||||
|
fluid_midi_event_set_sysex_LOCAL(evt, MIDI_LYRIC, data, size, dynamic);
|
||||||
|
return FLUID_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void fluid_midi_event_set_sysex_LOCAL(fluid_midi_event_t *evt, int type, void *data, int size, int dynamic)
|
||||||
|
{
|
||||||
|
evt->type = type;
|
||||||
evt->paramptr = data;
|
evt->paramptr = data;
|
||||||
evt->param1 = size;
|
evt->param1 = size;
|
||||||
evt->param2 = dynamic;
|
evt->param2 = dynamic;
|
||||||
return FLUID_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/******************************************************
|
/******************************************************
|
||||||
|
@ -1189,9 +1263,6 @@ fluid_track_send_events(fluid_track_t *track,
|
||||||
|
|
||||||
if (!player || event->type == MIDI_EOT) {
|
if (!player || event->type == MIDI_EOT) {
|
||||||
}
|
}
|
||||||
else if (event->type == MIDI_SET_TEMPO) {
|
|
||||||
fluid_player_set_midi_tempo(player, event->param1);
|
|
||||||
}
|
|
||||||
else if (seeking && (event->type == NOTE_ON || event->type == NOTE_OFF)) {
|
else if (seeking && (event->type == NOTE_ON || event->type == NOTE_OFF)) {
|
||||||
/* skip on/off messages */
|
/* skip on/off messages */
|
||||||
}
|
}
|
||||||
|
@ -1199,6 +1270,11 @@ fluid_track_send_events(fluid_track_t *track,
|
||||||
if (player->playback_callback)
|
if (player->playback_callback)
|
||||||
player->playback_callback(player->playback_userdata, event);
|
player->playback_callback(player->playback_userdata, event);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (event->type == MIDI_SET_TEMPO)
|
||||||
|
{
|
||||||
|
fluid_player_set_midi_tempo(player, event->param1);
|
||||||
|
}
|
||||||
|
|
||||||
fluid_track_next_event(track);
|
fluid_track_next_event(track);
|
||||||
|
|
||||||
|
@ -1245,7 +1321,6 @@ new_fluid_player(fluid_synth_t *synth)
|
||||||
player->cur_ticks = 0;
|
player->cur_ticks = 0;
|
||||||
player->seek_ticks = -1;
|
player->seek_ticks = -1;
|
||||||
fluid_player_set_playback_callback(player, fluid_synth_handle_midi_event, synth);
|
fluid_player_set_playback_callback(player, fluid_synth_handle_midi_event, synth);
|
||||||
|
|
||||||
player->use_system_timer = fluid_settings_str_equal(synth->settings,
|
player->use_system_timer = fluid_settings_str_equal(synth->settings,
|
||||||
"player.timing-source", "system");
|
"player.timing-source", "system");
|
||||||
|
|
||||||
|
@ -1478,6 +1553,7 @@ fluid_player_load(fluid_player_t *player, fluid_playlist_item *item)
|
||||||
if (buffer_owned) {
|
if (buffer_owned) {
|
||||||
FLUID_FREE(buffer);
|
FLUID_FREE(buffer);
|
||||||
}
|
}
|
||||||
|
|
||||||
return FLUID_OK;
|
return FLUID_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -155,6 +155,7 @@ enum midi_rpn_event {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum midi_meta_event {
|
enum midi_meta_event {
|
||||||
|
MIDI_TEXT = 0x01,
|
||||||
MIDI_COPYRIGHT = 0x02,
|
MIDI_COPYRIGHT = 0x02,
|
||||||
MIDI_TRACK_NAME = 0x03,
|
MIDI_TRACK_NAME = 0x03,
|
||||||
MIDI_INST_NAME = 0x04,
|
MIDI_INST_NAME = 0x04,
|
||||||
|
|
|
@ -117,7 +117,7 @@ fluid_event_set_dest(fluid_event_t* evt, fluid_seq_id_t dest)
|
||||||
/**
|
/**
|
||||||
* Set a sequencer event to be a timer event.
|
* Set a sequencer event to be a timer event.
|
||||||
* @param evt Sequencer event structure
|
* @param evt Sequencer event structure
|
||||||
* @param data DOCME
|
* @param data User supplied data pointer
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
fluid_event_timer(fluid_event_t* evt, void* data)
|
fluid_event_timer(fluid_event_t* evt, void* data)
|
||||||
|
@ -162,7 +162,7 @@ fluid_event_noteoff(fluid_event_t* evt, int channel, short key)
|
||||||
* @param channel MIDI channel number
|
* @param channel MIDI channel number
|
||||||
* @param key MIDI note number (0-127)
|
* @param key MIDI note number (0-127)
|
||||||
* @param vel MIDI velocity value (0-127)
|
* @param vel MIDI velocity value (0-127)
|
||||||
* @param duration Duration of note (DOCME units?)
|
* @param duration Duration of note in the time scale used by the sequencer (by default milliseconds)
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
fluid_event_note(fluid_event_t* evt, int channel, short key, short vel, unsigned int duration)
|
fluid_event_note(fluid_event_t* evt, int channel, short key, short vel, unsigned int duration)
|
||||||
|
@ -246,10 +246,9 @@ fluid_event_program_select(fluid_event_t* evt, int channel,
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set a sequencer event to be an any control change event.
|
* Set a sequencer event to be an any control change event (for internal use).
|
||||||
* @param evt Sequencer event structure
|
* @param evt Sequencer event structure
|
||||||
* @param channel MIDI channel number
|
* @param channel MIDI channel number
|
||||||
* DOCME
|
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
fluid_event_any_control_change(fluid_event_t* evt, int channel)
|
fluid_event_any_control_change(fluid_event_t* evt, int channel)
|
||||||
|
@ -278,7 +277,7 @@ fluid_event_pitch_bend(fluid_event_t* evt, int channel, int pitch)
|
||||||
* Set a sequencer event to be a pitch wheel sensitivity event.
|
* Set a sequencer event to be a pitch wheel sensitivity event.
|
||||||
* @param evt Sequencer event structure
|
* @param evt Sequencer event structure
|
||||||
* @param channel MIDI channel number
|
* @param channel MIDI channel number
|
||||||
* @param value MIDI pitch wheel sensitivity value (DOCME units?)
|
* @param value MIDI pitch wheel sensitivity value in semitones
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
fluid_event_pitch_wheelsens(fluid_event_t* evt, int channel, short value)
|
fluid_event_pitch_wheelsens(fluid_event_t* evt, int channel, short value)
|
||||||
|
@ -325,7 +324,7 @@ fluid_event_sustain(fluid_event_t* evt, int channel, short val)
|
||||||
* @param evt Sequencer event structure
|
* @param evt Sequencer event structure
|
||||||
* @param channel MIDI channel number
|
* @param channel MIDI channel number
|
||||||
* @param control MIDI control number (0-127)
|
* @param control MIDI control number (0-127)
|
||||||
* @param val MIDI control value (0-16383 DOCME is that true?)
|
* @param val MIDI control value (0-127)
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
fluid_event_control_change(fluid_event_t* evt, int channel, short control, short val)
|
fluid_event_control_change(fluid_event_t* evt, int channel, short control, short val)
|
||||||
|
@ -478,9 +477,10 @@ int fluid_event_get_type(fluid_event_t* evt)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
* @internal
|
||||||
* Get the time field from a sequencer event structure.
|
* Get the time field from a sequencer event structure.
|
||||||
* @param evt Sequencer event structure
|
* @param evt Sequencer event structure
|
||||||
* @return Time value (DOCME units?)
|
* @return Time value
|
||||||
*/
|
*/
|
||||||
unsigned int fluid_event_get_time(fluid_event_t* evt)
|
unsigned int fluid_event_get_time(fluid_event_t* evt)
|
||||||
{
|
{
|
||||||
|
@ -510,7 +510,7 @@ fluid_seq_id_t fluid_event_get_dest(fluid_event_t* evt)
|
||||||
/**
|
/**
|
||||||
* Get the MIDI channel field from a sequencer event structure.
|
* Get the MIDI channel field from a sequencer event structure.
|
||||||
* @param evt Sequencer event structure
|
* @param evt Sequencer event structure
|
||||||
* @return MIDI channel number (DOCME 0-15 or more?)
|
* @return MIDI zero-based channel number
|
||||||
*/
|
*/
|
||||||
int fluid_event_get_channel(fluid_event_t* evt)
|
int fluid_event_get_channel(fluid_event_t* evt)
|
||||||
{
|
{
|
||||||
|
@ -579,7 +579,7 @@ void* fluid_event_get_data(fluid_event_t* evt)
|
||||||
/**
|
/**
|
||||||
* Get the duration field from a sequencer event structure.
|
* Get the duration field from a sequencer event structure.
|
||||||
* @param evt Sequencer event structure
|
* @param evt Sequencer event structure
|
||||||
* @return Note duration value (DOCME units?)
|
* @return Note duration value in the time scale used by the sequencer (by default milliseconds)
|
||||||
*
|
*
|
||||||
* Used by the #FLUID_SEQ_NOTE event type.
|
* Used by the #FLUID_SEQ_NOTE event type.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -4970,6 +4970,11 @@ fluid_synth_handle_midi_event(void* data, fluid_midi_event_t* event)
|
||||||
return fluid_synth_system_reset(synth);
|
return fluid_synth_system_reset(synth);
|
||||||
case MIDI_SYSEX:
|
case MIDI_SYSEX:
|
||||||
return fluid_synth_sysex (synth, event->paramptr, event->param1, NULL, NULL, NULL, FALSE);
|
return fluid_synth_sysex (synth, event->paramptr, event->param1, NULL, NULL, NULL, FALSE);
|
||||||
|
|
||||||
|
case MIDI_TEXT:
|
||||||
|
case MIDI_LYRIC:
|
||||||
|
case MIDI_SET_TEMPO:
|
||||||
|
return FLUID_OK;
|
||||||
}
|
}
|
||||||
return FLUID_FAILED;
|
return FLUID_FAILED;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue