Use ARDOUR::user_config_directory in ARDOUR::user_template_directory
[ardour.git] / libs / ardour / midi_port.cc
index d7ce12d411f52bd1656cd5b614ae985f06f11927..ba8d1aa841b87cc43088ee23f9cee3d1ce7359a7 100644 (file)
 */
 
 #include <cassert>
+#include <iostream>
+
 #include <ardour/midi_port.h>
 #include <ardour/data_type.h>
-#include <iostream>
 
 using namespace ARDOUR;
 using namespace std;
@@ -43,7 +44,7 @@ MidiPort::~MidiPort()
 }
 
 void
-MidiPort::cycle_start (jack_nframes_t nframes)
+MidiPort::cycle_start (nframes_t nframes)
 {
        _buffer.clear();
        assert(_buffer.size() == 0);
@@ -60,24 +61,18 @@ MidiPort::cycle_start (jack_nframes_t nframes)
        
        void* jack_buffer = jack_port_get_buffer(_port, nframes);
 
-       const jack_nframes_t event_count
-               = jack_midi_get_event_count(jack_buffer, nframes);
+       const nframes_t event_count
+               = jack_midi_get_event_count(jack_buffer);
 
        assert(event_count < _buffer.capacity());
 
-       MidiEvent ev;
+       jack_midi_event_t ev;
 
-       // FIXME: too slow, event struct is copied twice (here and MidiBuffer::push_back)
-       for (jack_nframes_t i=0; i < event_count; ++i) {
+       for (nframes_t i=0; i < event_count; ++i) {
 
-               // This will fail to compile if we change MidiEvent to our own class
-               jack_midi_event_get(static_cast<jack_midi_event_t*>(&ev), jack_buffer, i, nframes);
+               jack_midi_event_get(&ev, jack_buffer, i);
 
                _buffer.push_back(ev);
-               // Convert note ons with velocity 0 to proper note offs
-               // FIXME: Jack MIDI should guarantee this - does it?
-               //if (ev->buffer[0] == MIDI_CMD_NOTE_ON && ev->buffer[2] == 0)
-               //      ev->buffer[0] = MIDI_CMD_NOTE_OFF;
        }
 
        assert(_buffer.size() == event_count);
@@ -98,16 +93,18 @@ MidiPort::cycle_end()
        
        void* jack_buffer = jack_port_get_buffer(_port, _nframes_this_cycle);
 
-       const jack_nframes_t event_count = _buffer.size();
+       const nframes_t event_count = _buffer.size();
        
        //if (event_count > 0)
        //      cerr << "MIDIPort writing " << event_count << " events." << endl;
 
-       jack_midi_clear_buffer(jack_buffer, _nframes_this_cycle);
-       for (jack_nframes_t i=0; i < event_count; ++i) {
-               const jack_midi_event_t& ev = _buffer[i];
+       jack_midi_clear_buffer(jack_buffer);
+       for (nframes_t i=0; i < event_count; ++i) {
+               const MidiEvent& ev = _buffer[i];
+               // event times should be frames, relative to cycle start
+               assert(ev.time >= 0);
                assert(ev.time < _nframes_this_cycle);
-               jack_midi_event_write(jack_buffer, ev.time, ev.buffer, ev.size, _nframes_this_cycle);
+               jack_midi_event_write(jack_buffer, (jack_nframes_t)ev.time, ev.buffer, ev.size);
        }
        
        _nframes_this_cycle = 0;