Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java I';m无法将TargetDataLine强制转换为行_Java_Audio - Fatal编程技术网

Java I';m无法将TargetDataLine强制转换为行

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

下面的程序我已经通过麦克风录制了5秒,然后它会自动重播。但是,将TargetDataLine强制转换为Audio.getLine()时出现错误。任何帮助都是非常感激的

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