wordpress做招聘网站,兰州构建公司,合肥网站推广优化公司,网站自适应是什么做的AudioRecord是Android中用于音频录制的类#xff0c;它的主要作用是捕获来自设备麦克风或其他音频源的音频数据#xff0c;并将其保存为PCM格式的音频流#xff0c;以供后续处理或存储。
以下是关于AudioRecord的一些常见用途和基本使用方法#xff1a;
作用和用途#…AudioRecord是Android中用于音频录制的类它的主要作用是捕获来自设备麦克风或其他音频源的音频数据并将其保存为PCM格式的音频流以供后续处理或存储。
以下是关于AudioRecord的一些常见用途和基本使用方法
作用和用途
音频录制AudioRecord可以用于录制来自麦克风、耳机麦克风或其他音频输入源的音频。这在开发语音通话、语音识别、音频笔记、音频流媒体等应用中非常有用。
声音分析通过捕获音频数据你可以进行声音分析如检测音频的频谱、音量、音调等特征用于声音处理和分析应用。
实时音频处理你可以将录制的音频数据传递给其他音频处理库或自定义算法以进行实时音频处理如降噪、回声消除、音频效果等。
音频存储你可以将录制的音频数据保存为音频文件例如.wav或.mp3以便后续播放或分享。
需要权限
uses-permission android:nameandroid.permission.RECORD_AUDIO/工具类
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; // 采样率为16Kprivate 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());}}}