Hi! Um mein Problem kurz zu beschreiben:
Hab eine Datei, die implizit aus mehreren *.wav Dateien besteht.
Wenn ich diese Datei nun in Java einlese, an bestimmten Punkten splitte und diese einzelnen Splits als neue *.wav-Dateien rausschreibe, so geht mir ein wenig Information verloren. Die waves hören sich dadurch etwas "scrambled" und nicht klar an. Ich weiß aber nicht woran das liegt :confused:
Zum Glück hab ich eine (klare) Referenz-Ouput-Wave Datei. Wenn ich diese Datei in einem HEX-Editor öffne und mit dem äquivalenten Output-Pendant meines Programmes im HEX-Editor vergleiche, so stelle ich kleine Unterschiede fest:
Alle HEX-Blöcke die im guten File "90" sind, sind in meinem Output "BF" (BF = ?)
Auch alle "89"er im Guten sind in meinem "BF"
"9B" im Guten ist ebenfalls "BF" bei meinem Output
Das gilt auch für 91er, vielleicht auch noch für ein paar wenige andere.
Sonst stimmt die Datei großteils überein, darum kann man sich meine waves ja auch noch anhören, man erkennt sie auch, sie sind halt etwas vermurkst durch diese ungleichen Sektoren.
Kann mir jemand helfen, woran liegt das?
Hier noch mein Source, ist nicht wirklich lang:
public static void main(String[] args) {
File f = new File("input");
try
{
byte[] b = getBytesFromFile(f);
String s = new [B]String(b)[/B];
String[] parts = s.split("RIFF4");
for(int i=0;i<parts.length;i++)
{
parts[i] = "RIFF4"+parts[i];
byte[] targetBytes = parts[i].getBytes();
String fName = "teil" + i + ".wav";
FileOutputStream fos = new FileOutputStream(fName);
fos.write(targetBytes);
fos.flush();
fos.close();
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public static byte[] getBytesFromFile(File file) throws IOException {
InputStream is = new FileInputStream(file);
long length = file.length();
if (length > Integer.MAX_VALUE) {
// File is too large
}
byte[] bytes = new byte[(int)length];
int offset = 0;
int numRead = 0;
while (offset < bytes.length
&& (numRead=is.read(bytes, offset, bytes.length-offset)) >= 0) {
offset += numRead;
}
if (offset < bytes.length) {
throw new IOException("Could not completely read file "+file.getName());
}
is.close();
return bytes;
}
Alles anzeigen
Hab auch ein wenig mit Encodings bei der FETT-markierten Stelle rumgespielt, das verschlechtert die Sache aber eher noch.
:confused: Jemand Rat parat :confused: