Java 录音代码:使用 Java Sound API 捕捉音频253


Java 提供了 Java Sound API,这是一组用于处理音频数据的类和接口。利用此 API,Java 程序员可以轻松地捕捉和录制音频数据。

记录音频

要使用 Java 录制音频,首先需要创建 AudioSystem 实例,然后使用 getLine 方法获取代表目标音频设备的 TargetDataLine。

import ;
import .*;
public class JavaSoundRecorder {
public static void main(String[] args) {
// 目标采样率 (Hz)
float sampleRate = 44100f;
// 样本大小 (位)
int sampleSizeInBits = 16;
// 通道数 (1 = 单声道,2 = 立体声)
int channels = 1;
// 音频格式
AudioFormat audioFormat = new AudioFormat(sampleRate, sampleSizeInBits, channels, true, false);
// 获取目标音频设备
TargetDataLine targetDataLine = null;
try {
targetDataLine = (TargetDataLine) (.TARGET_DATA_LINE, audioFormat);
} catch (LineUnavailableException e) {
();
(1);
}
// 打开并开始录制
try {
(audioFormat);
();
} catch (LineUnavailableException | IllegalArgumentException e) {
();
(1);
}
// 录制时间 (毫秒)
int recordTime = 5000;
// 缓冲区大小
int bufferSize = 4096;
// 缓冲区
byte[] buffer = new byte[bufferSize];
// 存储录制数据的字节数组
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
// 录制音频数据
long startTime = ();
while (() - startTime < recordTime) {
int numBytesRead = (buffer, 0, bufferSize);
(buffer, 0, numBytesRead);
}
// 停止录制
();
();
// 获取录制数据的字节数组
byte[] recordedData = ();
// 关闭字节数组输出流
();
// 打印录制数据的字节数组
((recordedData));
}
}


播放录制的数据

要播放录制的音频数据,可以使用 AudioInputStream 和 Clip。首先,创建 AudioInputStream 实例,该实例引用一个包含录制数据的字节数组。然后,使用 AudioSystem 实例创建 Clip,该 Clip 会播放 AudioInputStream 中的音频数据。

// 创建 AudioInputStream
AudioInputStream audioInputStream = (new ByteArrayInputStream(recordedData));
// 创建 Clip
Clip clip = ();
// 打开并开始播放
(audioInputStream);
();


控制录音

Java Sound API 提供了多种方法来控制录音。您可以使用 TargetDataLine 实例的方法:

start() 和 stop():开始和停止录制
getFormat():获取录音格式
getBufferSize() 和 setBufferSize():获取和设置缓冲区大小

最佳实践

以下是一些使用 Java Sound API 录制音频的最佳做法:

使用适当的采样率和样本大小
缓冲区大小应足够大以防止数据丢失,但又不能太大以至于产生延迟
使用单独的线程进行录制,以避免与 GUI 交互冲突
正确处理音频格式和编码转换

2024-12-02


上一篇:如何判断 Java 中的字符编码格式?

下一篇:自动化 Java 方法:逐步指南