Auido基础 各个参数定义(音频服务,音频驱动)

前言:

当App需要播放声音时,首先需要明确声音的类型,即流类型(stream type)。由于存在多种声音类型,因此需要确定一个播放策略(strategy)来区分它们。基于这个策略,系统将决定使用哪种设备来播放声音,可能是喇叭、耳机或蓝牙等(device)。进一步地,根据所选设备及其配置(如采样率、通道数等),系统会确定一个输出(output),这个输出代表了一组具有相同参数的设备。最后,系统会基于这个输出来选择对应的播放线程(playback thread)进行声音播放。

常见流类型:

序号流类型名称描述
1AUDIO_STREAM_DEFAULT-1默认音频流
2AUDIO_STREAM_MIN0最小音频流(与AUDIO_STREAM_VOICE_CALL相同)
3AUDIO_STREAM_VOICE_CALL0语音通话音频流
4AUDIO_STREAM_SYSTEM1系统音频流
5AUDIO_STREAM_RING2铃声音频流
6AUDIO_STREAM_MUSIC3音乐音频流
7AUDIO_STREAM_ALARM4闹钟音频流
8AUDIO_STREAM_NOTIFICATION5通知音频流
9AUDIO_STREAM_BLUETOOTH_SCO6蓝牙SCO音频流
10AUDIO_STREAM_ENFORCED_AUDIBLE7用户无法静音的音频流,必须输出到扬声器
11AUDIO_STREAM_DTMF8DTMF(双音多频)音频流
12AUDIO_STREAM_TTS9透过扬声器传输的音频流(仅扬声器播放,其他设备无声)
13AUDIO_STREAM_ACCESSIBILITY10辅助功能语音提示音频流
14AUDIO_STREAM_REROUTING11用于动态策略输出混音的音频流
15AUDIO_STREAM_PATCH12用于内部音频flinger轨道的音频流(固定音量)
16AUDIO_STREAM_PUBLIC_CNTAUDIO_STREAM_TTS + 1公共音频流计数(动态值,基于AUDIO_STREAM_TTS)
17AUDIO_STREAM_CNTAUDIO_STREAM_PATCH + 1总音频流计数(动态值,基于AUDIO_STREAM_PATCH)

常见设备的定义:

/system/media/audio/include/system/audio-base.h

输出:

标识符值 (十六进制)描述
AUDIO_DEVICE_NONE0x0u无音频设备
AUDIO_DEVICE_BIT_IN0x80000000u输入设备位掩码
AUDIO_DEVICE_BIT_DEFAULT0x40000000u默认设备位掩码
AUDIO_DEVICE_OUT_EARPIECE0x1u听筒
AUDIO_DEVICE_OUT_SPEAKER0x2u扬声器
AUDIO_DEVICE_OUT_WIRED_HEADSET0x4u有线耳机
AUDIO_DEVICE_OUT_WIRED_HEADPHONE0x8u有线头戴耳机
AUDIO_DEVICE_OUT_BLUETOOTH_SCO0x10u蓝牙SCO耳机
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET0x20u蓝牙SCO耳机套件
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT0x40u蓝牙SCO车载套件
AUDIO_DEVICE_OUT_BLUETOOTH_A2DP0x80u蓝牙A2DP
AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES0x100u蓝牙A2DP头戴耳机
AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER0x200u蓝牙A2DP扬声器
AUDIO_DEVICE_OUT_AUX_DIGITAL0x400u辅助数字输出(与HDMI相同)
AUDIO_DEVICE_OUT_HDMI0x400uHDMI输出(与AUX_DIGITAL相同)
AUDIO_DEVICE_OUT_ANLG_DOCK_HEADSET0x800u模拟基座耳机
AUDIO_DEVICE_OUT_DGTL_DOCK_HEADSET0x1000u数字基座耳机
AUDIO_DEVICE_OUT_USB_ACCESSORY0x2000uUSB配件输出
AUDIO_DEVICE_OUT_USB_DEVICE0x4000uUSB设备输出
AUDIO_DEVICE_OUT_REMOTE_SUBMIX0x8000u远程子混音输出
AUDIO_DEVICE_OUT_TELEPHONY_TX0x10000u电话传输输出
AUDIO_DEVICE_OUT_LINE0x20000u线路输出
AUDIO_DEVICE_OUT_HDMI_ARC0x40000uHDMI ARC输出
AUDIO_DEVICE_OUT_SPDIF0x80000uSPDIF输出
AUDIO_DEVICE_OUT_FM0x100000uFM输出
AUDIO_DEVICE_OUT_AUX_LINE0x200000u辅助线路输出
AUDIO_DEVICE_OUT_SPEAKER_SAFE0x400000u安全扬声器输出
AUDIO_DEVICE_OUT_IP0x800000uIP输出
AUDIO_DEVICE_OUT_BUS0x1000000u总线输出
AUDIO_DEVICE_OUT_PROXY0x2000000u代理输出
AUDIO_DEVICE_OUT_USB_HEADSET0x4000000uUSB耳机输出
AUDIO_DEVICE_OUT_HEARING_AID0x8000000u助听器输出
AUDIO_DEVICE_OUT_ECHO_CANCELLER0x10000000u回声消除器
AUDIO_DEVICE_OUT_DEFAULT0x40000000u默认输出设备(与BIT_DEFAULT相同)

输入:

标识符值 (十六进制)描述
AUDIO_DEVICE_IN_COMMUNICATION0x80000001u通信输入设备
AUDIO_DEVICE_IN_AMBIENT0x80000002u环境声音输入设备
AUDIO_DEVICE_IN_BUILTIN_MIC0x80000004u内置麦克风
AUDIO_DEVICE_IN_BLUETOOTH_SCO_HEADSET0x80000008u蓝牙SCO耳机输入设备
AUDIO_DEVICE_IN_WIRED_HEADSET0x80000010u有线耳机输入设备
AUDIO_DEVICE_IN_AUX_DIGITAL0x80000020u辅助数字输入设备
AUDIO_DEVICE_IN_HDMI0x80000020uHDMI输入设备(与AUDIO_DEVICE_IN_AUX_DIGITAL重复)
AUDIO_DEVICE_IN_VOICE_CALL0x80000040u语音通话输入设备
AUDIO_DEVICE_IN_TELEPHONY_RX0x80000040u电话接收输入设备(与AUDIO_DEVICE_IN_VOICE_CALL重复)
AUDIO_DEVICE_IN_BACK_MIC0x80000080u后置麦克风输入设备
AUDIO_DEVICE_IN_REMOTE_SUBMIX0x80000100u远程子混音输入设备
AUDIO_DEVICE_IN_ANLG_DOCK_HEADSET0x80000200u模拟基座耳机输入设备
AUDIO_DEVICE_IN_DGTL_DOCK_HEADSET0x80000400u数字基座耳机输入设备
AUDIO_DEVICE_IN_USB_ACCESSORY0x80000800uUSB配件输入设备
AUDIO_DEVICE_IN_USB_DEVICE0x80001000uUSB设备输入设备
AUDIO_DEVICE_IN_FM_TUNER0x80002000uFM收音机输入设备
AUDIO_DEVICE_IN_TV_TUNER0x80004000u电视调谐器输入设备
AUDIO_DEVICE_IN_LINE0x80008000u线路输入设备
AUDIO_DEVICE_IN_SPDIF0x80010000uSPDIF输入设备
AUDIO_DEVICE_IN_BLUETOOTH_A2DP0x80020000u蓝牙A2DP输入设备
AUDIO_DEVICE_IN_LOOPBACK0x80040000u环回输入设备
AUDIO_DEVICE_IN_IP0x80080000uIP输入设备
AUDIO_DEVICE_IN_BUS0x80100000u总线输入设备
AUDIO_DEVICE_IN_PROXY0x81000000u代理输入设备
AUDIO_DEVICE_IN_USB_HEADSET0x82000000uUSB耳机输入设备
AUDIO_DEVICE_IN_BLUETOOTH_BLE0x84000000u蓝牙BLE输入设备
AUDIO_DEVICE_IN_DEFAULT0xC0000000u默认输入设备

