Rename track1 -> track, dump both track1/track2 indexes

This commit is contained in:
Adam
2017-04-03 19:05:48 -04:00
parent cafa2b3189
commit 2248dfd15f
3 changed files with 54 additions and 30 deletions

View File

@@ -24,7 +24,7 @@
*/ */
package net.runelite.cache.definitions; package net.runelite.cache.definitions;
public class Track1Definition public class TrackDefinition
{ {
public byte[] midi; // midi file contents public byte[] midi; // midi file contents
} }

View File

@@ -24,20 +24,20 @@
*/ */
package net.runelite.cache.definitions.loaders; 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.InputStream;
import net.runelite.cache.io.OutputStream; 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)); load(def, new InputStream(b));
return def; 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 // 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); var1.setOffset(var1.getLength() - 3);

View File

@@ -30,8 +30,8 @@ import java.io.FileInputStream;
import java.io.IOException; import java.io.IOException;
import javax.sound.midi.MidiSystem; import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequencer; import javax.sound.midi.Sequencer;
import net.runelite.cache.definitions.Track1Definition; import net.runelite.cache.definitions.TrackDefinition;
import net.runelite.cache.definitions.loaders.Track1Loader; import net.runelite.cache.definitions.loaders.TrackLoader;
import net.runelite.cache.fs.Archive; import net.runelite.cache.fs.Archive;
import net.runelite.cache.fs.Index; import net.runelite.cache.fs.Index;
import net.runelite.cache.fs.Store; import net.runelite.cache.fs.Store;
@@ -43,20 +43,22 @@ import org.junit.rules.TemporaryFolder;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; 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 @Rule
public TemporaryFolder folder = StoreLocation.getTemporaryFolder(); public TemporaryFolder folder = StoreLocation.getTemporaryFolder();
private final Djb2Manager djb2 = new Djb2Manager();
@Test @Test
public void test() throws IOException public void test() throws IOException
{ {
File dumpDir = folder.newFolder(); File dumpDir1 = folder.newFolder(),
int count = 0; dumpDir2 = folder.newFolder();
int idx1 = 0, idx2 = 0;
Djb2Manager djb2 = new Djb2Manager();
djb2.load(); djb2.load();
try (Store store = new Store(StoreLocation.LOCATION)) try (Store store = new Store(StoreLocation.LOCATION))
@@ -64,29 +66,51 @@ public class Track1DumperTest
store.load(); store.load();
Index index = store.getIndex(IndexType.TRACK1); Index index = store.getIndex(IndexType.TRACK1);
Index index2 = store.getIndex(IndexType.TRACK2);
for (Archive archive : index.getArchives()) for (Archive archive : index.getArchives())
{ {
assert archive.getFiles().size() == 1; dumpTrackArchive(dumpDir1, archive);
++idx1;
}
net.runelite.cache.fs.File file = archive.getFiles().get(0); for (Archive archive : index2.getArchives())
{
Track1Loader loader = new Track1Loader(); dumpTrackArchive(dumpDir2, archive);
Track1Definition def = loader.load(file.getContents()); ++idx2;
String name = djb2.getName(archive.getNameHash());
if (name == null)
{
name = "" + archive.getNameHash();
}
Files.write(def.midi, new File(dumpDir, name + ".midi"));
++count;
} }
} }
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 @Test
@@ -103,7 +127,7 @@ public class Track1DumperTest
try try
{ {
// create a stream from a file // 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. // Sets the current sequence on which the sequencer operates.
// The stream must point to MIDI file data. // The stream must point to MIDI file data.