如何利用java录音
使用Java进行录音的基本步骤
Java提供了javax.sound.sampled包来处理音频录制和播放功能。以下是一个简单的录音实现方法,适用于大多数标准音频输入设备(如麦克风)。
设置音频格式
音频格式定义了采样率、样本大小、通道数等参数。常见的格式如下:

AudioFormat audioFormat = new AudioFormat(
44100.0F, // 采样率(Hz)
16, // 样本位数(bit)
2, // 通道数(立体声)
true, // 是否带符号
false // 是否大端存储
);
获取目标数据线(麦克风输入)
通过AudioSystem获取可用的音频输入设备:
DataLine.Info info = new DataLine.Info(TargetDataLine.class, audioFormat);
TargetDataLine targetDataLine = (TargetDataLine) AudioSystem.getLine(info);
targetDataLine.open(audioFormat);
targetDataLine.start();
读取音频数据并保存
使用ByteArrayOutputStream临时存储音频数据,或直接写入文件(如WAV格式):

ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
while (isRecording) {
bytesRead = targetDataLine.read(buffer, 0, buffer.length);
outputStream.write(buffer, 0, bytesRead);
}
// 保存为WAV文件
AudioSystem.write(
new AudioInputStream(targetDataLine),
AudioFileFormat.Type.WAVE,
new File("output.wav")
);
停止录音
关闭数据线并释放资源:
targetDataLine.stop();
targetDataLine.close();
outputStream.close();
完整示例代码
以下是一个完整的录音程序,录音持续5秒后自动保存:
import javax.sound.sampled.*;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
public class AudioRecorder {
public static void main(String[] args) {
try {
AudioFormat format = new AudioFormat(44100.0F, 16, 2, true, false);
DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);
TargetDataLine line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format);
line.start();
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int bytesRead;
System.out.println("Recording...");
long startTime = System.currentTimeMillis();
while (System.currentTimeMillis() - startTime < 5000) { // 录制5秒
bytesRead = line.read(buffer, 0, buffer.length);
out.write(buffer, 0, bytesRead);
}
line.stop();
line.close();
byte[] audioData = out.toByteArray();
AudioSystem.write(
new AudioInputStream(
new ByteArrayInputStream(audioData),
format,
audioData.length / format.getFrameSize()
),
AudioFileFormat.Type.WAVE,
new File("recorded.wav")
);
System.out.println("Recording saved.");
} catch (LineUnavailableException | IOException e) {
e.printStackTrace();
}
}
}
注意事项
- 音频格式兼容性:不同的操作系统和硬件可能支持的格式不同,需测试调整采样率或位数。
- 权限问题:某些系统(如Linux)可能需要额外权限才能访问麦克风。
- 异常处理:确保捕获
LineUnavailableException等异常,避免程序崩溃。
通过以上方法,可以实现基本的Java录音功能,适用于简单的音频采集需求。






