#include "libardour-config.h"
#endif
-#include <vector>
-#include <cstdio>
-
-#include <glibmm/fileutils.h>
-#include <glibmm/miscutils.h>
-
#include "pbd/error.h"
-#include "pbd/convert.h"
-#include "pbd/enumwriter.h"
#include "ardour/midi_playlist.h"
#include "ardour/midi_playlist_source.h"
-#include "ardour/midi_region.h"
-#include "ardour/debug.h"
-#include "ardour/filename_extensions.h"
-#include "ardour/session.h"
-#include "ardour/session_directory.h"
-#include "ardour/session_playlists.h"
-#include "ardour/source_factory.h"
#include "i18n.h"
using namespace ARDOUR;
using namespace PBD;
-MidiPlaylistSource::MidiPlaylistSource (Session& s, const ID& orig, const std::string& name, boost::shared_ptr<MidiPlaylist> p,
- uint32_t chn, frameoffset_t begin, framecnt_t len, Source::Flag flags)
- : Source (s, DataType::AUDIO, name)
+namespace ARDOUR {
+class MidiStateTracker;
+class Session;
+template <typename T> class MidiRingBuffer;
+}
+
+namespace Evoral {
+template <typename T> class EventSink;
+template <typename Time> class Event;
+}
+
+/*******************************************************************************
+As of May 2011, it appears too complex to support compound regions for MIDI
+because of the need to be able to edit the data represented by the region. It
+seems that it would be a better idea to render the consituent regions into a
+new MIDI file and create a new region based on that, an operation we have been
+calling "consolidate"
+
+This code has been in place as a stub in case anyone gets any brilliant ideas
+on other ways to approach this issue.
+********************************************************************************/
+
+MidiPlaylistSource::MidiPlaylistSource (Session& s, const ID& orig, const std::string& name, boost::shared_ptr<MidiPlaylist> p,
+ uint32_t /*chn*/, frameoffset_t begin, framecnt_t len, Source::Flag flags)
+ : Source (s, DataType::MIDI, name)
, MidiSource (s, name, flags)
- , PlaylistSource (s, orig, name, p, DataType::AUDIO, begin, len, flags)
+ , PlaylistSource (s, orig, name, p, DataType::MIDI, begin, len, flags)
{
- ensure_buffers_for_level (_level);
}
MidiPlaylistSource::MidiPlaylistSource (Session& s, const XMLNode& node)
/* ancestors have already called ::set_state() in their XML-based
constructors.
*/
-
+
if (set_state (node, Stateful::loading_state_version, false)) {
throw failed_constructor ();
}
return node;
}
-
int
-MidiPlaylistSource::set_state (const XMLNode& node, int version)
+MidiPlaylistSource::set_state (const XMLNode& node, int version)
{
return set_state (node, version, true);
}
int
-MidiPlaylistSource::set_state (const XMLNode& node, int version, bool with_descendants)
+MidiPlaylistSource::set_state (const XMLNode& node, int version, bool with_descendants)
{
if (with_descendants) {
- if (Source::set_state (node, version) ||
+ if (Source::set_state (node, version) ||
MidiSource::set_state (node, version) ||
PlaylistSource::set_state (node, version)) {
return -1;
}
}
- ensure_buffers_for_level (_level);
-
return 0;
}
return extent.second - extent.first;
}
-framepos_t
+framecnt_t
MidiPlaylistSource::read_unlocked (Evoral::EventSink<framepos_t>& dst,
- framepos_t position,
+ framepos_t /*position*/,
framepos_t start, framecnt_t cnt,
- MidiStateTracker* tracker) const
+ MidiStateTracker*) const
{
boost::shared_ptr<MidiPlaylist> mp = boost::dynamic_pointer_cast<MidiPlaylist> (_playlist);
return mp->read (dst, start, cnt);
}
-framepos_t
-MidiPlaylistSource::write_unlocked (MidiRingBuffer<framepos_t>& dst,
- framepos_t position,
- framecnt_t cnt)
+framecnt_t
+MidiPlaylistSource::write_unlocked (MidiRingBuffer<framepos_t>&,
+ framepos_t,
+ framecnt_t)
{
fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::write_unlocked() called - should be impossible") << endmsg;
/*NOTREACHED*/
return 0;
}
-void
+void
MidiPlaylistSource::append_event_unlocked_beats(const Evoral::Event<Evoral::MusicalTime>& /*ev*/)
{
fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::append_event_unlocked_beats() called - should be impossible") << endmsg;
/*NOTREACHED*/
}
-void
-MidiPlaylistSource::append_event_unlocked_frames(const Evoral::Event<framepos_t>& ev, framepos_t source_start)
+void
+MidiPlaylistSource::append_event_unlocked_frames(const Evoral::Event<framepos_t>& /* ev */, framepos_t /*source_start*/)
{
fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::append_event_unlocked_frames() called - should be impossible") << endmsg;
/*NOTREACHED*/
}
void
-MidiPlaylistSource::load_model (bool, bool)
+MidiPlaylistSource::load_model (bool, bool)
{
- fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::load_model() called - should be impossible") << endmsg;
- /*NOTREACHED*/
+ /* nothing to do */
}
void
-MidiPlaylistSource::destroy_model ()
+MidiPlaylistSource::destroy_model ()
{
- fatal << string_compose (_("programming error: %1"), "MidiPlaylistSource::destroy_model() called - should be impossible") << endmsg;
- /*NOTREACHED*/
+ /* nothing to do */
}
void
return !_playlist || _playlist->empty();
}
-void
-MidiPlaylistSource::ensure_buffers_for_level (uint32_t level)
-{
-}
-
-