summaryrefslogtreecommitdiff
path: root/ptformat
diff options
context:
space:
mode:
authorDamien Zammit <damien@zamaudio.com>2019-06-16 14:20:28 +1000
committerDamien Zammit <damien@zamaudio.com>2019-06-16 14:20:28 +1000
commit63c344d9487923b90092cf02819df57efaf90206 (patch)
tree8e6bc154f59a4e71edfc1239c71a3c7dfc91a31e /ptformat
parentadece0fccf34cf23320d00a9590137ed5f081b7a (diff)
WIP region/track parsing && refactor
Diffstat (limited to 'ptformat')
-rw-r--r--ptformat/ptfformat.h33
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);