From 48a4dc072c82dd382caa11405bf61a125d17eb16 Mon Sep 17 00:00:00 2001 From: David Robillard Date: Mon, 21 Aug 2006 19:12:26 +0000 Subject: 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 --- libs/ardour/ardour/smf_source.h | 33 +++++++++++++++++++++++---------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'libs/ardour/ardour/smf_source.h') 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 #include #include 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; }; -- cgit v1.2.3