diff options
author | Damien Zammit <damien@zamaudio.com> | 2019-06-16 14:20:28 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2019-06-16 14:20:28 +1000 |
commit | 63c344d9487923b90092cf02819df57efaf90206 (patch) | |
tree | 8e6bc154f59a4e71edfc1239c71a3c7dfc91a31e /ptformat | |
parent | adece0fccf34cf23320d00a9590137ed5f081b7a (diff) |
WIP region/track parsing && refactor
Diffstat (limited to 'ptformat')
-rw-r--r-- | ptformat/ptfformat.h | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/ptformat/ptfformat.h b/ptformat/ptfformat.h index 3cb7d9a..3b1b5cb 100644 --- a/ptformat/ptfformat.h +++ b/ptformat/ptfformat.h @@ -31,6 +31,7 @@ #define BITCODE "0010111100101011" #define ZMARK '\x5a' #define MAX_CONTENT_TYPE 0x3000 +#define MAX_CHANNELS_PER_TRACK 8 class LIBPTFORMAT_API PTFFormat { public: @@ -131,6 +132,36 @@ public: std::vector<track_t> tracks; std::vector<track_t> miditracks; + bool find_region(uint16_t index, std::vector<region_t>::iterator& ri) { + std::vector<region_t>::iterator begin = regions.begin(); + std::vector<region_t>::iterator finish = regions.end(); + std::vector<region_t>::iterator found; + + wav_t w = { std::string(""), 0, 0, 0 }; + std::vector<midi_ev_t> m; + region_t r = { std::string(""), index, 0, 0, 0, w, m}; + + if ((found = std::find(begin, finish, r)) != finish) { + ri = found; + return true; + } + return false; + } + + bool find_wav(uint16_t index, std::vector<wav_t>::iterator& wi) { + std::vector<wav_t>::iterator begin = audiofiles.begin(); + std::vector<wav_t>::iterator finish = audiofiles.end(); + std::vector<wav_t>::iterator found; + + wav_t w = { std::string(""), index, 0, 0 }; + + if ((found = std::find(begin, finish, w)) != finish) { + wi = found; + return true; + } + return false; + } + static bool regionexistsin(std::vector<region_t> reg, uint16_t index) { std::vector<region_t>::iterator begin = reg.begin(); std::vector<region_t>::iterator finish = reg.end(); @@ -194,6 +225,8 @@ private: bool parse_block_at(uint32_t pos, struct block_t *b, int level); void dump_block(struct block_t& b, int level); bool parse_version(); + void parse_region_info(uint32_t j, block_t& blk, region_t& r); + void parse_three_point(uint32_t j, uint64_t& start, uint64_t& offset, uint64_t& length); uint8_t gen_xor_delta(uint8_t xor_value, uint8_t mul, bool negative); void setrates(void); void cleanup(void); |