public void LoadBAAFile(string filename, JAIVersion version) { WSYS = new WaveSystem[0xFF]; // None over 256 please :). IBNK = new InstrumentBank[0xFF]; // These either. var aafdata = File.ReadAllBytes(filename); // We're just going to load a whole copy into memory because we're lame -- having this buffer in memory makes it easy to pass as a ref to stream readers later. var aafRead = new BeBinaryReader(new MemoryStream(aafdata)); bool done = false; while (!done) { var ChunkID = aafRead.ReadUInt32(); long anchor; var name = convertChunkName(ChunkID); Console.WriteLine("[BAA] Found chunk: {0}", name); switch (ChunkID) { case 1046430017: // >_AA done = true; // either we're misalligned or done, so just stopo here. break; case 1094803260: // AA_< break; case 1651733536: // BST { var offset_sta = aafRead.ReadUInt32(); var offset_end = aafRead.ReadUInt32(); break; } case 1651733614: // BSTN { var offset_sta = aafRead.ReadUInt32(); var offset_end = aafRead.ReadUInt32(); break; } case 1651729184: // BSC { var offset_sta = aafRead.ReadUInt32(); var offset_end = aafRead.ReadUInt32(); break; } case 1651403552: // BNK { var id = aafRead.ReadUInt32(); var offset = aafRead.ReadUInt32(); anchor = aafRead.BaseStream.Position; // Store our return position. aafRead.BaseStream.Position = offset; // Seek to the offset pos. var b = new InstrumentBank(); b.LoadInstrumentBank(aafRead, version); // Load it up IBNK[id] = b; aafRead.BaseStream.Position = anchor; // Return back to our original pos after loading. break; } case 2004033568: // WSYS { var id = aafRead.ReadUInt32(); var offset = aafRead.ReadUInt32(); var flags = aafRead.ReadUInt32(); anchor = aafRead.BaseStream.Position; // Store our return position. aafRead.BaseStream.Position = offset; // Seek to the offset pos. var b = new WaveSystem(); b.LoadWSYS(aafRead); WSYS[id] = b; aafRead.BaseStream.Position = anchor; // Return back to our original pos after loading. break; } } } }
public void LoadAAFile(string filename, JAIVersion version) { WSYS = new WaveSystem[0xFF]; // None over 256 please :). IBNK = new InstrumentBank[0xFF]; // These either. var aafdata = File.ReadAllBytes(filename); // We're just going to load a whole copy into memory because we're lame -- having this buffer in memory makes it easy to pass as a ref to stream readers later. var aafRead = new BeBinaryReader(new MemoryStream(aafdata)); bool done = false; while (!done) { var ChunkID = aafRead.ReadUInt32(); long anchor; var name = convertChunkName(ChunkID); Console.WriteLine("[AAF] Found chunk: {0}", name); switch (ChunkID) { case 0: done = true; // either we're misalligned or done, so just stopo here. break; case 1: // Don't know case 5: case 4: case 6: case 7: aafRead.ReadUInt32(); aafRead.ReadUInt32(); aafRead.ReadUInt32(); break; case 2: // INST case 3: // WSYS { while (true) { var offset = aafRead.ReadUInt32(); if (offset == 0) { break; // 0 means we reached the end. } var size = aafRead.ReadUInt32(); var type = aafRead.ReadUInt32(); anchor = aafRead.BaseStream.Position; // Store our return position. aafRead.BaseStream.Position = offset; // Seek to the offset pos. if (ChunkID == 3) { var b = new WaveSystem(); // Load the wavesystem b.LoadWSYS(aafRead); WSYS[b.id] = b; // store it Console.WriteLine("\t WSYS at 0x{0:X}", offset); } else if (ChunkID == 2) { var x = new InstrumentBank(); x.LoadInstrumentBank(aafRead, version); Console.WriteLine("\t IBNK at 0x{0:X}", offset); IBNK[x.id] = x; // Store it } aafRead.BaseStream.Position = anchor; // Return back to our original pos after loading. } break; } } } }