1. 音频帧大小概念解析
在Android音频开发中,帧大小(Frame Size)是一个基础但至关重要的概念。简单来说,一个音频帧包含所有声道在某个时间点的采样数据。比如立体声(双声道)的16位PCM音频,一帧就包含左声道2字节和右声道2字节,共4字节。
AudioFormat.getFrameSizeInBytes()这个方法的本质作用,就是计算每个音频帧占用的字节数。理解这个数值对以下场景特别关键:
- 准确分配音频缓冲区大小
- 计算音频流的时长
- 处理音频数据时正确偏移指针
- 实现音频的精确裁剪和拼接
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 方法原型与参数说明
先看方法的官方定义:
java复制public static int getFrameSizeInBytes(int encoding, int channelCount)
参数解析:
-
encoding:音频编码格式,常见值包括:
- AudioFormat.ENCODING_PCM_16BIT (每个采样点2字节)
- AudioFormat.ENCODING_PCM_8BIT (每个采样点1字节)
- AudioFormat.ENCODING_PCM_FLOAT (每个采样点4字节)
-
channelCount:声道数量,如:
- 1 (单声道MONO)
- 2 (立体声STEREO)
- 6 (5.1环绕声)
重要提示:Android 6.0(API 23)开始才支持多声道(>2),低版本即使传入大于2的值也会按双声道计算。
3. 实际应用场景示例
3.1 音频录制缓冲区计算
假设我们要录制16位、双声道的PCM音频:
java复制int frameSize = AudioFormat.getFrameSizeInBytes(
AudioFormat.ENCODING_PCM_16BIT,
2); // 返回4
这意味着每秒48000采样率的音频需要缓冲区:
java复制int bufferSize = 48000 * frameSize; // 192000字节/秒
3.2 音频播放进度计算
当处理音频流时,可以通过帧大小计算已播放时长:
java复制
