1 #include "midi++/event.h"
5 #ifdef MIDI_EVENT_ALLOW_ALLOC
6 Event::Event(double t, uint32_t s, uint8_t* b, bool owns_buffer)
10 , _owns_buffer(owns_buffer)
13 _buffer = (uint8_t*)malloc(_size);
15 memcpy(_buffer, b, _size);
17 memset(_buffer, 0, _size);
22 Event::Event(const XMLNode& event)
24 string name = event.name();
26 if (name == "ControlChange") {
28 } else if (name == "ProgramChange") {
33 Event::Event(const Event& copy, bool owns_buffer)
36 , _buffer(copy._buffer)
37 , _owns_buffer(owns_buffer)
40 _buffer = (uint8_t*)malloc(_size);
42 memcpy(_buffer, copy._buffer, _size);
44 memset(_buffer, 0, _size);
56 #endif // MIDI_EVENT_ALLOW_ALLOC
59 Event::to_string() const
61 std::ostringstream result(std::ios::ate);
62 result << "MIDI::Event type:" << std::hex << "0x" << int(type()) << " buffer: ";
64 for(uint32_t i = 0; i < size(); ++i) {
65 result << " 0x" << int(_buffer[i]);
70 boost::shared_ptr<XMLNode>
76 case MIDI_CMD_CONTROL:
77 result = new XMLNode("ControlChange");
78 result->add_property("Channel", channel());
79 result->add_property("Control", cc_number());
80 result->add_property("Value", cc_value());
83 case MIDI_CMD_PGM_CHANGE:
84 result = new XMLNode("ProgramChange");
85 result->add_property("Channel", channel());
86 result->add_property("number", pgm_number());
90 // The implementation is continued as needed
94 return boost::shared_ptr<XMLNode>(result);