summaryrefslogtreecommitdiff
path: root/ptfformat.cc
diff options
context:
space:
mode:
Diffstat (limited to 'ptfformat.cc')
-rw-r--r--ptfformat.cc34
1 files changed, 32 insertions, 2 deletions
diff --git a/ptfformat.cc b/ptfformat.cc
index f0c9793..652024e 100644
--- a/ptfformat.cc
+++ b/ptfformat.cc
@@ -128,6 +128,10 @@ PTFFormat::load(std::string path, int64_t targetsr) {
fread(&c0, 1, 1, fp);
fread(&c1, 1, 1, fp);
+ // For version 7 support:
+ version = c0 & 0x0f;
+ c0 = c0 & 0xc0;
+
if (! (ptfunxored = (unsigned char*) malloc(len * sizeof(unsigned char)))) {
/* Silently fail -- out of memory*/
fclose(fp);
@@ -290,9 +294,14 @@ PTFFormat::unxor10(void)
void
PTFFormat::parse(void) {
- version = ptfunxored[61];
+ version = (version == 0) ? ptfunxored[61] : version;
- if (version == 8) {
+ if (version == 7) {
+ parse7header();
+ setrates();
+ parseaudio();
+ parserest89();
+ } else if (version == 8) {
parse8header();
setrates();
parseaudio();
@@ -322,6 +331,27 @@ PTFFormat::setrates(void) {
}
void
+PTFFormat::parse7header(void) {
+ int k;
+
+ // Find session sample rate
+ k = 0x100;
+ while (k < len) {
+ if ( (ptfunxored[k ] == 0x5a) &&
+ (ptfunxored[k+1] == 0x00) &&
+ (ptfunxored[k+2] == 0x05)) {
+ break;
+ }
+ k++;
+ }
+
+ sessionrate = 0;
+ sessionrate |= ptfunxored[k+12] << 16;
+ sessionrate |= ptfunxored[k+13] << 8;
+ sessionrate |= ptfunxored[k+14];
+}
+
+void
PTFFormat::parse8header(void) {
int k;