音视频基础能力之 Android 音频篇 (一):音频采集

一、概述

AudioRecord 是 Android 平台比较重要的类,也是 Java 接口中比较偏底层(平台)的接口,可以通过它从平台的音频输入硬件来获取原始音频 PCM 数据。它的工作原理是要需要通过应用侧轮询调用 read 接口来驱动,每调用一次,系统就会从硬件采集到的数据填充一次,至于传递数据的载体可以是 byte[] 数组 或者 ByteBuffer 。

在这里插入图片描述

二、所需权限

应用程序创建 AudioRecord 实例需要在AndroidManifest文件赋予 Manifest.permission.RECORD_AUDIO 权限。没有赋予这个权限,如果使用 AudioRecord.Builder 来构建的话,执行build()函数会抛出 UnsupportedOperationException 异常,即使您捕获了此异常,在获取 AudioRecord 状态 的时候,也是未初始化状态(STATE_UNINITIALIZED)。

<uses-permission android:name="android.permission.RECORD_AUDIO"/>

在 API 23 (Android 6.0) 之后,为了保护用户隐私,对于一些敏感权限(比如录音权限),应用需要在运行时动态申请。示例代码如下:

private static final int PERMISSION_REQUEST_CODE = 1;

// step1: 检查是否有录音权限
private boolean checkPermission() {
   
   
    int result = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO);
    return result == PackageManager.PERMISSION_GRANTED;
}

// step2: 请求录音权限
private void requestPermission() {
   
   
    ActivityCompat.requestPermissions(this, new String[]{
   
   Manifest.permission.RECORD_AUDIO}, PERMISSION_REQUEST_CODE);
}

// step3: 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
   
   
    if (requestCode == PERMISSION_REQUEST_CODE) {
   
   
        if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
   
   
            // 权限被授予,可以进行录音
            startRecording(); 
        } else {
   
   
            // 权限
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值