mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-15 19:16:40 +01:00
Fix MIDI playback.
git-svn-id: svn://localhost/ardour2/trunk@2905 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
e92c1669c1
commit
c78c44ccd7
4 changed files with 26 additions and 24 deletions
|
|
@ -34,6 +34,7 @@ class MidiPort : public BaseMidiPort, public PortFacade {
|
|||
void reset ();
|
||||
|
||||
void cycle_start (nframes_t nframes, nframes_t offset);
|
||||
void cycle_end (nframes_t nframes, nframes_t offset);
|
||||
|
||||
protected:
|
||||
friend class AudioEngine;
|
||||
|
|
|
|||
|
|
@ -337,11 +337,6 @@ AudioEngine::process_callback (nframes_t nframes)
|
|||
if (session) {
|
||||
session->process (nframes);
|
||||
}
|
||||
|
||||
if (!_running) {
|
||||
_processed_frames = next_processed_frames;
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Finalize ports (ie write data if necessary)
|
||||
|
||||
|
|
@ -349,6 +344,11 @@ AudioEngine::process_callback (nframes_t nframes)
|
|||
(*i)->cycle_end (nframes, 0);
|
||||
}
|
||||
|
||||
if (!_running) {
|
||||
_processed_frames = next_processed_frames;
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (last_monitor_check + monitor_check_interval < next_processed_frames) {
|
||||
|
||||
boost::shared_ptr<Ports> p = ports.reader();
|
||||
|
|
|
|||
|
|
@ -25,31 +25,22 @@ JackMidiPort::JackMidiPort (const std::string& name, Flags flgs, MidiBuffer* buf
|
|||
, JackPort (name, DataType::MIDI, flgs)
|
||||
, BaseMidiPort (name, flgs)
|
||||
{
|
||||
if (buf) {
|
||||
// MIDI ports always need a buffer since jack buffer format is different
|
||||
assert(buf);
|
||||
|
||||
cout << name << " BUFFER" << endl;
|
||||
|
||||
_buffer = buf;
|
||||
_own_buffer = false;
|
||||
|
||||
} else {
|
||||
|
||||
cout << name << " NO BUFFER" << endl;
|
||||
|
||||
/* data space will be provided by JACK */
|
||||
_buffer = new MidiBuffer (0);
|
||||
_own_buffer = true;
|
||||
}
|
||||
_buffer = buf;
|
||||
_own_buffer = false;
|
||||
}
|
||||
|
||||
void
|
||||
JackMidiPort::cycle_start (nframes_t nframes, nframes_t offset_ignored_but_probably_should_not_be)
|
||||
JackMidiPort::cycle_start (nframes_t nframes, nframes_t offset)
|
||||
{
|
||||
/* FIXME: offset */
|
||||
|
||||
_buffer->clear();
|
||||
assert(_buffer->size() == 0);
|
||||
|
||||
if (_flags & IsOutput) {
|
||||
// no buffer, nothing to do
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
@ -76,8 +67,10 @@ JackMidiPort::cycle_start (nframes_t nframes, nframes_t offset_ignored_but_proba
|
|||
}
|
||||
|
||||
void
|
||||
JackMidiPort::cycle_end (nframes_t nframes, nframes_t offset_ignored_but_probably_should_not_be)
|
||||
JackMidiPort::cycle_end (nframes_t nframes, nframes_t offset)
|
||||
{
|
||||
/* FIXME: offset */
|
||||
|
||||
if (_flags & IsInput) {
|
||||
return;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,8 +67,6 @@ MidiPort::reset()
|
|||
void
|
||||
MidiPort::cycle_start (nframes_t nframes, nframes_t offset)
|
||||
{
|
||||
/* caller must hold process lock */
|
||||
|
||||
if (_ext_port) {
|
||||
_ext_port->cycle_start (nframes, offset);
|
||||
}
|
||||
|
|
@ -99,3 +97,13 @@ MidiPort::cycle_start (nframes_t nframes, nframes_t offset)
|
|||
_buffer->silence (nframes, offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
MidiPort::cycle_end (nframes_t nframes, nframes_t offset)
|
||||
{
|
||||
if (_ext_port) {
|
||||
_ext_port->cycle_end (nframes, offset);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue