summaryrefslogtreecommitdiff
path: root/libs/midi++2/event.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-06-02 21:41:35 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-06-02 21:41:35 +0000
commit449aab3c465bbbf66d221fac3d7ea559f1720357 (patch)
tree6843cc40c88250a132acac701271f1504cd2df04 /libs/midi++2/event.cc
parent9c0d7d72d70082a54f823cd44c0ccda5da64bb6f (diff)
rollback to 3428, before the mysterious removal of libs/* at 3431/3432
git-svn-id: svn://localhost/ardour2/branches/3.0@3435 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/midi++2/event.cc')
-rw-r--r--libs/midi++2/event.cc97
1 files changed, 97 insertions, 0 deletions
diff --git a/libs/midi++2/event.cc b/libs/midi++2/event.cc
new file mode 100644
index 0000000000..09e3fcf732
--- /dev/null
+++ b/libs/midi++2/event.cc
@@ -0,0 +1,97 @@
+#include "midi++/event.h"
+
+namespace MIDI {
+
+#ifdef MIDI_EVENT_ALLOW_ALLOC
+Event::Event(double t, uint32_t s, uint8_t* b, bool owns_buffer)
+ : _time(t)
+ , _size(s)
+ , _buffer(b)
+ , _owns_buffer(owns_buffer)
+{
+ if (owns_buffer) {
+ _buffer = (uint8_t*)malloc(_size);
+ if (b) {
+ memcpy(_buffer, b, _size);
+ } else {
+ memset(_buffer, 0, _size);
+ }
+ }
+}
+
+Event::Event(const XMLNode& event)
+{
+ string name = event.name();
+
+ if (name == "ControlChange") {
+
+ } else if (name == "ProgramChange") {
+
+ }
+}
+
+Event::Event(const Event& copy, bool owns_buffer)
+ : _time(copy._time)
+ , _size(copy._size)
+ , _buffer(copy._buffer)
+ , _owns_buffer(owns_buffer)
+{
+ if (owns_buffer) {
+ _buffer = (uint8_t*)malloc(_size);
+ if (copy._buffer) {
+ memcpy(_buffer, copy._buffer, _size);
+ } else {
+ memset(_buffer, 0, _size);
+ }
+ }
+}
+
+Event::~Event() {
+ if (_owns_buffer) {
+ free(_buffer);
+ }
+}
+
+
+#endif // MIDI_EVENT_ALLOW_ALLOC
+
+std::string
+Event::to_string() const
+{
+ std::ostringstream result(std::ios::ate);
+ result << "MIDI::Event type:" << std::hex << "0x" << int(type()) << " buffer: ";
+
+ for(uint32_t i = 0; i < size(); ++i) {
+ result << " 0x" << int(_buffer[i]);
+ }
+ return result.str();
+}
+
+boost::shared_ptr<XMLNode>
+Event::to_xml() const
+{
+ XMLNode *result = 0;
+
+ switch (type()) {
+ case MIDI_CMD_CONTROL:
+ result = new XMLNode("ControlChange");
+ result->add_property("Channel", channel());
+ result->add_property("Control", cc_number());
+ result->add_property("Value", cc_value());
+ break;
+
+ case MIDI_CMD_PGM_CHANGE:
+ result = new XMLNode("ProgramChange");
+ result->add_property("Channel", channel());
+ result->add_property("number", pgm_number());
+ break;
+
+ default:
+ // The implementation is continued as needed
+ break;
+ }
+
+ return boost::shared_ptr<XMLNode>(result);
+}
+
+} // namespace MIDI