Android AudioSystem

一、AudioSystem介绍

AudioSystem是Android系统中提供的一个API,用于管理音频系统的参数和状态。它提供了一组静态方法,允许开发者查询和设置音频参数、获取系统状态、控制音频焦点等。AudioSystem是Android系统中标准的音频API之一,底层实现与AudioService密切相关。

AudioSystem包括了很多函数接口,其中最常用的函数为setMasterVolume和getMasterVolume,其中,setMasterVolume函数用于设置全局的音量,该函数接受一个浮点类型的值。除此之外,AudioSystem还提供了其他一些函数接口,如获取音频设备的状态、管理音频特效等。

在Android Framework层,有很多类会使用AudioSystem提供的静态方法,下面列举一些常见的类:

1、AudioManager:Android系统中管理音频相关参数的类,其内部调用了AudioSystem的很多静态方法,比如setMasterVolume和getMasterVolume。

2、AudioTrack:音频播放类,内部使用了AudioSystem的一些静态方法,如获取音频设备的buffer大小等。

3、AudioRecord:音频录制类,内部使用了AudioSystem的一些静态方法,如获取音频设备的buffer大小等。

4、AudioPolicyManager:音频策略管理的类,可以理解为AudioService的一部分,它在处理音频策略时,需要使用一些AudioSystem提供的静态方法,如获取音频设备的状态等。

AudioSystem由JAVA代码、JNI代码、C++代码组成:

AudioSystem代码位于:

frameworks/base/service/java/com/android/server/audio/AudioSystem.java

frameworks/base/core/jni/android_media_AudioSystem.cpp

frameworks/base/core/jni/android_media_AudioSystem.h

frameworks/av/media/libaudioclient/AudioSystem.cpp

frameworks/av/media/libaudioclient/include/media/AudioSystem.h

AudioSystem的定义:

public class AudioSystem {}
class AudioSystem{}

二、AudioSystem方法和常量

AudioSystem方法

  • static void setErrorCallback(ErrorCallback cb):设置错误回调

  • static void setDynamicPolicyCallback(DynamicPolicyCallback cb):设置一个回调函数来动态更新设备的音频策略

  • static void setRecordingCallback(AudioRecordingCallback cb):设置一个回调函数来监听录音状体和录音数据

  • static boolean isSingleVolume(Context context):检测设备是否只有一个音量控制

  • static int setStreamVolumeIndexAS(int stream, int index, int device):设置Stream音量

  • static int getValueForVibrateSetting(int existingValue, int vibrateType, int vibrateSetting) :

  • static int getDefaultStreamVolume(int streamType):获取默认Srteam音量

  • static String streamToString(int stream) :Stream转为String

  • static native int setParameters(String keyValuePairs):设置音频参数

  • static native String getParameters(String keys):获取音频参数

  • static native int setDeviceConnectionState(int device, int state, String device_address, String device_name, int codecFormat):设置设备连接状态

  • static native int getDeviceConnectionState(int device, String device_address):获取设备连接状态

  • static native int handleDeviceConfigChange(int device, String device_address, String device_name, int codecFormat):设备设置变更处理

  • static native int setPhoneState(int state):设置电话状态

  • static native int setForceUse(int usage, int config):设置设备音频的使用方案

  • static native int getForceUse(int usage):获取设备音频的使用方案

  • static native int initStreamVolume(int stream, int indexMin, int indexMax):初始化Stream音量

  • static native int setStreamVolumeIndex(int stream, int index, int device):设置Stream音量

  • static native int getStreamVolumeIndex(int stream, int device):获取Stream音量

  • static native int setVolumeIndexForAttributes(@NonNull AudioAttributes attributes, int index, int device):设置音量

  • static native int getVolumeIndexForAttributes(@NonNull AudioAttributes attributes, int device):获取音量

  • static native int getMinVolumeIndexForAttributes(@NonNull AudioAttributes attributes):获取最小音量

  • static native int getMaxVolumeIndexForAttributes(@NonNull AudioAttributes attributes):获取最大音量

  • static native int setMasterVolume(float value):设置主音量

  • static native float getMasterVolume():获取主音量

  • static native int setMasterMute(boolean mute):设置主音量静音

  • static native boolean getMasterMute();:获取主音量静音

  • static native int getDevicesForStream(int stream):获取设备

  • static native int setMasterMono(boolean mono):设置主单声道

  • static native boolean getMasterMono():获取主单声道

  • static native int setRttEnabled(boolean enabled):使能RTT

  • static native int getPrimaryOutputSamplingRate():设置主输出采样率

  • static native int getPrimaryOutputFrameCount():获取音频输出设备的缓冲帧大小

  • static native int getOutputLatency(int stream):获取音频输出设备的音频延迟

  • static native int setLowRamDevice(boolean isLowRamDevice, long totalMemory):

  • static native int checkAudioFlinger():检测AudioFlinger

  • static native int listAudioPorts(ArrayList<AudioPort> ports, int[] generation):

  • static native int createAudioPatch(AudioPatch[] patch, AudioPortConfig[] sources, AudioPortConfig[] sinks):创建Audio Patch

  • static native int releaseAudioPatch(AudioPatch patch):释放Audio Patch

  • static native int listAudioPatches(ArrayList<AudioPatch> patches, int[] generation):获取当前音频设备的连接状态并返回音频连接列表

  • static native int setAudioPortConfig(AudioPortConfig config):设置音频端口的配置参数

  • static native int startAudioSource(AudioPortConfig config, AudioAttributes audioAttributes):开始Audio Source

  • static native int stopAudioSource(int handle):停止Audio Source

  • static native int getAudioHwSyncForSession(int sessionId):获取Audio硬件Sync

  • static native int registerPolicyMixes(ArrayList<AudioMix> mixes, boolean register):注册音频策略混合器

  • static native int setUidDeviceAffinities(int uid, @NonNull int[] types, @NonNull String[] addresses):设置指定应用程序的音频设备亲和性

  • static native int removeUidDeviceAffinities(int uid):删除指定应用的音频设备亲和性

  • static native int systemReady():Audio系统Ready

  • static native float getStreamVolumeDB(int stream, int index, int device):获取Stream音量DB值

  • static native int setAllowedCapturePolicy(int uid, int flags):设置音频捕获策略限制

  • static native int getMicrophones(ArrayList<MicrophoneInfo> microphonesInfo):获取当前系统可用的麦克风列表

  • static native int getSurroundFormats(Map<Integer, Boolean> surroundFormats, boolean reported):获取当前系统支持的环绕声格式列表

  • static native int getHwOffloadEncodingFormatsSupportedForA2DP(ArrayList<Integer> formatList):

  • static native int setSurroundFormatEnabled(int audioFormat, boolean enabled):启用或禁用特定环绕声格式

  • static native int setAssistantUid(int uid):

  • static native boolean isHapticPlaybackSupported():

