常用音频概念

本文深入探讨了Android音频系统,包括音频输出通道的强制使用配置、通道模式设置、音频流类型、输入/输出设备详情,以及电话状态、播放状态、铃声模式等关键概念,为理解音频在Android系统中的工作原理提供基础。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

常用音频概念

1、音频输出通道-setForceUse()强制使用的设备类型配置

设置强制使用的设备类型配置

D AudioPolicyManagerCustom: setForceUse() usage 7, config 0, mPhoneState 3

usage:指的是音频的使用场景config:指的是音频从哪里发出

frameworks/base/media/java/android/media/AudioSystem.java

1323 // device categories config for setForceUse, must match audio_policy_forced_cfg_t
1324 /** @hide */ @UnsupportedAppUsage public static final int FORCE_NONE = 0;
1325 /** @hide */ public static final int FORCE_SPEAKER = 1;   //扬声器通道
1326 /** @hide */ public static final int FORCE_HEADPHONES = 2;   //耳机通道
1327 /** @hide */ public static final int FORCE_BT_SCO = 3;  //是一种双向的音频数据的传输链路,只能用于普通语音的传输,不能播放音乐
1328 /** @hide */ public static final int FORCE_BT_A2DP = 4; //是一种单向的高品质音频数据传输链路,通常用于播放立体声音乐
1329 /** @hide */ public static final int FORCE_WIRED_ACCESSORY = 5;  //有线设备通道,如有线耳机
1330 /** @hide */ @UnsupportedAppUsage public static final int FORCE_BT_CAR_DOCK = 6;
1331 /** @hide */ @UnsupportedAppUsage public static final int FORCE_BT_DESK_DOCK = 7;
1332 /** @hide */ @UnsupportedAppUsage public static final int FORCE_ANALOG_DOCK = 8;
1333 /** @hide */ @UnsupportedAppUsage public static final int FORCE_DIGITAL_DOCK = 9;
1334 /** @hide */ public static final int FORCE_NO_BT_A2DP = 10;
1335 /** @hide */ public static final int FORCE_SYSTEM_ENFORCED = 11;
1336 /** @hide */ public static final int FORCE_HDMI_SYSTEM_AUDIO_ENFORCED = 12;
1337 /** @hide */ public static final int FORCE_ENCODED_SURROUND_NEVER = 13;
1338 /** @hide */ public static final int FORCE_ENCODED_SURROUND_ALWAYS = 14;
1339 /** @hide */ public static final int FORCE_ENCODED_SURROUND_MANUAL = 15;
1340 /** @hide */ public static final int FORCE_EARPIECE = 16;
1341 /** @hide */ public static final int NUM_FORCE_CONFIG = 17;
1342 /** @hide */ public static final int FORCE_DEFAULT = FORCE_NONE;


AUDIO_DEVICE_OUT_EARPIECE = 0x1, // 听筒
AUDIO_DEVICE_OUT_SPEAKER = 0x2, // 扬声器
AUDIO_DEVICE_OUT_WIRED_HEADSET = 0x4, // 线控耳机
AUDIO_DEVICE_OUT_WIRED_HEADPHONE = 0x8, // 普通耳机
AUDIO_DEVICE_OUT_BLUETOOTH_SCO = 0x10, // 单声道蓝牙耳机
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20, // 蓝牙电话
AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40, // 车载免提蓝牙设备
AUDIO_DEVICE_OUT_BLUETOOTH_A2DP = 0x80, // 立体声蓝牙耳机


2、设置通道模式 setMode()

frameworks/base/media/java/android/media/AudioSystem.java

154 /* modes for setPhoneState, must match AudioSystem.h audio_mode */
155 /** @hide */
156 public static final int MODE_INVALID = -2;
157 /** @hide */
158 public static final int MODE_CURRENT = -1;
159 /** @hide */
160 public static final int MODE_NORMAL = 0; //待机模式
161 /** @hide */
162 public static final int MODE_RINGTONE = 1; //l铃声模式
163 /** @hide */
164 public static final int MODE_IN_CALL = 2; //音频通话模式
165 /** @hide */
166 public static final int MODE_IN_COMMUNICATION = 3; //通信模式,包括音视频,voip通话
167 /** @hide */
168 public static final int MODE_CALL_SCREENING = 4;
169 /** @hide */
170 public static final int NUM_MODES = 5;




与底层代码system/media/audio/include/system/audio-base.h相对应

333#endif // AUDIO_NO_SYSTEM_DECLARATIONS
334    AUDIO_MODE_NORMAL = 0,
335    AUDIO_MODE_RINGTONE = 1,
336    AUDIO_MODE_IN_CALL = 2,
337    AUDIO_MODE_IN_COMMUNICATION = 3,
338    AUDIO_MODE_CALL_SCREEN = 4,
339} audio_mode_t;