AUDIO_SOURCE 通常是一个枚举(enum)类型,用于标识音频数据的来源或类型。在音频处理、录制、播放或混合等上下文中,AUDIO_SOURCE 用于确定音频数据是从哪里来的,以便系统或应用程序可以适当地处理它。

枚举名称枚举值描述
AUDIO_SOURCE_DEFAULT0默认音频源
AUDIO_SOURCE_MIC1麦克风音频源
AUDIO_SOURCE_VOICE_UPLINK2语音上行链路音频源
AUDIO_SOURCE_VOICE_DOWNLINK3语音下行链路音频源
AUDIO_SOURCE_VOICE_CALL4语音通话音频源
AUDIO_SOURCE_CAMCORDER5摄像机录音音频源
AUDIO_SOURCE_VOICE_RECOGNITION6语音识别音频源
AUDIO_SOURCE_VOICE_COMMUNICATION7语音通信音频源
AUDIO_SOURCE_REMOTE_SUBMIX8远程呈现的混音音频源(如WiFi显示在电视上)
AUDIO_SOURCE_CNT-音频源计数值(注意:此值未在枚举中直接指定)
AUDIO_SOURCE_MAX-音频源最大值(AUDIO_SOURCE_CNT - 1)
AUDIO_SOURCE_FM_TUNER1998FM调谐器音频源
AUDIO_SOURCE_HOTWORD1999低优先级、可抢占的音频源,用于背景软件热词检测(仅用于框架内部,不在音频HAL中暴露)

应用audio模式设置setmode:

常量名称描述
AUDIO_MODE_INVALID-2无效模式
AUDIO_MODE_CURRENT-1当前模式
AUDIO_MODE_NORMAL0正常模式
AUDIO_MODE_RINGTONE1铃声模式
AUDIO_MODE_IN_CALL2通话中模式
AUDIO_MODE_IN_COMMUNICATION3通信中模式(如VoIP通话)
AUDIO_MODE_FM4FM收音机模式
AUDIO_MODE_EARPIECE5听筒模式
AUDIO_MODE_CNT未指定常量计数(非实际模式)
AUDIO_MODE_MAXAUDIO_MODE_CNT - 1最大模式值(非实际模式)

AudioTrack Native API 输出标识:

AUDIO_OUTPUT_FLAGDescription
AUDIO_OUTPUT_FLAG_DIRECT表示音频流直接输出到音频设备,不需要软件混音,一般用于 HDMI 设备声音输出
AUDIO_OUTPUT_FLAG_PRIMARY表示音频流需要输出到主输出设备,一般用于铃声类声音
AUDIO_OUTPUT_FLAG_FAST表示音频流需要快速输出到音频设备,一般用于按键音、游戏背景音等对时延要求高的场景
AUDIO_OUTPUT_FLAG_DEEP_BUFFER表示音频流输出可以接受较大的时延,一般用于音乐、视频播放等对时延要求不高的场景
AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD表示音频流没有经过软件解码,需要输出到硬件解码器,由硬件解码器进行解码

从 Audio HAL 中,我们通常看到如下 4 种输出流设备,分别对应着不同的Usecase播放场景:

Usecase播放场景输出流设备类型标识音频流特性回放线程实例
primaryout主输出流设备AUDIO_OUTPUT_FLAG_PRIMARY铃声类声音输出MixerThread
lowlatency低延迟输出流设备AUDIO_OUTPUT_FLAG_FAST按键音、游戏背景音等MixerThread
deepbuffer音乐音轨输出流设备AUDIO_OUTPUT_FLAG_DEEP_BUFFER音乐等对时延要求不高的声音输出MixerThread
compressoffload硬解输出流设备AUDIO_OUTPUT_FLAG_COMPRESS_OFFLOAD需要硬件解码的数据输出OffloadThread

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值