diff options
author | David Robillard <d@drobilla.net> | 2008-05-23 03:41:45 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2008-05-23 03:41:45 +0000 |
commit | 6ebefb4c8b523ecac35b7440907ef9e57d0154f0 (patch) | |
tree | cb2f25b531b9b38a642767a7fd21c5f285ca4623 /raul/SMFReader.hpp | |
parent | 264ce503aebaa87d275f23d1ea1a33034083b190 (diff) | |
download | raul-6ebefb4c8b523ecac35b7440907ef9e57d0154f0.tar.gz raul-6ebefb4c8b523ecac35b7440907ef9e57d0154f0.tar.bz2 raul-6ebefb4c8b523ecac35b7440907ef9e57d0154f0.zip |
Merge improvemennts to MIDI stuff from Ardour.
git-svn-id: http://svn.drobilla.net/lad/raul@1227 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'raul/SMFReader.hpp')
-rw-r--r-- | raul/SMFReader.hpp | 43 |
1 files changed, 26 insertions, 17 deletions
diff --git a/raul/SMFReader.hpp b/raul/SMFReader.hpp index 7ce6f5b..1bd1f0d 100644 --- a/raul/SMFReader.hpp +++ b/raul/SMFReader.hpp @@ -32,39 +32,48 @@ namespace Raul { */ class SMFReader { public: - SMFReader(); + class PrematureEOF : public std::exception { + const char* what() const throw() { return "Unexpected end of file"; } + }; + class CorruptFile : public std::exception { + const char* what() const throw() { return "Corrupted file"; } + }; + class UnsupportedTime : public std::exception { + const char* what() const throw() { return "Unsupported time stamp type (SMPTE)"; } + }; + + SMFReader(const std::string filename=""); ~SMFReader(); - bool open(const std::string& filename); + bool open(const std::string& filename) throw (std::logic_error, UnsupportedTime); bool seek_to_track(unsigned track) throw (std::logic_error); - TimeUnit unit() const { return _unit; } uint16_t type() const { return _type; } uint16_t ppqn() const { return _ppqn; } size_t num_tracks() { return _num_tracks; } - int read_event(size_t buf_len, - uint8_t* buf, - uint32_t* ev_size, - TimeStamp* ev_delta_time) throw (std::logic_error); + int read_event(size_t buf_len, + uint8_t* buf, + uint32_t* ev_size, + uint32_t* ev_delta_time) + throw (std::logic_error, PrematureEOF, CorruptFile); void close(); + + static uint32_t read_var_len(FILE* fd) throw (PrematureEOF); protected: /** size of SMF header, including MTrk chunk header */ static const uint32_t HEADER_SIZE = 22; - uint32_t read_var_len() const; - - std::string _filename; - FILE* _fd; - TimeUnit _unit; - uint16_t _type; - uint16_t _ppqn; - uint16_t _num_tracks; - uint32_t _track; - uint32_t _track_size; + std::string _filename; + FILE* _fd; + uint16_t _type; + uint16_t _ppqn; + uint16_t _num_tracks; + uint32_t _track; + uint32_t _track_size; }; |