AudioSystem常量

AUDIO_STREAM

  • public static final int STREAM_DEFAULT = -1;

  • public static final int STREAM_VOICE_CALL = 0;

  • public static final int STREAM_SYSTEM = 1;

  • public static final int STREAM_RING = 2;

  • public static final int STREAM_MUSIC = 3;

  • public static final int STREAM_ALARM = 4;

  • public static final int STREAM_NOTIFICATION = 5;

  • public static final int STREAM_BLUETOOTH_SCO = 6;

  • public static final int STREAM_SYSTEM_ENFORCED = 7;

  • public static final int STREAM_DTMF = 8;

  • public static final int STREAM_TTS = 9;

  • public static final int STREAM_ACCESSIBILITY = 10;

AUDIO_FORCE

  • public static final int FORCE_NONE = 0;

  • public static final int FORCE_SPEAKER = 1;

  • public static final int FORCE_HEADPHONES = 2;

  • public static final int FORCE_BT_SCO = 3;

  • public static final int FORCE_BT_A2DP = 4;

  • public static final int FORCE_WIRED_ACCESSORY = 5;

  • public static final int FORCE_BT_CAR_DOCK = 6;

  • public static final int FORCE_BT_DESK_DOCK = 7;

  • public static final int FORCE_ANALOG_DOCK = 8;

  • public static final int FORCE_DIGITAL_DOCK = 9;

  • public static final int FORCE_NO_BT_A2DP = 10;

  • public static final int FORCE_SYSTEM_ENFORCED = 11;

  • public static final int FORCE_HDMI_SYSTEM_AUDIO_ENFORCED = 12;

  • public static final int FORCE_ENCODED_SURROUND_NEVER = 13;

  • public static final int FORCE_ENCODED_SURROUND_ALWAYS = 14;

  • public static final int FORCE_ENCODED_SURROUND_MANUAL = 15;

  • public static final int NUM_FORCE_CONFIG = 16;

DEVICE_OUT

  • public static final int DEVICE_NONE = 0x0;

  • public static final int DEVICE_BIT_IN = 0x80000000;

  • public static final int DEVICE_BIT_DEFAULT = 0x40000000;

  • public static final int DEVICE_OUT_EARPIECE = 0x1;

  • public static final int DEVICE_OUT_SPEAKER = 0x2;

  • public static final int DEVICE_OUT_WIRED_HEADSET = 0x4;

  • public static final int DEVICE_OUT_WIRED_HEADPHONE = 0x8;

  • public static final int DEVICE_OUT_BLUETOOTH_SCO = 0x10;

  • public static final int DEVICE_OUT_BLUETOOTH_SCO_HEADSET = 0x20;

  • public static final int DEVICE_OUT_BLUETOOTH_SCO_CARKIT = 0x40;

  • public static final int DEVICE_OUT_BLUETOOTH_A2DP = 0x80;

  • public static final int DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES = 0x100;

  • public static final int DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER = 0x200;

  • public static final int DEVICE_OUT_AUX_DIGITAL = 0x400;

  • public static final int DEVICE_OUT_HDMI = DEVICE_OUT_AUX_DIGITAL;

  • public static final int DEVICE_OUT_ANLG_DOCK_HEADSET = 0x800;

  • public static final int DEVICE_OUT_DGTL_DOCK_HEADSET = 0x1000;

  • public static final int DEVICE_OUT_USB_ACCESSORY = 0x2000;

  • public static final int DEVICE_OUT_USB_DEVICE = 0x4000;

  • public static final int DEVICE_OUT_REMOTE_SUBMIX = 0x8000;

  • public static final int DEVICE_OUT_TELEPHONY_TX = 0x10000;

  • public static final int DEVICE_OUT_LINE = 0x20000;

  • public static final int DEVICE_OUT_HDMI_ARC = 0x40000;

  • public static final int DEVICE_OUT_SPDIF = 0x80000;

  • public static final int DEVICE_OUT_FM = 0x100000;

  • public static final int DEVICE_OUT_AUX_LINE = 0x200000;

  • public static final int DEVICE_OUT_SPEAKER_SAFE = 0x400000;

  • public static final int DEVICE_OUT_IP = 0x800000;

  • public static final int DEVICE_OUT_BUS = 0x1000000;

  • public static final int DEVICE_OUT_PROXY = 0x2000000;

  • public static final int DEVICE_OUT_USB_HEADSET = 0x4000000;

  • public static final int DEVICE_OUT_HEARING_AID = 0x8000000;

  • public static final int DEVICE_OUT_DEFAULT = DEVICE_BIT_DEFAULT;

