根据Javadocs,当我使用javax.sound.sampledTargetDataLine
以下方法时:
public void open(AudioFormat format,int bufferSize)
其中说:
使用不满足此要求的请求缓冲区大小调用此方法可能会导致 IllegalArgumentException。`
因此,当我实现以下 Java 代码时:
AudioFormat format = getAudioFormat();
DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);
// open the TargetDataLine for capture.
try {
TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format, line.getBufferSize()+3000);
}
catch (LineUnavailableException ex)
{
ex.printStackTrace();
}
但是当我运行上面的代码时,它不会抛出任何异常。现在根据文档:
public int getBufferSize()
获取可放入数据线内部缓冲区的最大数据字节数。对于源数据线,这是可以写入数据的缓冲区的大小。对于目标数据线,它是可以从中读取数据的缓冲区的大小。请注意,使用的单位是字节,但始终对应于整数个音频数据的样本帧。
其中表示将返回最大尺寸,并且我添加了 3000
line.open(format, line.getBufferSize()+3000);
如上所示,为什么它不抛出任何异常?