Ich möchte einen AudioInputStream einmal von der Festplatte laden und danach beliebig viele Male abspielen, auch parallel. Dazu brauch ich die Daten des Streams irgendwie als Variable, auf einen Stream parallel aus mehreren Threads zuzugreifen klingt eher schlecht
Nur wie krieg ich eine Kopie, der Daten aus dem AudioInputStream ?
ich dachte an sowas:
Nur die Länge bestimmen klappt nicht, weil AudioInputStream.getFramelength() -1 zurückliefert...
Und wenn ich diese Klasse verwende, um AudioInputStream.read zu ersetzen, dann spielt keine Musik mehr :S
Nur wie krieg ich eine Kopie, der Daten aus dem AudioInputStream ?
ich dachte an sowas:
Java:
package soundSys;
import java.io.IOException;
import javax.sound.sampled.*;
public class SoundData {
private byte[] data;
private int position = 0;
public SoundData(int length, AudioInputStream in) {
data = new byte[2304];
try {
System.out.println("Bytes read:" + in.read(data));
} catch (IOException e) {
e.printStackTrace();
}
}
public int read(byte[] b, int off, int len) {
int result = 0;
int tmpP = position + off;
if (len + tmpP <= data.length) {
result = len;
} else {
result = data.length - tmpP;
}
b = new byte[result];
System.arraycopy(data, tmpP, b, 0, result);
position += result;
return result;
}
public void reset() {
position = 0;
}
}
Nur die Länge bestimmen klappt nicht, weil AudioInputStream.getFramelength() -1 zurückliefert...
Und wenn ich diese Klasse verwende, um AudioInputStream.read zu ersetzen, dann spielt keine Musik mehr :S