7#define EDEBUG(...)     Ase::debug ("event", __VA_ARGS__) 
   12MidiEvent::MidiEvent (
const MidiEvent &other) :
 
   18MidiEvent::MidiEvent (MidiEventType etype)
 
   20  memset ((
void*) 
this, 0, 
sizeof (*
this));
 
   23  static_assert (
sizeof (MidiEvent) <= 2 * 
sizeof (
void*));
 
   27MidiEvent::operator= (
const MidiEvent &other)
 
   30    memcpy ((
void*) 
this, &other, 
sizeof (*
this));
 
   36MidiEvent::message ()
 const 
   38  if (type == MidiEvent::CONTROL_CHANGE)
 
   40      if (param >= 
uint (MidiMessage::ALL_SOUND_OFF) &&
 
   41          param <= 
uint (MidiMessage::POLY_MODE_ON))
 
 
   48MidiEvent::to_string ()
 const 
   50  const char *et = 
nullptr;
 
   55                            frame, channel, 
"PARAM_VALUE", param, pvalue);
 
   56    case NOTE_OFF:        
if (!et) et = 
"NOTE_OFF";
 
   58    case NOTE_ON:         
if (!et) et = 
"NOTE_ON";
 
   61      return string_format (
"%4u ch=%-2u %-10s pitch=%d vel=%f tune=%f id=%x",
 
   62                            frame, channel, et, key, velocity, tuning, noteid);
 
   64      return string_format (
"%4u ch=%-2u %s control=%d value=%f (%02x) {%u}",
 
   65                            frame, channel, et, param, value, cval, fragment);
 
   66    case PROGRAM_CHANGE:        
if (!et) et = 
"PROGRAM_CHANGE";
 
   68                            frame, channel, et, param);
 
   71    case PITCH_BEND:       
if (!et) et = 
"PITCH_BEND";
 
   73                            frame, channel, et, value);
 
   74    case SYSEX:                 
if (!et) et = 
"SYSEX";
 
   77  static_assert (
sizeof (MidiEvent) >= 2 * 
sizeof (uint64_t));
 
   79  return string_format (
"%4u MidiEvent-%u (%08x %08x)", frame, type, uu[0], uu[1]);
 
   83make_note_on (uint16 chnl, uint8 mkey, 
float velo, 
float tune, uint nid)
 
   85  MidiEvent ev (velo > 0 ? MidiEvent::NOTE_ON : MidiEvent::
NOTE_OFF);
 
   95make_note_off (uint16 chnl, uint8 mkey, 
float velo, 
float tune, uint nid)
 
   97  MidiEvent ev (MidiEvent::NOTE_OFF);
 
  107make_aftertouch (uint16 chnl, uint8 mkey, 
float velo, 
float tune, uint nid)
 
  109  MidiEvent ev (MidiEvent::AFTERTOUCH);
 
  119make_pressure (uint16 chnl, 
float velo)
 
  121  MidiEvent ev (MidiEvent::CHANNEL_PRESSURE);
 
  128make_control (uint16 chnl, uint prm, 
float val)
 
  130  MidiEvent ev (MidiEvent::CONTROL_CHANGE);
 
  134  ev.cval = ev.value * 127;
 
  139make_control8 (uint16 chnl, uint prm, uint8 cval)
 
  141  MidiEvent ev (MidiEvent::CONTROL_CHANGE);
 
  145  ev.value = ev.cval * (1.0 / 127.0);
 
  150make_program (uint16 chnl, uint prgrm)
 
  152  MidiEvent ev (MidiEvent::PROGRAM_CHANGE);
 
  159make_pitch_bend (uint16 chnl, 
float val)
 
  161  MidiEvent ev (MidiEvent::PITCH_BEND);
 
  168make_param_value (uint param, 
double pvalue)
 
  170  MidiEvent ev (MidiEvent::PARAM_VALUE);
 
  178MidiEventOutput::MidiEventOutput ()
 
  183MidiEventOutput::append (int16_t frame, 
const MidiEvent &event)
 
  185  const bool out_of_order_event = append_unsorted (frame, event);
 
 
  192MidiEventOutput::append_unsorted (int16_t frame, 
const MidiEvent &event)
 
  197  const int64_t last_event_stamp = !events_.empty() ? events_.back().frame : 0;
 
  198  events_.push_back (event);
 
  199  events_.back().frame = frame;
 
  200  return frame < last_event_stamp;
 
 
  205MidiEventOutput::ensure_order ()
 
  208    return a.frame < b.frame;
 
 
  214MidiEventOutput::last_frame ()
 const 
  216  return !events_.empty() ? events_.back().frame : 0;
 
 
#define assert_return(expr,...)
Return from the current function if expr is unmet and issue an assertion warning.
 
The Anklang C++ API namespace.
 
std::string string_format(const char *format, const Args &...args) __attribute__((__format__(__printf__
Format a string similar to sprintf(3) with support for std::string and std::ostringstream convertible...
 
MidiMessage
Extended type information for MidiEvent.
 
void fixed_sort(RandomIt first, RandomIt last, Compare comp=std::less< typename std::iterator_traits< RandomIt >::value_type >())
Use sorting networks to sort containers <= 16 elements without allocations.
 
@ NOTE_OFF
Ase internal Parameter update.
 
@ CONTROL_CHANGE
Control Change.
 
@ AFTERTOUCH
Key Pressure, polyphonic aftertouch.
 
@ CHANNEL_PRESSURE
Channel Aftertouch.
 
uint32_t uint
Provide 'uint' as convenience type.
 
MidiEvent data structure.
 
uint channel
0…15 for standard events