Rabbit-R1/original r1/java/sources/org/webrtc/voiceengine/WebRtcAudioUtils.java

259 lines
9.7 KiB
Java
Raw Normal View History

2024-05-21 16:08:36 -05:00
package org.webrtc.voiceengine;
import android.media.AudioDeviceInfo;
import android.media.AudioManager;
import android.os.Build;
import java.util.Arrays;
import java.util.List;
import org.webrtc.ContextUtils;
import org.webrtc.Logging;
/* loaded from: classes3.dex */
public final class WebRtcAudioUtils {
private static final int DEFAULT_SAMPLE_RATE_HZ = 16000;
private static final String TAG = "WebRtcAudioUtils";
private static int defaultSampleRateHz = 16000;
private static boolean isDefaultSampleRateOverridden;
private static boolean useWebRtcBasedAcousticEchoCanceler;
private static boolean useWebRtcBasedNoiseSuppressor;
private static final String[] BLACKLISTED_OPEN_SL_ES_MODELS = new String[0];
private static final String[] BLACKLISTED_AEC_MODELS = new String[0];
private static final String[] BLACKLISTED_NS_MODELS = new String[0];
private static String deviceTypeToString(int i) {
switch (i) {
case 1:
return "TYPE_BUILTIN_EARPIECE";
case 2:
return "TYPE_BUILTIN_SPEAKER";
case 3:
return "TYPE_WIRED_HEADSET";
case 4:
return "TYPE_WIRED_HEADPHONES";
case 5:
return "TYPE_LINE_ANALOG";
case 6:
return "TYPE_LINE_DIGITAL";
case 7:
return "TYPE_BLUETOOTH_SCO";
case 8:
return "TYPE_BLUETOOTH_A2DP";
case 9:
return "TYPE_HDMI";
case 10:
return "TYPE_HDMI_ARC";
case 11:
return "TYPE_USB_DEVICE";
case 12:
return "TYPE_USB_ACCESSORY";
case 13:
return "TYPE_DOCK";
case 14:
return "TYPE_FM";
case 15:
return "TYPE_BUILTIN_MIC";
case 16:
return "TYPE_FM_TUNER";
case 17:
return "TYPE_TV_TUNER";
case 18:
return "TYPE_TELEPHONY";
case 19:
return "TYPE_AUX_LINE";
case 20:
return "TYPE_IP";
case 21:
return "TYPE_BUS";
case 22:
return "TYPE_USB_HEADSET";
default:
return "TYPE_UNKNOWN";
}
}
public static boolean isAutomaticGainControlSupported() {
return false;
}
/* JADX INFO: Access modifiers changed from: package-private */
public static String modeToString(int i) {
return i != 0 ? i != 1 ? i != 2 ? i != 3 ? "MODE_INVALID" : "MODE_IN_COMMUNICATION" : "MODE_IN_CALL" : "MODE_RINGTONE" : "MODE_NORMAL";
}
private static String streamTypeToString(int i) {
return i != 0 ? i != 1 ? i != 2 ? i != 3 ? i != 4 ? i != 5 ? "STREAM_INVALID" : "STREAM_NOTIFICATION" : "STREAM_ALARM" : "STREAM_MUSIC" : "STREAM_RING" : "STREAM_SYSTEM" : "STREAM_VOICE_CALL";
}
public static synchronized void setWebRtcBasedAcousticEchoCanceler(boolean z) {
synchronized (WebRtcAudioUtils.class) {
useWebRtcBasedAcousticEchoCanceler = z;
}
}
public static synchronized void setWebRtcBasedNoiseSuppressor(boolean z) {
synchronized (WebRtcAudioUtils.class) {
useWebRtcBasedNoiseSuppressor = z;
}
}
public static synchronized void setWebRtcBasedAutomaticGainControl(boolean z) {
synchronized (WebRtcAudioUtils.class) {
Logging.w(TAG, "setWebRtcBasedAutomaticGainControl() is deprecated");
}
}
public static synchronized boolean useWebRtcBasedAcousticEchoCanceler() {
boolean z;
synchronized (WebRtcAudioUtils.class) {
if (useWebRtcBasedAcousticEchoCanceler) {
Logging.w(TAG, "Overriding default behavior; now using WebRTC AEC!");
}
z = useWebRtcBasedAcousticEchoCanceler;
}
return z;
}
public static synchronized boolean useWebRtcBasedNoiseSuppressor() {
boolean z;
synchronized (WebRtcAudioUtils.class) {
if (useWebRtcBasedNoiseSuppressor) {
Logging.w(TAG, "Overriding default behavior; now using WebRTC NS!");
}
z = useWebRtcBasedNoiseSuppressor;
}
return z;
}
public static synchronized boolean useWebRtcBasedAutomaticGainControl() {
synchronized (WebRtcAudioUtils.class) {
}
return true;
}
public static boolean isAcousticEchoCancelerSupported() {
return WebRtcAudioEffects.canUseAcousticEchoCanceler();
}
public static boolean isNoiseSuppressorSupported() {
return WebRtcAudioEffects.canUseNoiseSuppressor();
}
public static synchronized void setDefaultSampleRateHz(int i) {
synchronized (WebRtcAudioUtils.class) {
isDefaultSampleRateOverridden = true;
defaultSampleRateHz = i;
}
}
public static synchronized boolean isDefaultSampleRateOverridden() {
boolean z;
synchronized (WebRtcAudioUtils.class) {
z = isDefaultSampleRateOverridden;
}
return z;
}
public static synchronized int getDefaultSampleRateHz() {
int i;
synchronized (WebRtcAudioUtils.class) {
i = defaultSampleRateHz;
}
return i;
}
public static List<String> getBlackListedModelsForAecUsage() {
return Arrays.asList(BLACKLISTED_AEC_MODELS);
}
public static List<String> getBlackListedModelsForNsUsage() {
return Arrays.asList(BLACKLISTED_NS_MODELS);
}
public static String getThreadInfo() {
return "@[name=" + Thread.currentThread().getName() + ", id=" + Thread.currentThread().getId() + "]";
}
public static boolean runningOnEmulator() {
return Build.HARDWARE.equals("goldfish") && Build.BRAND.startsWith("generic_");
}
public static boolean deviceIsBlacklistedForOpenSLESUsage() {
return Arrays.asList(BLACKLISTED_OPEN_SL_ES_MODELS).contains(Build.MODEL);
}
static void logDeviceInfo(String str) {
Logging.d(str, "Android SDK: " + Build.VERSION.SDK_INT + ", Release: " + Build.VERSION.RELEASE + ", Brand: " + Build.BRAND + ", Device: " + Build.DEVICE + ", Id: " + Build.ID + ", Hardware: " + Build.HARDWARE + ", Manufacturer: " + Build.MANUFACTURER + ", Model: " + Build.MODEL + ", Product: " + Build.PRODUCT);
}
/* JADX INFO: Access modifiers changed from: package-private */
public static void logAudioState(String str) {
logDeviceInfo(str);
AudioManager audioManager = (AudioManager) ContextUtils.getApplicationContext().getSystemService("audio");
logAudioStateBasic(str, audioManager);
logAudioStateVolume(str, audioManager);
logAudioDeviceInfo(str, audioManager);
}
private static void logAudioStateBasic(String str, AudioManager audioManager) {
Logging.d(str, "Audio State: audio mode: " + modeToString(audioManager.getMode()) + ", has mic: " + hasMicrophone() + ", mic muted: " + audioManager.isMicrophoneMute() + ", music active: " + audioManager.isMusicActive() + ", speakerphone: " + audioManager.isSpeakerphoneOn() + ", BT SCO: " + audioManager.isBluetoothScoOn());
}
private static boolean isVolumeFixed(AudioManager audioManager) {
return audioManager.isVolumeFixed();
}
private static void logAudioStateVolume(String str, AudioManager audioManager) {
int[] iArr = {0, 3, 2, 4, 5, 1};
Logging.d(str, "Audio State: ");
boolean isVolumeFixed = isVolumeFixed(audioManager);
Logging.d(str, " fixed volume=" + isVolumeFixed);
if (isVolumeFixed) {
return;
}
for (int i = 0; i < 6; i++) {
int i2 = iArr[i];
StringBuilder sb = new StringBuilder();
sb.append(" " + streamTypeToString(i2) + ": ");
sb.append("volume=").append(audioManager.getStreamVolume(i2));
sb.append(", max=").append(audioManager.getStreamMaxVolume(i2));
logIsStreamMute(str, audioManager, i2, sb);
Logging.d(str, sb.toString());
}
}
private static void logIsStreamMute(String str, AudioManager audioManager, int i, StringBuilder sb) {
sb.append(", muted=").append(audioManager.isStreamMute(i));
}
private static void logAudioDeviceInfo(String str, AudioManager audioManager) {
AudioDeviceInfo[] devices = audioManager.getDevices(3);
if (devices.length == 0) {
return;
}
Logging.d(str, "Audio Devices: ");
for (AudioDeviceInfo audioDeviceInfo : devices) {
StringBuilder sb = new StringBuilder(" ");
sb.append(deviceTypeToString(audioDeviceInfo.getType()));
sb.append(audioDeviceInfo.isSource() ? "(in): " : "(out): ");
if (audioDeviceInfo.getChannelCounts().length > 0) {
sb.append("channels=").append(Arrays.toString(audioDeviceInfo.getChannelCounts()));
sb.append(", ");
}
if (audioDeviceInfo.getEncodings().length > 0) {
sb.append("encodings=").append(Arrays.toString(audioDeviceInfo.getEncodings()));
sb.append(", ");
}
if (audioDeviceInfo.getSampleRates().length > 0) {
sb.append("sample rates=").append(Arrays.toString(audioDeviceInfo.getSampleRates()));
sb.append(", ");
}
sb.append("id=").append(audioDeviceInfo.getId());
Logging.d(str, sb.toString());
}
}
private static boolean hasMicrophone() {
return ContextUtils.getApplicationContext().getPackageManager().hasSystemFeature("android.hardware.microphone");
}
}