summaryrefslogtreecommitdiff
path: root/libs/ardour/midi_source.cc
diff options
context:
space:
mode:
Diffstat (limited to 'libs/ardour/midi_source.cc')
-rw-r--r--libs/ardour/midi_source.cc206
1 files changed, 0 insertions, 206 deletions
diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc
deleted file mode 100644
index 4e83413c13..0000000000
--- a/libs/ardour/midi_source.cc
+++ /dev/null
@@ -1,206 +0,0 @@
-/*
- Copyright (C) 2006 Paul Davis
- Written by Dave Robillard, 2006
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-*/
-
-#include <sys/stat.h>
-#include <unistd.h>
-#include <fcntl.h>
-#include <poll.h>
-#include <float.h>
-#include <cerrno>
-#include <ctime>
-#include <cmath>
-#include <iomanip>
-#include <algorithm>
-
-#include <pbd/xml++.h>
-#include <pbd/pthread_utils.h>
-#include <pbd/basename.h>
-
-#include <ardour/midi_source.h>
-#include <ardour/midi_ring_buffer.h>
-#include <ardour/session.h>
-#include <ardour/session_directory.h>
-#include <ardour/source_factory.h>
-
-#include "i18n.h"
-
-using namespace std;
-using namespace ARDOUR;
-using namespace PBD;
-
-sigc::signal<void,MidiSource *> MidiSource::MidiSourceCreated;
-
-MidiSource::MidiSource (Session& s, string name)
- : Source (s, name, DataType::MIDI)
- , _timeline_position(0)
- , _model(new MidiModel(this))
- , _writing (false)
-{
- _read_data_count = 0;
- _write_data_count = 0;
-}
-
-MidiSource::MidiSource (Session& s, const XMLNode& node)
- : Source (s, node)
- , _timeline_position(0)
- , _model(new MidiModel(this))
- , _writing (false)
-{
- _read_data_count = 0;
- _write_data_count = 0;
-
- if (set_state (node)) {
- throw failed_constructor();
- }
-}
-
-MidiSource::~MidiSource ()
-{
-}
-
-XMLNode&
-MidiSource::get_state ()
-{
- XMLNode& node (Source::get_state());
-
- if (_captured_for.length()) {
- node.add_property ("captured-for", _captured_for);
- }
-
- return node;
-}
-
-int
-MidiSource::set_state (const XMLNode& node)
-{
- const XMLProperty* prop;
-
- Source::set_state (node);
-
- if ((prop = node.property ("captured-for")) != 0) {
- _captured_for = prop->value();
- }
-
- return 0;
-}
-
-nframes_t
-MidiSource::midi_read (MidiRingBuffer& dst, nframes_t start, nframes_t cnt, nframes_t stamp_offset, nframes_t negative_stamp_offset) const
-{
- Glib::Mutex::Lock lm (_lock);
- if (_model) {
- //const size_t n_events =
- _model->read(dst, start, cnt, stamp_offset, negative_stamp_offset);
- //cout << "Read " << n_events << " events from model." << endl;
- return cnt;
- } else {
- return read_unlocked (dst, start, cnt, stamp_offset, negative_stamp_offset);
- }
-}
-
-nframes_t
-MidiSource::midi_write (MidiRingBuffer& dst, nframes_t cnt)
-{
- Glib::Mutex::Lock lm (_lock);
- return write_unlocked (dst, cnt);
-}
-
-bool
-MidiSource::file_changed (string path)
-{
- struct stat stat_file;
-
- int e1 = stat (path.c_str(), &stat_file);
-
- return ( !e1 );
-}
-
-void
-MidiSource::mark_streaming_midi_write_started (NoteMode mode, nframes_t start_frame)
-{
- set_timeline_position(start_frame); // why do I have a feeling this can break somehow...
-
- if (_model) {
- _model->set_note_mode(mode);
- _model->start_write();
- }
-
- _writing = true;
-}
-
-void
-MidiSource::mark_streaming_write_started ()
-{
- if (_model)
- _model->start_write();
-
- _writing = true;
-}
-
-void
-MidiSource::mark_streaming_write_completed ()
-{
- if (_model)
- _model->end_write(false); // FIXME: param?
-
- _writing = false;
-}
-
-void
-MidiSource::session_saved()
-{
- flush_header();
- flush_footer();
-
- if (_model && _model->edited()) {
- string newname;
- const string basename = PBD::basename_nosuffix(_name);
- string::size_type last_dash = basename.find_last_of("-");
- if (last_dash == string::npos || last_dash == basename.find_first_of("-")) {
- newname = basename + "-1";
- } else {
- stringstream ss(basename.substr(last_dash+1));
- unsigned write_count = 0;
- ss >> write_count;
- cerr << "WRITE COUNT: " << write_count << endl;
- ++write_count; // start at 1
- ss.clear();
- ss << basename.substr(0, last_dash) << "-" << write_count;
- newname = ss.str();
- }
-
- string newpath = _session.session_directory().midi_path().to_string() +"/"+ newname + ".mid";
-
- boost::shared_ptr<MidiSource> newsrc = boost::dynamic_pointer_cast<MidiSource>(
- SourceFactory::createWritable(DataType::MIDI, _session, newpath, 1, 0, true));
-
- newsrc->set_timeline_position(_timeline_position);
- _model->write_to(newsrc);
-
- // cyclic dependency here, ugly :(
- newsrc->set_model(_model);
- _model->set_midi_source(newsrc.get());
-
- newsrc->flush_header();
- newsrc->flush_footer();
-
- Switched.emit(newsrc);
- }
-}
-