Android AudioRecord、AudioTrack录制播放音频

本文介绍了如何使用Android的AudioRecord进行PCM音频录制,包括初始化、开始和停止录制的详细步骤。同时,讲解了AudioTrack播放PCM音频的过程,以及PCM数据如何转换为WAV格式。在播放部分,提到了AudioTrack的两种数据加载模式,并给出了播放PCM编码WAV文件的实现方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

AudioRecord 录制PCM

AudioRecord 是 Android 提供的用于实现录音功能,录制得到无损的PCM音频数据。

从AudioRecord构造函数就可以看出:

public AudioRecord(int audioSource, int sampleRateInHz, int channelConfig, 
                   int audioFormat, int bufferSizeInBytes)
  • audioSource 音频源,如麦克风MIC
  • sampleRateInHz 采样率,每秒采样次数,常用有8000、44100
  • channelConfig 声道,有单声道MONO和立体声STEREO
  • audioFormat 采样大小,8bit或16bit,采样大小越大,音质越好
  • bufferSizeInBytes 采集数据的缓冲区,可以通过getMinBufferSize()获得最小的buffer size
    (参考:https://www.jianshu.com/p/80a140cf3d99)
1.初始化
private final static int AudioSource = MediaRecorder.AudioSource.DEFAULT;
private final static int AudioRate = 44100;
private final static int AudioInChannel = AudioFormat.CHANNEL_IN_MONO;
private final static int AudioOutChannel = AudioFormat.CHANNEL_OUT_MONO;
private final static int AudioFormater = AudioFormat.ENCODING_PCM_16BIT;
private AudioRecord mAudioRecord;     
private int recordBufferMinSize;
private AudioTrack mAudioTrack;
2.开始录制
private void startRecord() {
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) !=   PackageManager.PERMISSION_GRANTED) {
       ActivityCompat.requestPermissions(this, MICROPHONE, 2);
       return;
    }
    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
      ActivityCompat.requestPermissions(this, STORAGE, 2);
      return;
    }
    isRecording = true;
    mExecutor.execute(new RecordRunnable()); // mExecutor是一个简单的线程池
}
RecordRunnable实现:
  • 调用 startRecording() 开始录制
  • 读取 AudioRecord音频数据:int readSize = mAudioRecord.read(bufferbytes, 0, recordBufferMinSize);
  • 往 FileOutputStream写数据:mOutputStream.write(bufferbytes, 0, readSize);
  • 关闭 AudioRcord
private class RecordRunnable implements Runnable {
        private Ou
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值