Ich habe diesen Code:Wie wird der Soundkarten-Eingangsstrom mit einer Größe von 2 Bytes pro Sample gelesen? (Java)
final static AudioFormat format = new AudioFormat(48000, 16, 1, true, true);
TargetDataLine line;
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
line=(TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.start();
ByteArrayOutputStream out = new ByteArrayOutputStream();
int numBytesRead;
byte[] data = new byte[16040];
numBytesRead = line.read(data, 0, data.length);
Ich möchte 16-Bit-Samples Daten zu lesen, aber die Funktion line.read() erlaubt es mir nur 8-Bit-Daten, die durch variable Byte zu verwenden - wenn ich will es in int oder kurz ändern, es gibt mir einen Fehler. Was kann ich tun, um 16-Bit-Daten zu erhalten?
short[] shortArray = new shorts[data.lentgh/2];
ByteBuffer
.wrap(data)
.order(ByteOrder.LITTLE_ENDIAN)
.asShortBuffer()
.get(shortArray);
Und noch eine andere Lösung DataInputStream
verwenden, die eine Methode hat .readShort()
so können Sie 16-Bit-Daten direkt aus dem Stream lesen: