Java soundApi录制错误

Java soundApi录制错误,java,audio,audio-recording,javasound,Java,Audio,Audio Recording,Javasound,我正试图用这段代码录制一个16khz单声道.wav文件 import java.io.File; import java.io.IOException; import javax.sound.sampled.AudioFileFormat; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; imp

我正试图用这段代码录制一个16khz单声道.wav文件

import java.io.File;
import java.io.IOException;

import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.TargetDataLine;

public class Main {

    public static void main(String[] args) {
        System.out.println("Say what you see..");

        try {
            AudioFormat format = new AudioFormat(
                    AudioFormat.Encoding.PCM_SIGNED, 16000, 8, 1, 4, 16000,
                    false);

            DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
            if (!AudioSystem.isLineSupported(info))
                System.out.println("Line not Supported");
            final TargetDataLine targetLine = (TargetDataLine) AudioSystem
                    .getLine(info);
            targetLine.open();

            System.out.println("Recording");
            targetLine.start();

            Thread thread = new Thread() {

                @Override
                public void run() {
                    AudioInputStream audioStream = new AudioInputStream(
                            targetLine);
                    File audioFile = new File("record.wav");
                    try {
                        AudioSystem.write(audioStream,
                                AudioFileFormat.Type.WAVE, audioFile);
                    } catch (IOException ioe) {
                        ioe.printStackTrace();
                    }
                    System.out.println("stopped recording");
                }

            };
            thread.start();
            Thread.sleep(5000);
            targetLine.stop();
            targetLine.close();
            System.out.println("Done");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
当我运行它时,总是会出现以下错误:

Line not Supported
java.lang.IllegalArgumentException: No line matching interface TargetDataLine supporting format PCM_SIGNED 16000.0 Hz, 8 bit, mono, 4 bytes/frame,  is supported.at javax.sound.sampled.AudioSystem.getLine(AudioSystem.java:476)at Main.main(Main.java:29)
ps:我用音频格式的不同参数对它进行了多次测试,只有在我尝试了立体声和44.1khz的这些参数后,它才起作用

AudioFormat format = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,44100,16,2,4,44100,false); 

您必须指定与
TargetDataLine
支持的格式之一匹配的
AudioFormat

例如,“我的Mac”上的麦克风支持:

“未知采样率”表示采样率无关紧要

我在这里看到的主要区别是,您指定的是每帧4个字节,对于8位mono,这应该是每帧1个字节。

@QA_Col请参阅我的答案