使用 AAudio 音频库 , 首先需要导入 AAudio.h 头文件 ;
#include
创建 AAudio 音频流 , 需要先创建 AAudio 音频流构建器 , 然后在通过该构建器创建音频流 ;
//创建构建器 , AAudio 音频流通过该构建器创建
//声明 AAudio 音频流构建器 指针
AAudioStreamBuilder *builder = nullptr;
//创建 AAudio 音频流构建器 , 注意传入二维指针
aaudio_result_t result = AAudio_createStreamBuilder(&builder);
设置音频设备 ID ;
// 设置音频流设备 ID
AAudioStreamBuilder_setDeviceId(builder, playbackDeviceId_);
设置音频流方向 ;
// 设置音频流方向
AAudioStreamBuilder_setDirection(builder, AAUDIO_DIRECTION_OUTPUT);
设置音频设备共享模式 ;
// 设置共享模式 , 独占模式性能更高 , 延迟更低 ; 如果 该音频设备正在被使用 , 设置失败会自动设置成 共享模式
AAudioStreamBuilder_setSharingMode(builder, AAUDIO_SHARING_MODE_EXCLUSIVE);
设置性能模式 ;
// 设置性能模式
AAudioStreamBuilder_setPerformanceMode(builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);
下面会着重对上面的流程细节进行详细解析 ;
每个方法的参数 , 原理 , 返回值 等细节都会讲解到 ;
设置 AAudio 音频流设备 ID :
AAUDIO_API void AAudioStreamBuilder_setDeviceId(
AAudioStreamBuilder *builder,
int32_t deviceId
)
// 设置音频流设备 ID
AAudioStreamBuilder_setDeviceId(builder, playbackDeviceId_);
音频设备 ID 获取方法 :
AAudio 音频流 默认设备使用 :
AAudio 音频流方向设置 :
AAUDIO_API void AAudioStreamBuilder_setDirection(
AAudioStreamBuilder *builder,
aaudio_direction_t direction
)
// 设置音频流方向
AAudioStreamBuilder_setDirection(builder, AAUDIO_DIRECTION_OUTPUT);
AAudio 音频流方向 说明 : 该值 是 aaudio_direction_t 类型 , 该类型是 int32_t 类型 , 取值是一个枚举 ;
enum {
/**
* Audio data will travel out of the device, for example through a speaker.
*/
AAUDIO_DIRECTION_OUTPUT,
/**
* Audio data will travel into the device, for example from a microphone.
*/
AAUDIO_DIRECTION_INPUT
};
typedef int32_t aaudio_direction_t;
AAudio 音频流设置 音频设备共享模式 :
AAUDIO_API void AAudioStreamBuilder_setSharingMode(
AAudioStreamBuilder *builder,
aaudio_sharing_mode_t sharingMode
)
// 设置共享模式 , 独占模式性能更高 , 延迟更低 ; 如果 该音频设备正在被使用 , 设置失败会自动设置成 共享模式
AAudioStreamBuilder_setSharingMode(builder, AAUDIO_SHARING_MODE_EXCLUSIVE);
AAudio 音频设备共享模式 :
enum {
/**
* This will be the only stream using a particular source or sink.
* This mode will provide the lowest possible latency.
* You should close EXCLUSIVE streams immediately when you are not using them.
*/
AAUDIO_SHARING_MODE_EXCLUSIVE,
/**
* Multiple applications will be mixed by the AAudio Server.
* This will have higher latency than the EXCLUSIVE mode.
*/
AAUDIO_SHARING_MODE_SHARED
};
typedef int32_t aaudio_sharing_mode_t;
AAudioStreamBuilder_setPerformanceMode 设置性能模式 :
AAUDIO_API void AAudioStreamBuilder_setPerformanceMode(
AAudioStreamBuilder *builder,
aaudio_performance_mode_t mode
)
// 设置性能模式
AAudioStreamBuilder_setPerformanceMode(builder, AAUDIO_PERFORMANCE_MODE_LOW_LATENCY);
性能模式参数 :
enum {
/**
* No particular performance needs. Default.
*/
AAUDIO_PERFORMANCE_MODE_NONE = 10,
/**
* Extending battery life is more important than low latency.
*
* This mode is not supported in input streams.
* For input, mode NONE will be used if this is requested.
*/
AAUDIO_PERFORMANCE_MODE_POWER_SAVING,
/**
* Reducing latency is more important than battery life.
*/
AAUDIO_PERFORMANCE_MODE_LOW_LATENCY
};
typedef int32_t aaudio_performance_mode_t;
性能模式使用说明 :