当前位置:首页 > Java

如何利用java录音

2026-03-24 07:11:52Java

使用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秒后自动保存:

如何利用java录音

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如何运行

运行Java程序的基本方法 Java程序的运行需要经过编写、编译和执行三个主要阶段。以下是具体步骤: 编写Java源代码 创建一个以.java为后缀的文件,例如HelloWorld.java。文件内…

java如何获取当前时间

java如何获取当前时间

获取当前时间的方法 在Java中,可以通过多种方式获取当前时间。以下是几种常见的方法: 使用 java.util.Date Date currentDate = new Date(); Syste…

如何安装java软件

如何安装java软件

下载Java安装包 访问Oracle官方网站或OpenJDK开源项目页面,选择适合操作系统的Java版本(如Windows、macOS或Linux)。对于个人使用,通常下载JDK(Java Devel…

java如何打印数组

java如何打印数组

打印数组的方法 在Java中,打印数组有多种方式,以下是几种常见的方法: 使用Arrays.toString()方法 这种方法适用于一维数组,可以快速将数组转换为字符串形式输出: int[] a…

如何升级java

如何升级java

检查当前Java版本 在升级之前,需确认当前安装的Java版本。在终端或命令提示符中运行以下命令: java -version 输出会显示当前Java版本(如1.8.0_301或17.0.2)。…

java如何调用另一个类的方法

java如何调用另一个类的方法

调用另一个类的方法 在Java中调用另一个类的方法,通常需要创建该类的对象或直接通过类名调用(静态方法)。以下是几种常见的方式: 通过对象实例调用实例方法 创建一个目标类的对象,通过对象调用其方法。…