DEVICE_IN

  • public static final int DEVICE_IN_COMMUNICATION = DEVICE_BIT_IN | 0x1;

  • public static final int DEVICE_IN_AMBIENT = DEVICE_BIT_IN | 0x2;

  • public static final int DEVICE_IN_BUILTIN_MIC = DEVICE_BIT_IN | 0x4;

  • public static final int DEVICE_IN_BLUETOOTH_SCO_HEADSET = DEVICE_BIT_IN | 0x8;

  • public static final int DEVICE_IN_WIRED_HEADSET = DEVICE_BIT_IN | 0x10;

  • public static final int DEVICE_IN_AUX_DIGITAL = DEVICE_BIT_IN | 0x20;

  • public static final int DEVICE_IN_HDMI = DEVICE_IN_AUX_DIGITAL;

  • public static final int DEVICE_IN_VOICE_CALL = DEVICE_BIT_IN | 0x40;

  • public static final int DEVICE_IN_TELEPHONY_RX = DEVICE_IN_VOICE_CALL;

  • public static final int DEVICE_IN_BACK_MIC = DEVICE_BIT_IN | 0x80;

  • public static final int DEVICE_IN_REMOTE_SUBMIX = DEVICE_BIT_IN | 0x100;

  • public static final int DEVICE_IN_ANLG_DOCK_HEADSET = DEVICE_BIT_IN | 0x200;

  • public static final int DEVICE_IN_DGTL_DOCK_HEADSET = DEVICE_BIT_IN | 0x400;

  • public static final int DEVICE_IN_USB_ACCESSORY = DEVICE_BIT_IN | 0x800;

  • public static final int DEVICE_IN_USB_DEVICE = DEVICE_BIT_IN | 0x1000;

  • public static final int DEVICE_IN_FM_TUNER = DEVICE_BIT_IN | 0x2000;

  • public static final int DEVICE_IN_TV_TUNER = DEVICE_BIT_IN | 0x4000;

  • public static final int DEVICE_IN_LINE = DEVICE_BIT_IN | 0x8000;

  • public static final int DEVICE_IN_SPDIF = DEVICE_BIT_IN | 0x10000;

  • public static final int DEVICE_IN_BLUETOOTH_A2DP = DEVICE_BIT_IN | 0x20000;

  • public static final int DEVICE_IN_LOOPBACK = DEVICE_BIT_IN | 0x40000;

  • public static final int DEVICE_IN_IP = DEVICE_BIT_IN | 0x80000;

  • public static final int DEVICE_IN_BUS = DEVICE_BIT_IN | 0x100000;

  • public static final int DEVICE_IN_PROXY = DEVICE_BIT_IN | 0x1000000;

  • public static final int DEVICE_IN_USB_HEADSET = DEVICE_BIT_IN | 0x2000000;

  • public static final int DEVICE_IN_BLUETOOTH_BLE = DEVICE_BIT_IN | 0x4000000;

  • public static final int DEVICE_IN_HDMI_ARC = DEVICE_BIT_IN | 0x8000000;

  • public static final int DEVICE_IN_ECHO_REFERENCE = DEVICE_BIT_IN | 0x10000000;

  • public static final int DEVICE_IN_DEFAULT = DEVICE_BIT_IN | DEVICE_BIT_DEFAULT;

AUDIO_FORMAT

  • public static final int AUDIO_FORMAT_INVALID = 0xFFFFFFFF;

  • public static final int AUDIO_FORMAT_DEFAULT = 0;

  • public static final int AUDIO_FORMAT_AAC = 0x04000000;

  • public static final int AUDIO_FORMAT_SBC = 0x1F000000;

  • public static final int AUDIO_FORMAT_APTX = 0x20000000;

  • public static final int AUDIO_FORMAT_APTX_HD = 0x21000000;

  • public static final int AUDIO_FORMAT_LDAC = 0x23000000;

  • 13
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值