3、音频流类型


frameworks/base/media/java/android/media/AudioSystem.java


64 /** @hide Used to identify the default audio stream volume */

65 @TestApi

66 public static final int STREAM_DEFAULT = -1;    //默认流

67 /** @hide Used to identify the volume of audio streams for phone calls */

68 public static final int STREAM_VOICE_CALL = 0;  //电话通话音频流

69 /** @hide Used to identify the volume of audio streams for system sounds */

70 public static final int STREAM_SYSTEM = 1;      //系统音频流

71 /** @hide Used to identify the volume of audio streams for the phone ring and message alerts */

72 public static final int STREAM_RING = 2;        //铃声音频流

73 /** @hide Used to identify the volume of audio streams for music playback */

74 public static final int STREAM_MUSIC = 3;       //音乐音频流

75 /** @hide Used to identify the volume of audio streams for alarms */

76 public static final int STREAM_ALARM = 4;          //闹钟流

77 /** @hide Used to identify the volume of audio streams for notifications */

78 public static final int STREAM_NOTIFICATION = 5;    //通知音频流

79 /** @hide

80 * Used to identify the volume of audio streams for phone calls when connected on bluetooth */

81 public static final int STREAM_BLUETOOTH_SCO = 6;

82 /** @hide Used to identify the volume of audio streams for enforced system sounds in certain

83 * countries (e.g camera in Japan) */

84 @UnsupportedAppUsage 85 public static final int STREAM_SYSTEM_ENFORCED = 7;

86 /** @hide Used to identify the volume of audio streams for DTMF tones */

87 public static final int STREAM_DTMF = 8;

88 /** @hide Used to identify the volume of audio streams exclusively transmitted through the

89 * speaker (TTS) of the device */

90 public static final int STREAM_TTS = 9;

91 /** @hide Used to identify the volume of audio streams for accessibility prompts */

92 public static final int STREAM_ACCESSIBILITY = 10;

93 /** @hide Used to identify the volume of audio streams for virtual assistant */

94 public static final int STREAM_ASSISTANT = 11;

4、audio output devices 输入/输出设备


frameworks/base/media/java/android/media/AudioSystem.java

644    public static final String DEVICE_OUT_EARPIECE_NAME = "earpiece";  听筒
645    public static final String DEVICE_OUT_SPEAKER_NAME = "speaker";   扬声器
646    public static final String DEVICE_OUT_WIRED_HEADSET_NAME = "headset";  带话筒的耳机
647    public static final String DEVICE_OUT_WIRED_HEADPHONE_NAME = "headphone"; 不带话筒的耳机
648    public static final String DEVICE_OUT_BLUETOOTH_SCO_NAME = "bt_sco";  蓝牙,面向连接(SCO)方式:主要用于话音传输
649    public static final String DEVICE_OUT_BLUETOOTH_SCO_HEADSET_NAME = "bt_sco_hs"; 蓝牙耳机,带话筒
650    public static final String DEVICE_OUT_BLUETOOTH_SCO_CARKIT_NAME = "bt_sco_carkit"; 蓝牙车载设备
651    public static final String DEVICE_OUT_BLUETOOTH_A2DP_NAME = "bt_a2dp";  蓝牙立体声
652    public static final String DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES_NAME = "bt_a2dp_hp"; 蓝牙立体声音耳机
653    public static final String DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER_NAME = "bt_a2dp_spk"; 带话筒的
654    public static final String DEVICE_OUT_AUX_DIGITAL_NAME = "aux_digital";
655    public static final String DEVICE_OUT_HDMI_NAME = "hdmi";
656    public static final String DEVICE_OUT_ANLG_DOCK_HEADSET_NAME = "analog_dock"; 通过基座连接的模拟有线耳机
657    public static final String DEVICE_OUT_DGTL_DOCK_HEADSET_NAME = "digital_dock"; 通过基座连接的数字有线耳机
658    public static final String DEVICE_OUT_USB_ACCESSORY_NAME = "usb_accessory";
659    public static final String DEVICE_OUT_USB_DEVICE_NAME = "usb_device";
660    public static final String DEVICE_OUT_REMOTE_SUBMIX_NAME = "remote_submix";
661    public static final String DEVICE_OUT_TELEPHONY_TX_NAME = "telephony_tx";
662    public static final String DEVICE_OUT_LINE_NAME = "line";
663    public static final String DEVICE_OUT_HDMI_ARC_NAME = "hmd
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值