summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-08-11 00:22:57 +0000
committerDavid Robillard <d@drobilla.net>2007-08-11 00:22:57 +0000
commit861181d7421012486e36327c464b957ec08e396b (patch)
treed569f780e0e9066c6a814ffedeab0e74675a08a8 /libs/ardour
parentb6855bc209c062daa961e0ef4227621a43bcd332 (diff)
Fix MIDI file names on recording (don't write out a ton of useless empty .mid files).
Preliminary hooks for writing model to file (still does nothing). git-svn-id: svn://localhost/ardour2/trunk@2289 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/midi_model.h2
-rw-r--r--libs/ardour/ardour/midi_source.h2
-rw-r--r--libs/ardour/ardour/smf_source.h2
-rw-r--r--libs/ardour/ardour/source.h2
-rw-r--r--libs/ardour/midi_diskstream.cc2
-rw-r--r--libs/ardour/midi_model.cc19
-rw-r--r--libs/ardour/midi_source.cc6
-rw-r--r--libs/ardour/session_state.cc11
-rw-r--r--libs/ardour/smf_source.cc10
9 files changed, 47 insertions, 9 deletions
diff --git a/libs/ardour/ardour/midi_model.h b/libs/ardour/ardour/midi_model.h
index 2879514d5a..f1fcabfb1f 100644
--- a/libs/ardour/ardour/midi_model.h
+++ b/libs/ardour/ardour/midi_model.h
@@ -143,6 +143,8 @@ public:
MidiModel::DeltaCommand* new_delta_command(const std::string name="midi edit");
void apply_command(Command* cmd);
+ bool write_new_source(const std::string& path);
+
sigc::signal<void> ContentsChanged;
private:
diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h
index c812f465ea..2de31f879e 100644
--- a/libs/ardour/ardour/midi_source.h
+++ b/libs/ardour/ardour/midi_source.h
@@ -56,6 +56,8 @@ class MidiSource : public Source
virtual void mark_streaming_midi_write_started (NoteMode mode);
virtual void mark_streaming_write_started ();
virtual void mark_streaming_write_completed ();
+
+ virtual void session_saved();
string captured_for() const { return _captured_for; }
void set_captured_for (string str) { _captured_for = str; }
diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h
index f8e73c4ec3..fde91ed946 100644
--- a/libs/ardour/ardour/smf_source.h
+++ b/libs/ardour/ardour/smf_source.h
@@ -75,7 +75,7 @@ class SMFSource : public MidiSource {
int move_to_trash (const string trash_dir_name);
- static bool is_empty (string path);
+ bool is_empty () const;
void mark_streaming_write_completed ();
void mark_take (string);
diff --git a/libs/ardour/ardour/source.h b/libs/ardour/ardour/source.h
index e1843df75c..bbb7d798b2 100644
--- a/libs/ardour/ardour/source.h
+++ b/libs/ardour/ardour/source.h
@@ -57,6 +57,8 @@ class Source : public SessionObject
virtual void mark_for_remove() = 0;
virtual void mark_streaming_write_started () {}
virtual void mark_streaming_write_completed () = 0;
+
+ virtual void session_saved() {}
XMLNode& get_state ();
int set_state (const XMLNode&);
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index 7137772193..493a29f4ce 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -1361,7 +1361,7 @@ MidiDiskstream::use_new_write_source (uint32_t n)
if (_write_source) {
- if (SMFSource::is_empty (_write_source->path())) {
+ if (_write_source->is_empty ()) {
_write_source->mark_for_remove ();
_write_source.reset();
} else {
diff --git a/libs/ardour/midi_model.cc b/libs/ardour/midi_model.cc
index a10a663780..c68dcff6b6 100644
--- a/libs/ardour/midi_model.cc
+++ b/libs/ardour/midi_model.cc
@@ -424,3 +424,22 @@ MidiModel::DeltaCommand::undo()
_model.ContentsChanged(); /* EMIT SIGNAL */
}
+
+bool
+MidiModel::write_new_source(const std::string& path)
+{
+ cerr << "Writing model to " << path << endl;
+
+#if 0
+ SourceFactory::createWritable (region->data_type(), session, path, false, session.frame_rate());
+
+ catch (failed_constructor& err) {
+ error << string_compose (_("filter: error creating new file %1 (%2)"), path, strerror (errno)) << endmsg;
+ return -1;
+ }
+ }
+#endif
+
+ return true;
+}
+
diff --git a/libs/ardour/midi_source.cc b/libs/ardour/midi_source.cc
index 59aeddf831..e52e39e121 100644
--- a/libs/ardour/midi_source.cc
+++ b/libs/ardour/midi_source.cc
@@ -155,3 +155,9 @@ MidiSource::mark_streaming_write_completed ()
_writing = false;
}
+void
+MidiSource::session_saved()
+{
+ cerr << "MidiSource saving, name = " << _name << endl;
+}
+
diff --git a/libs/ardour/session_state.cc b/libs/ardour/session_state.cc
index 48fb932b30..9a994d3eca 100644
--- a/libs/ardour/session_state.cc
+++ b/libs/ardour/session_state.cc
@@ -560,6 +560,11 @@ Session::save_state (string snapshot_name, bool pending)
return 1;
}
+ /* tell sources we're saving first, in case they write out to a new file
+ * which should be saved with the state rather than the old one */
+ for (SourceMap::const_iterator i = sources.begin(); i != sources.end(); ++i)
+ i->second->session_saved();
+
tree.set_root (&get_state());
if (snapshot_name.empty()) {
@@ -614,16 +619,16 @@ Session::save_state (string snapshot_name, bool pending)
if (!pending) {
- save_history (snapshot_name);
+ save_history (snapshot_name);
bool was_dirty = dirty();
_state_of_the_state = StateOfTheState (_state_of_the_state & ~Dirty);
-
+
if (was_dirty) {
DirtyChanged (); /* EMIT SIGNAL */
}
-
+
StateSaved (snapshot_name); /* EMIT SIGNAL */
}
diff --git a/libs/ardour/smf_source.cc b/libs/ardour/smf_source.cc
index 686fb96af3..92dfed3cec 100644
--- a/libs/ardour/smf_source.cc
+++ b/libs/ardour/smf_source.cc
@@ -113,7 +113,7 @@ bool
SMFSource::removable () const
{
return (_flags & Removable) && ((_flags & RemoveAtDestroy) ||
- ((_flags & RemovableIfEmpty) && is_empty (_path)));
+ ((_flags & RemovableIfEmpty) && is_empty()));
}
int
@@ -720,11 +720,13 @@ SMFSource::set_source_name (string newname, bool destructive)
}
bool
-SMFSource::is_empty (string path)
+SMFSource::is_empty () const
{
- /* XXX fix me */
+ bool ret = (_track_size > 4);
- return false;
+ cerr << name() << " IS EMPTY: " << ret << endl;
+
+ return ret;
}