2018-06-14 00:40:17 +01: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-22 20:03:47 +01:00
*
2018-06-14 00:40:17 +01: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-22 20:03:47 +01: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 15:56:35 +01:00
#ifndef __DOXYGEN__
2019-06-22 20:03:47 +01: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 15:56:35 +01:00
#endif
2018-06-14 00:40:17 +01:00
};
/* Event alloc/free */
2019-06-22 20:03:47 +01:00
FLUIDSYNTH_API fluid_event_t * new_fluid_event ( void );
FLUIDSYNTH_API void delete_fluid_event ( fluid_event_t * evt );
2018-06-14 00:40:17 +01:00
/* Initializing events */
2019-06-22 20:03:47 +01: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 00:40:17 +01:00
/* Timer events */
2019-06-22 20:03:47 +01:00
FLUIDSYNTH_API void fluid_event_timer ( fluid_event_t * evt , void * data );
2018-06-14 00:40:17 +01:00
/* Note events */
2019-06-22 20:03:47 +01:00
FLUIDSYNTH_API void fluid_event_note ( fluid_event_t * evt , int channel ,
short key , short vel ,
unsigned int duration );
2018-06-14 00:40:17 +01:00
2019-06-22 20:03:47 +01: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 00:40:17 +01:00
/* Instrument selection */
2019-06-22 20:03:47 +01: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 00:40:17 +01:00
/* Real-time generic instrument controllers */
2019-06-22 20:03:47 +01:00
FLUIDSYNTH_API
void fluid_event_control_change ( fluid_event_t * evt , int channel , short control , short val );
2018-06-14 00:40:17 +01:00
/* Real-time instrument controllers shortcuts */
2019-06-22 20:03:47 +01: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 00:40:17 +01:00
2019-06-22 20:03:47 +01: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 00:40:17 +01:00
/* Only for removing events */
2019-06-22 20:03:47 +01:00
FLUIDSYNTH_API void fluid_event_any_control_change ( fluid_event_t * evt , int channel );
2018-06-14 00:40:17 +01:00
/* Only when unregistering clients */
2019-06-22 20:03:47 +01:00
FLUIDSYNTH_API void fluid_event_unregistering ( fluid_event_t * evt );
2018-06-14 00:40:17 +01:00
/* Accessing event data */
2019-06-22 20:03:47 +01: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 00:40:17 +01:00
#ifdef __cplusplus
}
#endif
#endif /* _FLUIDSYNTH_EVENT_H */