summaryrefslogtreecommitdiff
path: root/libs/ardour/ardour/smf_source.h
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2006-08-21 19:12:26 +0000
committerDavid Robillard <d@drobilla.net>2006-08-21 19:12:26 +0000
commit48a4dc072c82dd382caa11405bf61a125d17eb16 (patch)
tree1b94f5a7fbd461d272f1b6c2142a1ddb2b0d746b /libs/ardour/ardour/smf_source.h
parent7250433f50236a05fc652fa41c23bf53fbf6a0fd (diff)
Recording to SMF. Playback not quite working yet, just some buglets left to iron out.
git-svn-id: svn://localhost/ardour2/branches/midi@841 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'libs/ardour/ardour/smf_source.h')
-rw-r--r--libs/ardour/ardour/smf_source.h33
1 files changed, 23 insertions, 10 deletions
diff --git a/libs/ardour/ardour/smf_source.h b/libs/ardour/ardour/smf_source.h
index d5bcd3ee4c..31e9c2205d 100644
--- a/libs/ardour/ardour/smf_source.h
+++ b/libs/ardour/ardour/smf_source.h
@@ -21,13 +21,14 @@
#ifndef __ardour_smf_filesource_h__
#define __ardour_smf_filesource_h__
+#include <cstdio>
#include <time.h>
#include <ardour/midi_source.h>
namespace ARDOUR {
-class MidiBuffer;
+class MidiRingBuffer;
/** Standard Midi File (Type 0) Source */
class SMFSource : public MidiSource {
@@ -84,23 +85,35 @@ class SMFSource : public MidiSource {
XMLNode& get_state ();
int set_state (const XMLNode&);
- protected:
+ private:
int init (string idstr, bool must_exist);
- jack_nframes_t read_unlocked (MidiBuffer& dst, jack_nframes_t start, jack_nframes_t cn) const;
- jack_nframes_t write_unlocked (MidiBuffer& dst, jack_nframes_t cnt);
+ jack_nframes_t read_unlocked (MidiRingBuffer& dst, jack_nframes_t start, jack_nframes_t cn) const;
+ jack_nframes_t write_unlocked (MidiRingBuffer& dst, jack_nframes_t cnt);
bool find (std::string path, bool must_exist, bool& is_new);
bool removable() const;
bool writable() const { return _flags & Writable; }
- uint16_t _channel;
- string _path;
- Flag _flags;
- string _take_id;
- bool _allow_remove_if_empty;
- uint64_t _timeline_position;
+ int open();
+
+ void write_chunk_header(char id[4], uint32_t length);
+ void write_chunk(char id[4], uint32_t length, void* data);
+ size_t write_var_len(uint32_t val);
+ uint32_t read_var_len() const;
+ int read_event(MidiEvent& ev) const;
+
+ uint16_t _channel;
+ string _path;
+ Flag _flags;
+ string _take_id;
+ bool _allow_remove_if_empty;
+ uint64_t _timeline_position;
+ FILE* _fd;
+ jack_nframes_t _last_ev_time; // last frame time written, relative to source start
+ uint32_t _track_size;
+ uint32_t _header_size;
static string _search_path;
};