Java I';m无法将TargetDataLine强制转换为行
下面的程序我已经通过麦克风录制了5秒,然后它会自动重播。但是,将TargetDataLine强制转换为Audio.getLine()时出现错误。任何帮助都是非常感激的Java I';m无法将TargetDataLine强制转换为行,java,audio,Java,Audio,下面的程序我已经通过麦克风录制了5秒,然后它会自动重播。但是,将TargetDataLine强制转换为Audio.getLine()时出现错误。任何帮助都是非常感激的 public class Audio3 { public static void main(String[] args) throws LineUnavailableException, InterruptedException { AudioFormat format = new AudioFormat(Au
public class Audio3 {
public static void main(String[] args) throws LineUnavailableException, InterruptedException {
AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, 44100, 16, 2, 4, 44100, false);
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
final SourceDataLine sourceLine = (SourceDataLine)AudioSystem.getLine(info);
sourceLine.open();
info = new DataLine.Info(SourceDataLine.class, format);
final TargetDataLine targetLine = (TargetDataLine) AudioSystem.getLine(info);
targetLine.open();
final ByteArrayOutputStream out = new ByteArrayOutputStream();
Thread sourceThread = new Thread() {
@Override
public void run() {
sourceLine.start();
while(true) {
//out.size() also works fine
sourceLine.write(out.toByteArray(), 0, out.toByteArray().length);
}
}
};
Thread targetThread = new Thread() {
@Override
public void run() {
targetLine.start();
byte[] data = new byte[targetLine.getBufferSize() / 5];
int readBytes;
while(true) {
readBytes = targetLine.read(data, 0, data.length);
out.write(data, 0, readBytes);
}
}
};
}
}
将
SourceDataLine.class
更改为TargetDataLine.class
:
info=newdataline.info(TargetDataLine.class,格式);//改变
最终TargetDataLine targetLine=(TargetDataLine)AudioSystem.getLine(info);
targetLine.open();