当前位置:首页 > Java

如何利用java录音

2026-03-24 07:11:52Java

使用Java进行录音的基本步骤

Java提供了javax.sound.sampled包来处理音频录制和播放功能。以下是一个简单的录音实现方法,适用于大多数标准音频输入设备(如麦克风)。

设置音频格式

音频格式定义了采样率、样本大小、通道数等参数。常见的格式如下:

如何利用java录音

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格式):

如何利用java录音

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录音功能,适用于简单的音频采集需求。

标签: java
分享给朋友:

相关文章

java如何上传文件

java如何上传文件

使用HttpURLConnection上传文件 在Java中,可以通过HttpURLConnection实现文件上传功能。需要设置请求头为multipart/form-data,并构建包含文件数据的请…

java如何删除文件

java如何删除文件

删除文件的基本方法 使用 java.io.File 类的 delete() 方法可以删除文件。如果文件存在且删除成功,返回 true;否则返回 false。 import java.io.Fil…

java如何产生随机数

java如何产生随机数

使用 Math.random() 方法 Math.random() 生成一个范围在 [0.0, 1.0) 的伪随机 double 值。通过缩放和偏移可以生成指定范围的随机数。 double ra…

如何搭建java开发环境

如何搭建java开发环境

下载并安装JDK 从Oracle官网或OpenJDK下载适合操作系统的JDK版本。运行安装程序并按照提示完成安装,建议选择默认路径以减少配置复杂度。 配置环境变量 在系统环境变量中添加JAVA_HO…

java如何避免死锁

java如何避免死锁

避免死锁的方法 固定顺序获取锁 确保所有线程按照相同的顺序获取多个锁。例如,若需要获取锁A和锁B,所有线程必须先获取A再获取B,避免交叉依赖导致的死锁。这种方式破坏了“循环等待”条件。 使用锁超时机…

java程序如何打包

java程序如何打包

打包Java程序的方法 使用JAR打包 Java程序可以通过JAR(Java Archive)格式打包,这是一种常见的压缩格式,适用于包含多个类文件和资源的项目。以下是使用JAR打包的步骤: 确保项…