diff options
author | Damien Zammit <damien@zamaudio.com> | 2019-07-14 16:13:17 +1000 |
---|---|---|
committer | Damien Zammit <damien@zamaudio.com> | 2019-07-14 16:13:17 +1000 |
commit | 5e482128ff187b8a4b4a7ae61391ae580be90659 (patch) | |
tree | eb3d24efd181329220e0eacd9e619849c8e1bc86 | |
parent | 777686bcd5c333213451e3b5782fa263f10a12fe (diff) |
Drop fade regions that we don't know how to handle && fix samplerate scaling of offsets
-rw-r--r-- | ptformat.cc | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/ptformat.cc b/ptformat.cc index 33717d9..8768f57 100644 --- a/ptformat.cc +++ b/ptformat.cc @@ -915,6 +915,7 @@ PTFFormat::parserest(void) { uint32_t nch; uint16_t ch_map[MAX_CHANNELS_PER_TRACK]; bool found = false; + bool region_is_fade = false; std::string regionname, trackname, midiregionname; rindex = 0; @@ -1054,10 +1055,15 @@ PTFFormat::parserest(void) { for (vector<PTFFormat::block_t>::iterator c = b->child.begin(); c != b->child.end(); ++c) { if (c->content_type == 0x1052) { - regionname = parsestring(c->offset + 2); + trackname = parsestring(c->offset + 2); for (vector<PTFFormat::block_t>::iterator d = c->child.begin(); d != c->child.end(); ++d) { if (d->content_type == 0x1050) { + region_is_fade = (_ptfunxored[d->offset + 46] == 0x01); + if (region_is_fade) { + verbose_printf("dropped fade region\n"); + continue; + } for (vector<PTFFormat::block_t>::iterator e = d->child.begin(); e != d->child.end(); ++e) { if (e->content_type == 0x104f) { @@ -1076,7 +1082,7 @@ PTFFormat::parserest(void) { verbose_printf("dropped region %d\n", rawindex); continue; } - ti.reg.startpos = start; + ti.reg.startpos = start * _ratefactor; if (ti.reg.index != 65535) { _tracks.push_back(ti); } @@ -1257,7 +1263,7 @@ PTFFormat::parsemidi(void) { r.length = mc.maxlen; r.midi = mc.chunk; _midiregions.push_back(r); - verbose_printf("%s : MIDI region mr(%d) ?(%d) (%llu %llu %llu)\n", str, mindex, n, start, offset, length); + verbose_printf("%s : MIDI region mr(%d) ?(%d) (%lu %lu %lu)\n", regionname.c_str(), mindex, n, start, offset, length); mindex++; } } @@ -1302,7 +1308,7 @@ PTFFormat::parsemidi(void) { int64_t signedstart = (int64_t)(start - ZERO_TICKS); if (signedstart < 0) signedstart = -signedstart; - ti.reg.startpos = (uint64_t)signedstart; + ti.reg.startpos = (uint64_t)(signedstart * _ratefactor); if (ti.reg.index != 65535) { _miditracks.push_back(ti); } |