- Changed IO's vector<Port*>'s to PortList
[ardour.git] / libs / ardour / ardour / midi_region.h
index ec47a91b95b2af4a08faf2a8036be1a8712cb12b..f68c0ba3cafca52f70cc879c233671862b3fecbe 100644 (file)
@@ -1,6 +1,5 @@
 /*
-    Copyright (C) 2006 Paul Davis 
-       Written by Dave Robillard, 2006
+    Copyright (C) 2000-2006 Paul Davis 
 
     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
@@ -15,6 +14,8 @@
     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.
+
+    $Id: midiregion.h 733 2006-08-01 17:19:38Z drobilla $
 */
 
 #ifndef __ardour_midi_region_h__
@@ -27,6 +28,8 @@
 
 #include <ardour/ardour.h>
 #include <ardour/region.h>
+#include <ardour/gain.h>
+#include <ardour/logcurve.h>
 #include <ardour/export.h>
 
 class XMLNode;
@@ -39,17 +42,9 @@ class Session;
 class MidiFilter;
 class MidiSource;
 
-struct MidiRegionState : public RegionState 
-{
-    MidiRegionState (std::string why);
-
-};
-
 class MidiRegion : public Region
 {
   public:
-       typedef vector<MidiSource *> SourceList;
-
        MidiRegion (MidiSource&, jack_nframes_t start, jack_nframes_t length, bool announce = true);
        MidiRegion (MidiSource&, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
        MidiRegion (SourceList &, jack_nframes_t start, jack_nframes_t length, const string& name, layer_t = 0, Region::Flag flags = Region::DefaultFlags, bool announce = true);
@@ -59,83 +54,43 @@ class MidiRegion : public Region
        MidiRegion (SourceList &, const XMLNode&);
        ~MidiRegion();
 
-       bool source_equivalent (const Region&) const;
-
-       bool speed_mismatch (float) const;
-
-       void lock_sources ();
-       void unlock_sources ();
-       MidiSource& source (uint32_t n=0) const { if (n < sources.size()) return *sources[n]; else return *sources[0]; } 
-
-       uint32_t n_channels() { return sources.size(); }
-       vector<string> master_source_names();
-       
-       bool captured() const { return !(_flags & (Region::Flag (Region::Import|Region::External))); }
-
-       virtual jack_nframes_t read_at (unsigned char *buf, unsigned char *mixdown_buffer, 
-                                       char * workbuf, jack_nframes_t position, jack_nframes_t cnt, 
-                                       uint32_t chan_n = 0,
-                                       jack_nframes_t read_frames = 0,
-                                       jack_nframes_t skip_frames = 0) const;
+       MidiSource& midi_source (uint32_t n=0) const;
 
-       jack_nframes_t master_read_at (unsigned char *buf, unsigned char *mixdown_buffer, 
-                                      char * workbuf, jack_nframes_t position, jack_nframes_t cnt, uint32_t chan_n=0) const;
+       jack_nframes_t read_at (RawMidi* out, RawMidi* mix,
+                       jack_nframes_t position,
+                       jack_nframes_t cnt, 
+                       uint32_t       chan_n      = 0,
+                       jack_nframes_t read_frames = 0,
+                       jack_nframes_t skip_frames = 0) const;
 
+       jack_nframes_t master_read_at (RawMidi* buf, RawMidi* mix,
+                       jack_nframes_t position,
+                       jack_nframes_t cnt,
+                       uint32_t chan_n=0) const;
 
        XMLNode& state (bool);
-       XMLNode& get_state ();
        int      set_state (const XMLNode&);
 
-       enum FadeShape {
-               Linear,
-               Fast,
-               Slow,
-               LogA,
-               LogB,
-
-       };
-
        int separate_by_channel (ARDOUR::Session&, vector<MidiRegion*>&) const;
 
-       uint32_t read_data_count() const { return _read_data_count; }
-
-       ARDOUR::Playlist* playlist() const { return _playlist; }
-
        UndoAction get_memento() const;
 
-       /* export */
-
-       //int exportme (ARDOUR::Session&, ARDOUR::AudioExportSpecification&);
-
-       Region* get_parent();
-
   private:
        friend class Playlist;
 
   private:
-       SourceList        sources;
-       SourceList        master_sources; /* used when timefx are applied, so 
-                                            we can always use the original
-                                            source.
-                                         */
        StateManager::State* state_factory (std::string why) const;
        Change restore_state (StateManager::State&);
 
-       jack_nframes_t _read_at (const SourceList&, unsigned char *buf, unsigned char *mixdown_buffer, 
-                                char * workbuf, jack_nframes_t position, jack_nframes_t cnt, 
-                                uint32_t chan_n = 0,
-                                jack_nframes_t read_frames = 0,
-                                jack_nframes_t skip_frames = 0) const;
-
-       bool verify_start (jack_nframes_t position);
-       bool verify_length (jack_nframes_t position);
-       bool verify_start_mutable (jack_nframes_t& start);
-       bool verify_start_and_length (jack_nframes_t start, jack_nframes_t length);
-
-       void recompute_at_start() {}
-       void recompute_at_end() {}
+       jack_nframes_t _read_at (const SourceList&, RawMidi *buf,
+               jack_nframes_t position,
+               jack_nframes_t cnt, 
+               uint32_t chan_n = 0,
+               jack_nframes_t read_frames = 0,
+               jack_nframes_t skip_frames = 0) const;
 
-       void source_deleted (Source*);
+       void recompute_at_start ();
+       void recompute_at_end ();
 };
 
 } /* namespace ARDOUR */