如何读取每个样本大小为2个字节的声卡输入流? (JAVA)

问题描述 投票:0回答:1

我有这个代码:

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);

我想读取16位采样数据,但函数line.read()只允许我通过变量字节使用8位数据 - 当我想将其更改为int或short时,它会给我一个错误。我该怎么做才能获得16位数据?

java variables audio sample soundcard
1个回答
0
投票

您可以使用ByteBuffer类转换您的字节:

short[] shortArray = new shorts[data.lentgh / 2]; 
ByteBuffer            
   .wrap(data)
   .order(ByteOrder.LITTLE_ENDIAN)
   .asShortBuffer()
   .get(shortArray);

而另一个解决方案是使用DataInputStream,它有一个方法.readShort(),所以你可以直接从你的流读取16位数据。

© www.soinside.com 2019 - 2024. All rights reserved.