summaryrefslogtreecommitdiff
path: root/libs/ardour
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-07-28 09:01:19 +0000
committerDavid Robillard <d@drobilla.net>2007-07-28 09:01:19 +0000
commit633d9131af0a04bed812ce75e9f1da07fe7dfcd4 (patch)
tree989f907ffa7a8c4829160946e49f503c4e3a903c /libs/ardour
parent6e167cb1a835cb0b44990cc4c2b2a47db9dd2b9e (diff)
Use 'show contents' note range by default (fix uninitialized value).
Obey note mode on playback (note offs are not sent in Percussive mode). Vary note colour/opacity with velocity (needs theization/tweaking, but hey, it's something). git-svn-id: svn://localhost/ardour2/trunk@2184 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour')
-rw-r--r--libs/ardour/ardour/midi_playlist.h4
-rw-r--r--libs/ardour/ardour/midi_region.h9
-rw-r--r--libs/ardour/ardour/midi_source.h1
-rw-r--r--libs/ardour/midi_diskstream.cc1
-rw-r--r--libs/ardour/midi_playlist.cc8
-rw-r--r--libs/ardour/midi_region.cc12
6 files changed, 24 insertions, 11 deletions
diff --git a/libs/ardour/ardour/midi_playlist.h b/libs/ardour/ardour/midi_playlist.h
index 3162debbd5..5838f5addd 100644
--- a/libs/ardour/ardour/midi_playlist.h
+++ b/libs/ardour/ardour/midi_playlist.h
@@ -53,6 +53,8 @@ public:
UndoAction get_memento() const;
bool destroy_region (boost::shared_ptr<Region>);
+
+ void set_note_mode (NoteMode m) { _note_mode = m; }
protected:
@@ -68,6 +70,8 @@ private:
void dump () const;
bool region_changed (Change, boost::shared_ptr<Region>);
+
+ NoteMode _note_mode;
};
} /* namespace ARDOUR */
diff --git a/libs/ardour/ardour/midi_region.h b/libs/ardour/ardour/midi_region.h
index 83487e456a..ade839ab3e 100644
--- a/libs/ardour/ardour/midi_region.h
+++ b/libs/ardour/ardour/midi_region.h
@@ -53,12 +53,14 @@ class MidiRegion : public Region
nframes_t read_at (MidiRingBuffer& dst,
nframes_t position,
nframes_t dur,
- uint32_t chan_n = 0) const;
+ uint32_t chan_n = 0,
+ NoteMode mode = Sustained) const;
nframes_t master_read_at (MidiRingBuffer& dst,
nframes_t position,
nframes_t dur,
- uint32_t chan_n=0) const;
+ uint32_t chan_n = 0,
+ NoteMode mode = Sustained) const;
XMLNode& state (bool);
int set_state (const XMLNode&);
@@ -82,7 +84,8 @@ class MidiRegion : public Region
nframes_t _read_at (const SourceList&, MidiRingBuffer& dst,
nframes_t position,
nframes_t dur,
- uint32_t chan_n = 0) const;
+ uint32_t chan_n = 0,
+ NoteMode mode = Sustained) const;
void recompute_at_start ();
void recompute_at_end ();
diff --git a/libs/ardour/ardour/midi_source.h b/libs/ardour/ardour/midi_source.h
index 5393f07157..9917a0cb42 100644
--- a/libs/ardour/ardour/midi_source.h
+++ b/libs/ardour/ardour/midi_source.h
@@ -74,6 +74,7 @@ class MidiSource : public Source
virtual void load_model(bool lock=true, bool force_reload=false) = 0;
virtual void destroy_model() = 0;
+ void set_note_mode(NoteMode mode) { if (_model) _model->set_note_mode(mode); }
virtual bool model_loaded() const { return _model_loaded; }
MidiModel* model() { return _model; }
diff --git a/libs/ardour/midi_diskstream.cc b/libs/ardour/midi_diskstream.cc
index c5711a8295..74acae522a 100644
--- a/libs/ardour/midi_diskstream.cc
+++ b/libs/ardour/midi_diskstream.cc
@@ -312,6 +312,7 @@ void
MidiDiskstream::set_note_mode (NoteMode m)
{
_note_mode = m;
+ midi_playlist()->set_note_mode(m);
if (_write_source && _write_source->model())
_write_source->model()->set_note_mode(m);
}
diff --git a/libs/ardour/midi_playlist.cc b/libs/ardour/midi_playlist.cc
index 0aa3779034..27410462d1 100644
--- a/libs/ardour/midi_playlist.cc
+++ b/libs/ardour/midi_playlist.cc
@@ -150,10 +150,12 @@ MidiPlaylist::read (MidiRingBuffer& dst, nframes_t start,
sort(regs.begin(), regs.end(), layer_cmp);
for (vector<boost::shared_ptr<Region> >::iterator i = regs.begin(); i != regs.end(); ++i) {
- // FIXME: ensure time is monotonic here
+ // FIXME: ensure time is monotonic here?
boost::shared_ptr<MidiRegion> mr = boost::dynamic_pointer_cast<MidiRegion>(*i);
- mr->read_at (dst, start, dur, chan_n);
- _read_data_count += mr->read_data_count();
+ if (mr) {
+ mr->read_at (dst, start, dur, chan_n, _note_mode);
+ _read_data_count += mr->read_data_count();
+ }
}
return dur;
diff --git a/libs/ardour/midi_region.cc b/libs/ardour/midi_region.cc
index 860d0ec672..1ef52c743d 100644
--- a/libs/ardour/midi_region.cc
+++ b/libs/ardour/midi_region.cc
@@ -110,19 +110,19 @@ MidiRegion::~MidiRegion ()
}
nframes_t
-MidiRegion::read_at (MidiRingBuffer& out, nframes_t position, nframes_t dur, uint32_t chan_n) const
+MidiRegion::read_at (MidiRingBuffer& out, nframes_t position, nframes_t dur, uint32_t chan_n, NoteMode mode) const
{
- return _read_at (_sources, out, position, dur, chan_n);
+ return _read_at (_sources, out, position, dur, chan_n, mode);
}
nframes_t
-MidiRegion::master_read_at (MidiRingBuffer& out, nframes_t position, nframes_t dur, uint32_t chan_n) const
+MidiRegion::master_read_at (MidiRingBuffer& out, nframes_t position, nframes_t dur, uint32_t chan_n, NoteMode mode) const
{
- return _read_at (_master_sources, out, position, dur, chan_n);
+ return _read_at (_master_sources, out, position, dur, chan_n, mode);
}
nframes_t
-MidiRegion::_read_at (const SourceList& srcs, MidiRingBuffer& dst, nframes_t position, nframes_t dur, uint32_t chan_n) const
+MidiRegion::_read_at (const SourceList& srcs, MidiRingBuffer& dst, nframes_t position, nframes_t dur, uint32_t chan_n, NoteMode mode) const
{
// cerr << _name << "._read_at(" << position << ") - " << _position << endl;
@@ -162,6 +162,8 @@ MidiRegion::_read_at (const SourceList& srcs, MidiRingBuffer& dst, nframes_t pos
_read_data_count = 0;
boost::shared_ptr<MidiSource> src = midi_source(chan_n);
+ src->set_note_mode(mode);
+
if (src->read (dst, _start + internal_offset, to_read, _position) != to_read) {
return 0; /* "read nothing" */
}