我有这段代码:
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位数据?
答案 0 :(得分:0)
您可以使用ByteBuffer
类转换字节:
short[] shortArray = new shorts[data.lentgh / 2];
ByteBuffer
.wrap(data)
.order(ByteOrder.LITTLE_ENDIAN)
.asShortBuffer()
.get(shortArray);
另一个解决方案是使用DataInputStream
,其方法为.readShort()
,因此您可以直接从流中读取16位数据。