V . AAudio 音频流 设置缓冲区大小 AAudioStream_setBufferSizeInFrames
1. 函数作用 : 在音频流播放时 , 有可能会产生阻塞 , 即 采样播放完毕 , 新采样还没到达 , 该函数可以 通过 改变 缓冲区大小阈值 , 调整 缓冲区的延迟 , 即 如果出现 阻塞 , 可以增大该缓冲区大小 ( 帧数 ) ;
2. 结合 XRun 值使用 : 通过 AAudioStream_getXRunCount() 方法 , 可以获取 欠载 ( UnderRun ) 或 超限 ( OverRun ) 的值 , 根据该 XRun 值进行缓冲区大小的调整 , 达到为每个音频设备设置合适的延迟的目的 ;
3. 可设置的最大值 : 通过 AAudioStream_getBufferCapacityInFrames() 函数可以获取 缓冲区可设置的最大帧数 , 设置帧数时 , 不能超过该数值 ;
4. 查看当前缓冲区大小 : 调用 AAudioStream_getBufferSizeInFrames() 方法 , 可以查看当前的缓冲区帧数 ;
文档中的说法是 : 获取 AAudio 音频流在不阻塞的情况下 , 可以读取 或 写入的最大帧数 , 理解不通 ;
5. AAudioStream_setBufferSizeInFrames 函数简介 :
① 函数原型 : numFrames 是设置的新的缓冲区帧数 , stream 代表 AAudio 音频流指针 ;
AAUDIO_API aaudio_result_t AAudioStream_setBufferSizeInFrames( AAudioStream *stream, int32_t numFrames
② 代码示例 :
//设置当前缓冲区是多少帧 bufferSize = AAudioStream_setBufferSizeInFrames(stream, bufferSize);
播放器缓冲区 : 这里的帧缓冲区指的是 AAudio 音频流的缓冲区 , 属于播放器 或 音频设备 的固有属性 ;
采样缓冲区 : 注意与采样缓冲区进行区分 , 采样缓冲区指的是 一次性向 AAudio 音频流 读取 或 写入的 字节数 , 注意区分这两个缓冲区 ;
电流产生 : 如果两个缓冲区设置不当 , 会造成音频卡顿 , 电流 , 刺啦 或者 啪啪 的声音 ;
帧大小 : 这里的帧可以理解成一个样本 , 如果是单声道 , 每帧一个样本 , 如果是双声道立体声 , 每帧 2 个样本 ;
VI . AAudio 音频流 采样率设置 AAudioStreamBuilder_setSampleRate
推荐使用默认设置 , 不要调用该方法 设置采样率 , 获取默认的最佳采样率 , 然后根据该采样率进行采样即可 ;
1 . AAudioStreamBuilder_setSampleRate 方法简介 :
① 函数原型 : 设置 AAudio 音频流的采样率 ;
AAUDIO_API void AAudioStreamBuilder_setSampleRate( AAudioStreamBuilder *builder, int32_t sampleRate )
② sampleRate 参数 : sampleRate 参数就是采样率 , 其单位 赫兹 ( Hz ) , 一般情况下是 44100 Hz 或 48000 Hz , 代表一秒钟有 44100 或 48000 个采样 ;
2 . 最佳实践 :
① 默认值 : 默认情况下 , 如果不调用该函数设置 AAudio 播放器的采样率 , 其值为 AAUDIO_UNSPECIFIED ;
② 默认行为 : 在默认状态下 , 如果打开 AAudio 音频流 , 系统会自动分配一个最佳值 ;
③ 应用开发推荐 : 打开默认采样率的音频流后 , 调用 AAudioStream_getSampleRate() 可以获取当前 AAudio 音频流的采样率 , 我们可以根据该采样率进行采样 ;
这也是我们推荐的做法 , 直接使用默认值即可 , 如果设置的值不合适 , 会造成 AAudio 音频流打开失败的后果 ;
④ 出错情况 : 如果指定的采样率与音频设备不一致 , 打开音频流会失败 ;
VII . AAudio 音频流 获取当前采样率 AAudioStream_getSampleRate
AAudioStream_getSampleRate 简介 :
① 函数原型 : 该函数用于获取当前 AAudio 音频流 采样率 ;
AAUDIO_API int32_t AAudioStream_getSampleRate( AAudioStream *stream )
② 代码示例 :
// 获取音频流采样率 sampleRate_ = AAudioStream_getSampleRate(playStream_);
VIII . AAudio 音频流 每帧采样数
设置每帧采样数 AAudioStreamBuilder_setSamplesPerFrame() :
① 等同方法 : 该方法 与 AAudioStreamBuilder_setChannelCount() 方法 作用是相同的 ;
② 每帧采样数 : 该值就是通道数 , 如果是单声道 , 每帧只有一个采样 , 如果是 双声道立体声 , 每帧有 2 个采样 ;
③ 函数原型 :
AAUDIO_API void AAudioStreamBuilder_setSamplesPerFrame( AAudioStreamBuilder *builder, int32_t samplesPerFrame
获取每帧采样数 AAudioStream_getSamplesPerFrame :
① 等同方法 : 该方法 与 AAudioStream_getChannelCount() 方法 作用是相同的 ;
② 每帧采样数 : 该值就是通道数 , 如果是单声道 , 每帧只有一个采样 , 如果是 双声道立体声 , 每帧有 2 个采样 ;
③ 函数原型 :
AAUDIO_API int32_t AAudioStream_getSamplesPerFrame( AAudioStream *stream )