我正在使用 Java Sound API 通过麦克风录制音频。音频文件被录制并存储在“/root/RecFiles/”位置。但是当我尝试播放录制的音频文件时,录制的声音不会从耳机/扬声器中发出。
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.LineUnavailableException;
import javax.sound.sampled.TargetDataLine;
public class RecordingTest {
static final long RECORD_TIME = 6000;
File wavFile = new File("/root/RecFiles/RecordedFile.wav");
AudioFileFormat.Type fileType = AudioFileFormat.Type.WAVE;
TargetDataLine line;
AudioFormat getAudioFormat() {
float sampleRate = 8000;
int sampleSizeInBits = 16;
int channels = 1;
boolean signed = true;
boolean be= true;
AudioFormat format = new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, be);
return format;
}
void start() {
try {
AudioFormat format = getAudioFormat();
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
if (!AudioSystem.isLineSupported(info)) {
System.out.println("Line not supported");
System.exit(0);
}
line = (TargetDataLine) AudioSystem.getTargetDataLine(format);
line.open(format);
line.start();
System.out.println("Start capturing...");
AudioInputStream ais = new AudioInputStream(line);
System.out.println("Start recording");
System.out.println("isline open : " + line.isOpen());
System.out.println("isFileFOrmat support: " + AudioSystem.isFileTypeSupported(fileType));
int recordResult = AudioSystem.write(ais, fileType, wavFile);
System.out.println("writeResult : " + recordResult);
} catch (LineUnavailableException ex) {
ex.printStackTrace();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
void finish() {
line.stop();
line.close();
System.out.println("Finished");
}
public static void main(String[] args) {
final RecordingTest recorder = new RecordingTest();
Thread stopper = new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(RECORD_TIME);
} catch (InterruptedException ex) {
ex.printStackTrace();
}
recorder.finish();
}
});
stopper.start();
recorder.start();
}
}
执行上述代码后,该位置的文件如下:
-rw-r--r--。 1 root root 78654 六月 11 10:47 RecordedFile.wav
操作系统:centos6
java版本:1.8
提前致谢。
最佳答案
问题很可能是您只完成了一次写入,因此仅存储了记录的裸露开头。返回值recordResult
将显示记录的字节数。它与每秒 16000 字节的预期值相比如何? (8000 fps x 每帧 2 字节)
write
命令应该放置在某种循环中。使用 while
循环和一个 boolean
来指示何时停止是处理录音的常见方法。
关于java - 为什么我无法收听录音文件内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62330836/