Rename track1 -> track, dump both track1/track2 indexes
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
@@ -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);
|
||||||
@@ -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.
|
||||||
Reference in New Issue
Block a user