android AudioRecord

AudioRecord是Android中用于音频录制的类,它的主要作用是捕获来自设备麦克风或其他音频源的音频数据,并将其保存为PCM格式的音频流,以供后续处理或存储。

以下是关于AudioRecord的一些常见用途和基本使用方法:

作用和用途:

音频录制:AudioRecord可以用于录制来自麦克风、耳机麦克风或其他音频输入源的音频。这在开发语音通话、语音识别、音频笔记、音频流媒体等应用中非常有用。

声音分析:通过捕获音频数据,你可以进行声音分析,如检测音频的频谱、音量、音调等特征,用于声音处理和分析应用。

实时音频处理:你可以将录制的音频数据传递给其他音频处理库或自定义算法,以进行实时音频处理,如降噪、回声消除、音频效果等。

音频存储:你可以将录制的音频数据保存为音频文件,例如.wav或.mp3,以便后续播放或分享。

需要权限:

复制代码
<uses-permission android:name="android.permission.RECORD_AUDIO"/>

工具类:

java 复制代码
package com.realtop.translatemodule.utils;

import android.annotation.SuppressLint;
import android.media.AudioFormat;
import android.media.AudioRecord;
import android.media.MediaRecorder;
import android.util.Log;

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.security.auth.login.LoginException;

public class AudioRecordUtils {

    private static final String TAG = "AudioRecordActivity";
    private static final int SAMPLE_RATE = 16000; // 采样率为16K
    private static final int CHANNEL_CONFIG = AudioFormat.CHANNEL_IN_MONO;
    private static final int AUDIO_FORMAT = AudioFormat.ENCODING_PCM_16BIT;
    private static final int BUFFER_SIZE = AudioRecord.getMinBufferSize(SAMPLE_RATE, CHANNEL_CONFIG, AUDIO_FORMAT);
    private AudioRecord audioRecord;
    private boolean isRecording = false;
    private Thread recordingThread;
    private FileOutputStream fileOutputStream;

    @SuppressLint("MissingPermission")
    public synchronized void startRecording(String filePath) {
        if (isRecording) {
            Log.i(TAG, "startRecording: ing stop enter");
            return;
        }
        isRecording = true;
        // 初始化 AudioRecord 对象
        audioRecord = new AudioRecord(
                MediaRecorder.AudioSource.VOICE_COMMUNICATION,
                SAMPLE_RATE,
                CHANNEL_CONFIG,
                AUDIO_FORMAT,
                BUFFER_SIZE
        );

        audioRecord.startRecording();

        // 初始化输出文件
        try {
            fileOutputStream = new FileOutputStream(filePath, true);
        } catch (FileNotFoundException e) {
            Log.i(TAG, "startRecording: error:" + e.getMessage());
        }

        recordingThread = new Thread(() -> {
            byte[] buffer = new byte[BUFFER_SIZE];
            while (isRecording) {
                int bytesRead = audioRecord.read(buffer, 0, BUFFER_SIZE);
                if (bytesRead != AudioRecord.ERROR_INVALID_OPERATION) {
                    try {
                        fileOutputStream.write(buffer, 0, bytesRead);
                    } catch (IOException e) {
                        Log.i(TAG, "startRecording: error:" + e.getMessage());
                    }
                }
            }
            Log.i(TAG, "startRecording: record thread end");
        });
        recordingThread.start();
        Log.i(TAG, "startRecording: start");
    }


    public synchronized void stopRecording() {
        if (!isRecording) {
            Log.i(TAG, "stopRecording: end ing");
            return;
        }
        isRecording = false;
        try {
            recordingThread.join(); // 精华部分
            audioRecord.stop();
            fileOutputStream.close();
            audioRecord.release();
            Log.i(TAG, "stopRecording: end");
        } catch (Exception e) {
            e.printStackTrace();
            Log.i(TAG, "stopRecording: error:" + e.getMessage());
        }
    }

}
相关推荐
lxysbly1 小时前
md模拟器安卓版带金手指2026
android
儿歌八万首2 小时前
硬核春节:用 Compose 打造“赛博鞭炮”
android·kotlin·compose·春节
消失的旧时光-19434 小时前
从 Kotlin 到 Dart:为什么 sealed 是处理「多种返回结果」的最佳方式?
android·开发语言·flutter·架构·kotlin·sealed
Jinkxs5 小时前
Gradle - 与Groovy/Kotlin DSL对比 构建脚本语言选择指南
android·开发语言·kotlin
&有梦想的咸鱼&5 小时前
Kotlin委托机制的底层实现深度解析(74)
android·开发语言·kotlin
LDORntKQH5 小时前
基于深度强化学习的混合动力汽车能量管理策略 1.利用DQN算法控制电池和发动机发电机组的功率分配 2
android
冬奇Lab5 小时前
Android 15 ServiceManager与Binder服务注册深度解析
android·源码·源码阅读
2501_916008897 小时前
深入解析iOS机审4.3原理与混淆实战方法
android·java·开发语言·ios·小程序·uni-app·iphone
独行soc8 小时前
2026年渗透测试面试题总结-20(题目+回答)
android·网络·安全·web安全·渗透测试·安全狮
常利兵8 小时前
2026年,Android开发已死?不,它正迎来黄金时代!
android