IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android_获取音频PCM数据 -> 正文阅读

[移动开发]Android_获取音频PCM数据

简单4步解决一切烦恼。

1. 配置

mAudioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, Math.max(minBufferSize, DEFAULT_BUFFER_SIZE));

参数说明:

声音来源

MediaRecorder.AudioSource.CAMCORDER 
 设定录音来源于同方向的相机麦克风相同,若相机无内置相机或无法识别,则使用预设的麦克风
MediaRecorder.AudioSource.DEFAULT  默认音频源
MediaRecorder.AudioSource.MIC
设定录音来源为主麦克风。
MediaRecorder.AudioSource.VOICE_CALL
设定录音来源为语音拨出的语音与对方说话的声音
MediaRecorder.AudioSource.VOICE_COMMUNICATION
摄像头旁边的麦克风
MediaRecorder.AudioSource.VOICE_DOWNLINK
下行声音
MediaRecorder.AudioSource.VOICE_RECOGNITION
语音识别
MediaRecorder.AudioSource.VOICE_UPLINK
上行声音

采样率

根据接口说明44100是唯一在所有设备上都保证支持的。其他的采样率不保证。

通道配置

只有单通道保证在所有设备上支持。

AudioFormat.CHANNEL_IN_MONO   单通道
AudioFormat.CHANNEL_IN_STEREO 双通道

采样格式

一个PCM采样点所占用的数据格式及大小。一般常用的是16位的。

/** Audio data format: PCM 16 bit per sample. Guaranteed to be supported by devices. */
public static final int ENCODING_PCM_16BIT = 2;
/** Audio data format: PCM 8 bit per sample. Not guaranteed to be supported by devices. */
public static final int ENCODING_PCM_8BIT = 3;
/** Audio data format: single-precision floating-point per sample */
public static final int ENCODING_PCM_FLOAT = 4;

PCM数据缓冲区大小

不能小于下面最小大小,最小大小可以从下面函数获取

static public int getMinBufferSize(int sampleRateInHz, int channelConfig, int audioFormat)

2. 读取数据

将数据读取到mBuffer中。返回值为实际读取的长度

int readLen = mAudioRecord.read(mBuffer, 0, DEFAULT_BUFFER_SIZE);

3. 销毁

mAudioRecord.stop();
mAudioRecord.release();

4. 示例代码

 /** 使用默认的音频配置,回调函数用来消费音频数据,这里的音频数据是PCM,需要经过编码生成aac */
    public static void startGetAudioData(IConsumeDataCallback consumer) {

        Logcat.d(TAG, "startGetAudioData called!");

        // 配置AudioRecord
        int audioSource = MediaRecorder.AudioSource.VOICE_COMMUNICATION;
        // 所有支持android系统都支持
        int sampleRate = 44100;
        // 单声道输入
        int channelConfig = AudioFormat.CHANNEL_IN_MONO;
        // pcm_16时所有android系统都支持的
        int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
        // 计算AudioRecord内部buffer最小
        int minBufferSize = AudioRecord.getMinBufferSize(sampleRate, channelConfig, audioFormat);
        // buffer不能小于最低要求,也不能小于我们每次我们读取的大小。
        mAudioRecord = new AudioRecord(audioSource, sampleRate, channelConfig, audioFormat, Math.max(minBufferSize, DEFAULT_BUFFER_SIZE));

        // 开始录音
        mAudioRecord.startRecording();
        isStart = true;

        mBuffer = new byte[DEFAULT_BUFFER_SIZE];

        while (isStart) {

            int readLen = mAudioRecord.read(mBuffer, 0, DEFAULT_BUFFER_SIZE);
            if (readLen <= 0) {
                break;
            }

            consumer.handle(mBuffer, readLen);
        }

        mAudioRecord.stop();
        mAudioRecord.release();
        mAudioRecord = null;

        Logcat.d(TAG, "startGetAudioData exit!");
    }

其中?consumer.handle(mBuffer, readLen); 是我写的自定义消费函数,使用接口实现。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-07-28 00:17:13  更:2021-07-28 00:17:18 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 0:10:51-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码