2017-12-17 6 views
0

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:

Antwort

0

Sie können Ihre Bytes mit ByteBuffer Klasse konvertieren.

Verwandte Themen