2018-06-14 07:40:17 +08:00
/* FluidSynth - A Software Synthesizer
*
* Copyright ( C ) 2003 Peter Hanappe and others .
*
* This library is free software ; you can redistribute it and / or
* modify it under the terms of the GNU Lesser General Public License
* as published by the Free Software Foundation ; either version 2.1 of
* the License , or ( at your option ) any later version .
*
* This library is distributed in the hope that it will be useful , but
* WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the GNU
* Lesser General Public License for more details .
2019-06-23 03:03:47 +08:00
*
2018-06-14 07:40:17 +08:00
* You should have received a copy of the GNU Lesser General Public
* License along with this library ; if not , write to the Free
* Software Foundation , Inc . , 51 Franklin Street , Fifth Floor , Boston , MA
* 02110 - 1301 , USA
*/
# ifndef _FLUIDSYNTH_EVENT_H
# define _FLUIDSYNTH_EVENT_H
# ifdef __cplusplus
extern " C " {
# endif
/**
* @ file event . h
* @ brief Sequencer event functions and defines .
*
* Functions and constants for creating / processing sequencer events .
*/
/**
* Sequencer event type enumeration .
*/
2019-06-23 03:03:47 +08:00
enum fluid_seq_event_type
{
FLUID_SEQ_NOTE = 0 , /**< Note event with duration */
FLUID_SEQ_NOTEON , /**< Note on event */
FLUID_SEQ_NOTEOFF , /**< Note off event */
FLUID_SEQ_ALLSOUNDSOFF , /**< All sounds off event */
FLUID_SEQ_ALLNOTESOFF , /**< All notes off event */
FLUID_SEQ_BANKSELECT , /**< Bank select message */
FLUID_SEQ_PROGRAMCHANGE , /**< Program change message */
FLUID_SEQ_PROGRAMSELECT , /**< Program select message */
FLUID_SEQ_PITCHBEND , /**< Pitch bend message */
FLUID_SEQ_PITCHWHEELSENS , /**< Pitch wheel sensitivity set message @since 1.1.0 was mispelled previously */
FLUID_SEQ_MODULATION , /**< Modulation controller event */
FLUID_SEQ_SUSTAIN , /**< Sustain controller event */
FLUID_SEQ_CONTROLCHANGE , /**< MIDI control change event */
FLUID_SEQ_PAN , /**< Stereo pan set event */
FLUID_SEQ_VOLUME , /**< Volume set event */
FLUID_SEQ_REVERBSEND , /**< Reverb 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_ANYCONTROLCHANGE , /**< Any control change message (only internally used for remove_events) */
FLUID_SEQ_CHANNELPRESSURE , /**< Channel aftertouch event @since 1.1.0 */
FLUID_SEQ_KEYPRESSURE , /**< Polyphonic aftertouch event @since 2.0.0 */
FLUID_SEQ_SYSTEMRESET , /**< System reset event @since 1.1.0 */
FLUID_SEQ_UNREGISTERING , /**< Called when a sequencer client is being unregistered. @since 1.1.0 */
2018-06-17 22:56:35 +08:00
# ifndef __DOXYGEN__
2019-06-23 03:03:47 +08:00
FLUID_SEQ_LASTEVENT /**< @internal Defines the count of events enums @warning This symbol is not part of the public API and ABI stability guarantee and may change at any time! */
2018-06-17 22:56:35 +08:00
# endif
2018-06-14 07:40:17 +08:00
} ;
/* Event alloc/free */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API fluid_event_t * new_fluid_event ( void ) ;
FLUIDSYNTH_API void delete_fluid_event ( fluid_event_t * evt ) ;
2018-06-14 07:40:17 +08:00
/* Initializing events */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_set_source ( fluid_event_t * evt , fluid_seq_id_t src ) ;
FLUIDSYNTH_API void fluid_event_set_dest ( fluid_event_t * evt , fluid_seq_id_t dest ) ;
2018-06-14 07:40:17 +08:00
/* Timer events */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_timer ( fluid_event_t * evt , void * data ) ;
2018-06-14 07:40:17 +08:00
/* Note events */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_note ( fluid_event_t * evt , int channel ,
short key , short vel ,
unsigned int duration ) ;
2018-06-14 07:40:17 +08:00
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_noteon ( fluid_event_t * evt , int channel , short key , short vel ) ;
FLUIDSYNTH_API void fluid_event_noteoff ( fluid_event_t * evt , int channel , short key ) ;
FLUIDSYNTH_API void fluid_event_all_sounds_off ( fluid_event_t * evt , int channel ) ;
FLUIDSYNTH_API void fluid_event_all_notes_off ( fluid_event_t * evt , int channel ) ;
2018-06-14 07:40:17 +08:00
/* Instrument selection */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_bank_select ( fluid_event_t * evt , int channel , short bank_num ) ;
FLUIDSYNTH_API void fluid_event_program_change ( fluid_event_t * evt , int channel , short preset_num ) ;
FLUIDSYNTH_API void fluid_event_program_select ( fluid_event_t * evt , int channel , unsigned int sfont_id , short bank_num , short preset_num ) ;
2018-06-14 07:40:17 +08:00
/* Real-time generic instrument controllers */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API
void fluid_event_control_change ( fluid_event_t * evt , int channel , short control , short val ) ;
2018-06-14 07:40:17 +08:00
/* Real-time instrument controllers shortcuts */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_pitch_bend ( fluid_event_t * evt , int channel , int val ) ;
FLUIDSYNTH_API void fluid_event_pitch_wheelsens ( fluid_event_t * evt , int channel , short val ) ;
FLUIDSYNTH_API void fluid_event_modulation ( fluid_event_t * evt , int channel , short val ) ;
FLUIDSYNTH_API void fluid_event_sustain ( fluid_event_t * evt , int channel , short val ) ;
FLUIDSYNTH_API void fluid_event_pan ( fluid_event_t * evt , int channel , short val ) ;
FLUIDSYNTH_API void fluid_event_volume ( fluid_event_t * evt , int channel , short val ) ;
FLUIDSYNTH_API void fluid_event_reverb_send ( fluid_event_t * evt , int channel , short val ) ;
FLUIDSYNTH_API void fluid_event_chorus_send ( fluid_event_t * evt , int channel , short val ) ;
2018-06-14 07:40:17 +08:00
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_key_pressure ( fluid_event_t * evt , int channel , short key , short val ) ;
FLUIDSYNTH_API void fluid_event_channel_pressure ( fluid_event_t * evt , int channel , short val ) ;
FLUIDSYNTH_API void fluid_event_system_reset ( fluid_event_t * evt ) ;
2018-06-14 07:40:17 +08:00
/* Only for removing events */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_any_control_change ( fluid_event_t * evt , int channel ) ;
2018-06-14 07:40:17 +08:00
/* Only when unregistering clients */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API void fluid_event_unregistering ( fluid_event_t * evt ) ;
2018-06-14 07:40:17 +08:00
/* Accessing event data */
2019-06-23 03:03:47 +08:00
FLUIDSYNTH_API int fluid_event_get_type ( fluid_event_t * evt ) ;
FLUIDSYNTH_API fluid_seq_id_t fluid_event_get_source ( fluid_event_t * evt ) ;
FLUIDSYNTH_API fluid_seq_id_t fluid_event_get_dest ( fluid_event_t * evt ) ;
FLUIDSYNTH_API int fluid_event_get_channel ( fluid_event_t * evt ) ;
FLUIDSYNTH_API short fluid_event_get_key ( fluid_event_t * evt ) ;
FLUIDSYNTH_API short fluid_event_get_velocity ( fluid_event_t * evt ) ;
FLUIDSYNTH_API short fluid_event_get_control ( fluid_event_t * evt ) ;
FLUIDSYNTH_API short fluid_event_get_value ( fluid_event_t * evt ) ;
FLUIDSYNTH_API short fluid_event_get_program ( fluid_event_t * evt ) ;
FLUIDSYNTH_API void * fluid_event_get_data ( fluid_event_t * evt ) ;
FLUIDSYNTH_API unsigned int fluid_event_get_duration ( fluid_event_t * evt ) ;
FLUIDSYNTH_API short fluid_event_get_bank ( fluid_event_t * evt ) ;
FLUIDSYNTH_API int fluid_event_get_pitch ( fluid_event_t * evt ) ;
FLUIDSYNTH_API unsigned int fluid_event_get_sfont_id ( fluid_event_t * evt ) ;
2018-06-14 07:40:17 +08:00
# ifdef __cplusplus
}
# endif
# endif /* _FLUIDSYNTH_EVENT_H */