From 2248dfd15fb64b82053111b228adeaf1cc1bfe29 Mon Sep 17 00:00:00 2001 From: Adam Date: Mon, 3 Apr 2017 19:05:48 -0400 Subject: [PATCH] Rename track1 -> track, dump both track1/track2 indexes --- ...k1Definition.java => TrackDefinition.java} | 2 +- .../{Track1Loader.java => TrackLoader.java} | 10 +-- ...k1DumperTest.java => TrackDumperTest.java} | 72 ++++++++++++------- 3 files changed, 54 insertions(+), 30 deletions(-) rename cache/src/main/java/net/runelite/cache/definitions/{Track1Definition.java => TrackDefinition.java} (97%) rename cache/src/main/java/net/runelite/cache/definitions/loaders/{Track1Loader.java => TrackLoader.java} (97%) rename cache/src/test/java/net/runelite/cache/{Track1DumperTest.java => TrackDumperTest.java} (68%) diff --git a/cache/src/main/java/net/runelite/cache/definitions/Track1Definition.java b/cache/src/main/java/net/runelite/cache/definitions/TrackDefinition.java similarity index 97% rename from cache/src/main/java/net/runelite/cache/definitions/Track1Definition.java rename to cache/src/main/java/net/runelite/cache/definitions/TrackDefinition.java index fc2244691a..33007ce073 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/Track1Definition.java +++ b/cache/src/main/java/net/runelite/cache/definitions/TrackDefinition.java @@ -24,7 +24,7 @@ */ package net.runelite.cache.definitions; -public class Track1Definition +public class TrackDefinition { public byte[] midi; // midi file contents } diff --git a/cache/src/main/java/net/runelite/cache/definitions/loaders/Track1Loader.java b/cache/src/main/java/net/runelite/cache/definitions/loaders/TrackLoader.java similarity index 97% rename from cache/src/main/java/net/runelite/cache/definitions/loaders/Track1Loader.java rename to cache/src/main/java/net/runelite/cache/definitions/loaders/TrackLoader.java index 0eef88bd6d..2496ccff05 100644 --- a/cache/src/main/java/net/runelite/cache/definitions/loaders/Track1Loader.java +++ b/cache/src/main/java/net/runelite/cache/definitions/loaders/TrackLoader.java @@ -24,20 +24,20 @@ */ package net.runelite.cache.definitions.loaders; -import net.runelite.cache.definitions.Track1Definition; +import net.runelite.cache.definitions.TrackDefinition; import net.runelite.cache.io.InputStream; import net.runelite.cache.io.OutputStream; -public class Track1Loader +public class TrackLoader { - public Track1Definition load(byte[] b) + public TrackDefinition load(byte[] b) { - Track1Definition def = new Track1Definition(); + TrackDefinition def = new TrackDefinition(); load(def, new InputStream(b)); return def; } - private void load(Track1Definition def, InputStream var1) + private void load(TrackDefinition def, InputStream var1) { // Some of the names are from https://www.rune-server.ee/runescape-development/rs-503-client-server/snippets/311669-rs-music-file-structure-conversion.html var1.setOffset(var1.getLength() - 3); diff --git a/cache/src/test/java/net/runelite/cache/Track1DumperTest.java b/cache/src/test/java/net/runelite/cache/TrackDumperTest.java similarity index 68% rename from cache/src/test/java/net/runelite/cache/Track1DumperTest.java rename to cache/src/test/java/net/runelite/cache/TrackDumperTest.java index 3954d68faf..576f9e6d3d 100644 --- a/cache/src/test/java/net/runelite/cache/Track1DumperTest.java +++ b/cache/src/test/java/net/runelite/cache/TrackDumperTest.java @@ -30,8 +30,8 @@ import java.io.FileInputStream; import java.io.IOException; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequencer; -import net.runelite.cache.definitions.Track1Definition; -import net.runelite.cache.definitions.loaders.Track1Loader; +import net.runelite.cache.definitions.TrackDefinition; +import net.runelite.cache.definitions.loaders.TrackLoader; import net.runelite.cache.fs.Archive; import net.runelite.cache.fs.Index; import net.runelite.cache.fs.Store; @@ -43,20 +43,22 @@ import org.junit.rules.TemporaryFolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -public class Track1DumperTest +public class TrackDumperTest { - private static final Logger logger = LoggerFactory.getLogger(Track1DumperTest.class); + private static final Logger logger = LoggerFactory.getLogger(TrackDumperTest.class); @Rule public TemporaryFolder folder = StoreLocation.getTemporaryFolder(); + private final Djb2Manager djb2 = new Djb2Manager(); + @Test public void test() throws IOException { - File dumpDir = folder.newFolder(); - int count = 0; + File dumpDir1 = folder.newFolder(), + dumpDir2 = folder.newFolder(); + int idx1 = 0, idx2 = 0; - Djb2Manager djb2 = new Djb2Manager(); djb2.load(); try (Store store = new Store(StoreLocation.LOCATION)) @@ -64,29 +66,51 @@ public class Track1DumperTest store.load(); Index index = store.getIndex(IndexType.TRACK1); + Index index2 = store.getIndex(IndexType.TRACK2); for (Archive archive : index.getArchives()) { - assert archive.getFiles().size() == 1; + dumpTrackArchive(dumpDir1, archive); + ++idx1; + } - net.runelite.cache.fs.File file = archive.getFiles().get(0); - - Track1Loader loader = new Track1Loader(); - Track1Definition def = loader.load(file.getContents()); - - String name = djb2.getName(archive.getNameHash()); - if (name == null) - { - name = "" + archive.getNameHash(); - } - - Files.write(def.midi, new File(dumpDir, name + ".midi")); - - ++count; + for (Archive archive : index2.getArchives()) + { + dumpTrackArchive(dumpDir2, archive); + ++idx2; } } - logger.info("Dumped {} sound tracks to {}", count, dumpDir); + logger.info("Dumped {} sound tracks ({} idx1, {} idx2) to {} and {}", idx1 + idx2, idx1, idx2, dumpDir1, dumpDir2); + } + + private void dumpTrackArchive(File dumpDir, Archive archive) throws IOException + { + assert archive.getFiles().size() == 1; + + net.runelite.cache.fs.File file = archive.getFiles().get(0); + + TrackLoader loader = new TrackLoader(); + TrackDefinition def = loader.load(file.getContents()); + + String name; + if (archive.getNameHash() > 0) + { + name = djb2.getName(archive.getNameHash()); + if (name == null) + { + name = "name-" + archive.getNameHash(); + } + } + else + { + name = "archive-" + archive.getArchiveId(); + } + + File dest = new File(dumpDir, name + ".midi"); + assert !dest.exists(); + + Files.write(def.midi, dest); } @Test @@ -103,7 +127,7 @@ public class Track1DumperTest try { // create a stream from a file - java.io.InputStream is = new FileInputStream(new File("C:\\rs\\cache\\track1\\scape main.midi")); + java.io.InputStream is = new FileInputStream(new File("D:\\rs\\07\\cache\\track1\\name-687938017.midi")); // Sets the current sequence on which the sequencer operates. // The stream must point to MIDI file data.