diff options
author | David Robillard <d@drobilla.net> | 2006-08-21 19:12:26 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2006-08-21 19:12:26 +0000 |
commit | 48a4dc072c82dd382caa11405bf61a125d17eb16 (patch) | |
tree | 1b94f5a7fbd461d272f1b6c2142a1ddb2b0d746b /libs/ardour/ardour/smf_source.h | |
parent | 7250433f50236a05fc652fa41c23bf53fbf6a0fd (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.h | 33 |
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; }; |